Blame agent/mibgroup/host/data_access/swrun_nlist.c

Packit fcad23
/*
Packit fcad23
 * swrun_nlist.c:
Packit fcad23
 *     hrSWRunTable data access:
Packit fcad23
 *     nlist() interface
Packit fcad23
 */
Packit fcad23
#include <net-snmp/net-snmp-config.h>
Packit fcad23
Packit fcad23
#include <stdio.h>
Packit fcad23
#ifdef HAVE_STDLIB_H
Packit fcad23
#include <stdlib.h>
Packit fcad23
#endif
Packit fcad23
#ifdef HAVE_UNISTD_H
Packit fcad23
#include <unistd.h>
Packit fcad23
#endif
Packit fcad23
#ifdef HAVE_SYS_TYPES_H
Packit fcad23
#include <sys/types.h>
Packit fcad23
#endif
Packit fcad23
Packit fcad23
#include <net-snmp/agent/auto_nlist.h>
Packit fcad23
Packit fcad23
#include <net-snmp/net-snmp-includes.h>
Packit fcad23
#include <net-snmp/agent/net-snmp-agent-includes.h>
Packit fcad23
#include <net-snmp/library/container.h>
Packit fcad23
#include <net-snmp/library/snmp_debug.h>
Packit fcad23
#include <net-snmp/data_access/swrun.h>
Packit fcad23
#include "swrun_private.h"
Packit fcad23
Packit fcad23
/* ---------------------------------------------------------------------
Packit fcad23
 */
Packit fcad23
void
Packit fcad23
netsnmp_arch_swrun_init(void)
Packit fcad23
{
Packit fcad23
    extern int _swrun_max;
Packit fcad23
Packit fcad23
    auto_nlist(  PROC_SYMBOL, 0, 0);
Packit fcad23
    auto_nlist( NPROC_SYMBOL, (char *)&_swrun_max, sizeof(int));
Packit fcad23
    return;
Packit fcad23
}
Packit fcad23
Packit fcad23
/* ---------------------------------------------------------------------
Packit fcad23
 */
Packit fcad23
int
Packit fcad23
netsnmp_arch_swrun_container_load( netsnmp_container *container, u_int flags)
Packit fcad23
{
Packit fcad23
    struct proc         *proc_table;
Packit fcad23
    int                  proc_type_base;
Packit fcad23
    int                  nproc, i, rc;
Packit fcad23
    netsnmp_swrun_entry *entry;
Packit fcad23
Packit fcad23
    auto_nlist( NPROC_SYMBOL, (char *)&nproc, sizeof(int));
Packit fcad23
    proc_table = (struct proc *) malloc(nproc*(sizeof(struct proc)));
Packit fcad23
Packit fcad23
    auto_nlist(  PROC_SYMBOL, (char *)&proc_table_base, sizeof(int));
Packit fcad23
    NETSNMP_KLOOKUP(proc_table_base, (char *)proc_table, 
Packit fcad23
                                        nproc*(sizeof(struct proc)));
Packit fcad23
Packit fcad23
    for ( i=0 ; i
Packit fcad23
        if (0 == proc_table[i].p_stat)
Packit fcad23
            continue;	/* Skip unused entries */
Packit fcad23
        entry = netsnmp_swrun_entry_create(proc_table[i].p_pid);
Packit fcad23
        if (NULL == entry)
Packit fcad23
            continue;   /* error already logged by function */
Packit fcad23
        rc = CONTAINER_INSERT(container, entry);
Packit fcad23
Packit fcad23
        /*
Packit fcad23
         * XXX - What information does 'struct proc' contain?
Packit fcad23
         */
Packit fcad23
        
Packit fcad23
/*
Packit fcad23
 Apparently no process name/argument information
Packit fcad23
        entry->hrSWRunName_len = snprintf(entry->hrSWRunName,
Packit fcad23
                                   sizeof(entry->hrSWRunName)-1,
Packit fcad23
                                          "%s", proc_table[i].???);
Packit fcad23
        entry->hrSWRunPath_len = snprintf(entry->hrSWRunPath,
Packit fcad23
                                   sizeof(entry->hrSWRunPath)-1,
Packit fcad23
                                          "%s", proc_table[i].???);
Packit fcad23
        entry->hrSWRunParameters_len = snprintf(entry->hrSWRunParameters,
Packit fcad23
                                         sizeof(entry->hrSWRunParameters)-1,
Packit fcad23
                                          "%s", ???);
Packit fcad23
 */
Packit fcad23
Packit fcad23
        switch (proc_table[i].p_stat) {
Packit fcad23
/* XXX - which names to use ?? */
Packit fcad23
        case SACTIVE:
Packit fcad23
        case SRUN:
Packit fcad23
        case SONPROC: entry->hrSWRunStatus = HRSWRUNSTATUS_RUNNING;
Packit fcad23
                      break;
Packit fcad23
        case SSWAP:
Packit fcad23
        case SSLEEP:
Packit fcad23
        case SWAIT:   entry->hrSWRunStatus = HRSWRUNSTATUS_RUNNABLE;
Packit fcad23
                      break;
Packit fcad23
        case SSTOP:   entry->hrSWRunStatus = HRSWRUNSTATUS_NOTRUNNABLE;
Packit fcad23
                      break;
Packit fcad23
        case SIDL:
Packit fcad23
        case SZOMB:
Packit fcad23
        default:      entry->hrSWRunStatus = HRSWRUNSTATUS_INVALID;
Packit fcad23
                      break;
Packit fcad23
        }
Packit fcad23
Packit fcad23
Packit fcad23
        entry->hrSWRunPerfCPU  = (proc_table[i].p_utime.tv_sec  * 100);
Packit fcad23
        entry->hrSWRunPerfCPU += (proc_table[i].p_utime.tv_usec / 10000);
Packit fcad23
        entry->hrSWRunPerfCPU += (proc_table[i].p_stime.tv_sec  * 100);
Packit fcad23
        entry->hrSWRunPerfCPU += (proc_table[i].p_stime.tv_usec / 10000);
Packit fcad23
    /*
Packit fcad23
     or entry->hrSWRunPerfCPU  = proc_table[i].p_time;
Packit fcad23
     */
Packit fcad23
    }
Packit fcad23
    free(proc_table);
Packit fcad23
Packit fcad23
    DEBUGMSGTL(("swrun:load:arch"," loaded %d entries\n",
Packit fcad23
                CONTAINER_SIZE(container)));
Packit fcad23
Packit fcad23
    return 0;
Packit fcad23
}