diff options
Diffstat (limited to 'agent/mibgroup/hardware/memory/memory_dynix.c')
-rw-r--r-- | agent/mibgroup/hardware/memory/memory_dynix.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/agent/mibgroup/hardware/memory/memory_dynix.c b/agent/mibgroup/hardware/memory/memory_dynix.c new file mode 100644 index 0000000..9b0bc50 --- /dev/null +++ b/agent/mibgroup/hardware/memory/memory_dynix.c @@ -0,0 +1,117 @@ +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/net-snmp-includes.h> +#include <net-snmp/agent/net-snmp-agent-includes.h> +#include <net-snmp/agent/hardware/memory.h> + +#include <unistd.h> + +# ifdef HAVE_SYS_SWAP_H +# include <sys/swap.h> +# endif +# ifdef HAVE_SYS_PARAM_H +# include <sys/param.h> +# endif + +/* + * Retained from UCD implementation + */ +long +getTotalSwap(void) +{ + long total_swp_sectors = -1; + + size_t max_elements = MAXSWAPDEVS; + swapsize_t swap_dblks[MAXSWAPDEVS]; + swapstat_t swap_status; + int swap_sizes; + + if ((swap_sizes = + getswapstat(max_elements, swap_dblks, &swap_status) >= 0)) + total_swp_sectors = + swap_dblks[0].sws_size * swap_dblks[0].sws_total; + + return (total_swp_sectors); +} + +long +getFreeSwap(void) +{ + long free_swp_sectors = -1; + + size_t max_elements = MAXSWAPDEVS; + swapsize_t swap_dblks[MAXSWAPDEVS]; + swapstat_t swap_status; + int i, swap_sizes; + + if ((swap_sizes = + getswapstat(max_elements, swap_dblks, &swap_status) >= 0)) { + for (i = 0; i < swap_sizes; i++) + free_swp_sectors += + swap_dblks[0].sws_size * swap_dblks[i].sws_avail; + } + + return (free_swp_sectors); +} + +/* + * return is in kilobytes + */ +long +getTotalFree(void) +{ + long free_swap = S2KB(getFreeSwap()); + long free_mem = P2KB(sysconf(_SC_FREEMEM)); + + if (free_swap < 0) + return (free_swap); + if (free_mem < 0) + return (free_mem); + + free_mem += free_swap; + return (free_mem); +} + + + /* + * Load the latest memory usage statistics + */ +int netsnmp_mem_arch_load( netsnmp_cache *cache, void *magic ) { + + netsnmp_memory_info *mem; + + mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 1 ); + if (!mem) { + snmp_log_perror("No Memory info entry"); + } else { + if (!mem->descr) + mem->descr = strdup( "Physical memory" ); + mem->units = P2KB(1)*1024; + mem->size = sysconf(_SC_PHYSMEM); + mem->free = sysconf(_SC_FREEMEM); + } + + mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 1 ); + if (!mem) { + snmp_log_perror("No Swap info entry"); + } else { + if (!mem->descr) + mem->descr = strdup( "Swap space" ); + mem->units = S2KB(1)*1024; + mem->size = getTotalSwap(); + mem->free = getFreeSwap(); + } + +/* + mem = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MISC, 1 ); + if (!mem) { + snmp_log_perror("No Buffer, etc info entry"); + } else { + mem->units = 1024; + mem->size = -1; + mem->free = getTotalFree(); + mem->other = -1; + } +*/ + + return 0; +} |