|
Packit Service |
b38f0b |
#include <net-snmp/net-snmp-config.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/net-snmp-includes.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/agent/net-snmp-agent-includes.h>
|
|
Packit Service |
b38f0b |
#include <net-snmp/agent/hardware/memory.h>
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
#include <sys/param.h>
|
|
Packit Service |
b38f0b |
#include <sys/pstat.h>
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
void get_swapinfo(long *total, long *free, long *size);
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* Load the latest memory usage statistics
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) {
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
struct pst_static pst;
|
|
Packit Service |
b38f0b |
struct pst_dynamic psd;
|
|
Packit Service |
b38f0b |
netsnmp_memory_info *mem;
|
|
Packit Service |
b38f0b |
long total_swap = 0;
|
|
Packit Service |
b38f0b |
long free_swap = 0;
|
|
Packit Service |
b38f0b |
long size = 0;
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* Retrieve the memory information from the underlying O/S...
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
if (pstat_getstatic(&pst, sizeof(pst), (size_t) 1, 0) == -1) {
|
|
Packit Service |
b38f0b |
snmp_log(LOG_ERR, "memory_hpux: pstat_getstatic failed!\n");
|
|
Packit Service |
b38f0b |
return -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
if (pstat_getdynamic(&psd, sizeof(psd), (size_t) 1, 0) == -1) {
|
|
Packit Service |
b38f0b |
snmp_log(LOG_ERR, "memory_hpux: pstat_getdynamic failed!\n");
|
|
Packit Service |
b38f0b |
return -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 );
|
|
Packit Service |
b38f0b |
if (!mem) {
|
|
Packit Service |
b38f0b |
snmp_log_perror("No Memory info entry");
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
if (!mem->descr)
|
|
Packit Service |
b38f0b |
mem->descr = strdup( "Physical memory" );
|
|
Packit Service |
b38f0b |
mem->units = pst.page_size;
|
|
Packit Service |
b38f0b |
mem->size = pst.physical_memory;
|
|
Packit Service |
b38f0b |
mem->free = psd.psd_free;
|
|
Packit Service |
b38f0b |
mem->other = -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
get_swapinfo(&total_swap, &free_swap, &size);
|
|
Packit Service |
b38f0b |
mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 );
|
|
Packit Service |
b38f0b |
if (!mem) {
|
|
Packit Service |
b38f0b |
snmp_log_perror("No Swap info entry");
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
if (!mem->descr)
|
|
Packit Service |
b38f0b |
mem->descr = strdup( "Swap space (total)" );
|
|
Packit Service |
b38f0b |
mem->units = size;
|
|
Packit Service |
b38f0b |
mem->size = total_swap;
|
|
Packit Service |
b38f0b |
mem->free = free_swap;
|
|
Packit Service |
b38f0b |
mem->other = -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_STEXT, 1 );
|
|
Packit Service |
b38f0b |
if (!mem) {
|
|
Packit Service |
b38f0b |
snmp_log_perror("No Swap text entry");
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
if (!mem->descr)
|
|
Packit Service |
b38f0b |
mem->descr = strdup( "Swapped text pages" );
|
|
Packit Service |
b38f0b |
mem->units = pst.page_size;
|
|
Packit Service |
b38f0b |
mem->size = psd.psd_vmtxt;
|
|
Packit Service |
b38f0b |
mem->free = psd.psd_avmtxt;
|
|
Packit Service |
b38f0b |
mem->other = -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_RTEXT, 1 );
|
|
Packit Service |
b38f0b |
if (!mem) {
|
|
Packit Service |
b38f0b |
snmp_log_perror("No real text entry");
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
if (!mem->descr)
|
|
Packit Service |
b38f0b |
mem->descr = strdup( "Real text pages" );
|
|
Packit Service |
b38f0b |
mem->units = pst.page_size;
|
|
Packit Service |
b38f0b |
mem->size = psd.psd_rmtxt;
|
|
Packit Service |
b38f0b |
mem->free = psd.psd_armtxt;
|
|
Packit Service |
b38f0b |
mem->other = -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MISC, 1 );
|
|
Packit Service |
b38f0b |
if (!mem) {
|
|
Packit Service |
b38f0b |
snmp_log_perror("No Buffer, etc info entry");
|
|
Packit Service |
b38f0b |
} else {
|
|
Packit Service |
b38f0b |
mem->units = 1024;
|
|
Packit Service |
b38f0b |
mem->size = -1;
|
|
Packit Service |
b38f0b |
mem->free = (pst.page_size/1024)*psd.psd_free + swap.free_swap;
|
|
Packit Service |
b38f0b |
mem->other = -1;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
return 0;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* Retained from UCD implementation
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
void
|
|
Packit Service |
b38f0b |
get_swapinfo(long *total, long *free, long *size)
|
|
Packit Service |
b38f0b |
{
|
|
Packit Service |
b38f0b |
struct pst_swapinfo pss;
|
|
Packit Service |
b38f0b |
netsnmp_memory_info *mem;
|
|
Packit Service |
b38f0b |
int i = 0;
|
|
Packit Service |
b38f0b |
char buf[1024];
|
|
Packit Service |
b38f0b |
|
|
Packit Service |
b38f0b |
while (pstat_getswap(&pss, sizeof(pss), (size_t) 1, i) != -1) {
|
|
Packit Service |
b38f0b |
if (pss.pss_idx == (unsigned) i) {
|
|
Packit Service |
b38f0b |
/*
|
|
Packit Service |
b38f0b |
* TODO - Skip if only one swap device
|
|
Packit Service |
b38f0b |
*/
|
|
Packit Service |
b38f0b |
mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP+1+i, 1 );
|
|
Packit Service |
b38f0b |
if (!mem)
|
|
Packit Service |
b38f0b |
continue;
|
|
Packit Service |
b38f0b |
if (!mem->descr) {
|
|
Packit Service |
b38f0b |
sprintf(buf, "swap #%d %s", i, pss.pss_mntpt);
|
|
Packit Service |
b38f0b |
mem->descr = strdup( buf );
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
mem->units = 1024;
|
|
Packit Service |
b38f0b |
mem->size = (pss.pss_nblksavail * (DEV_BSIZE/512)) / 2; /* Or pss_nblks ? */
|
|
Packit Service |
b38f0b |
mem->free = 4*pss.pss_nfpgs; /* Or pss_nblksavail ? */
|
|
Packit Service |
b38f0b |
mem->other = -1;
|
|
Packit Service |
b38f0b |
*total +=mem->size;
|
|
Packit Service |
b38f0b |
*free +=mem->free;
|
|
Packit Service |
b38f0b |
*size = mem->units; /* Hopefully consistent! */
|
|
Packit Service |
b38f0b |
i++;
|
|
Packit Service |
b38f0b |
} else
|
|
Packit Service |
b38f0b |
return;
|
|
Packit Service |
b38f0b |
}
|
|
Packit Service |
b38f0b |
} /* end get_swapinfo */
|
|
Packit Service |
b38f0b |
|