⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memory.c

📁 开发snmp的开发包有两个开放的SNMP开发库
💻 C
字号:
/* * Note: this file originally auto-generated by mib2c using *        : mib2c.scalar.conf,v 1.9 2005/01/07 09:37:18 dts12 Exp $ */#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 "memory.h"#define DEFAULTMINIMUMSWAP 16000        /* kilobytes */int memory_object_index;int minimum_swap;/** Initializes the memory module */voidinit_memory(void){    static oid      memory_oid[] = { 1, 3, 6, 1, 4, 1, 2021, 4 };    static oid      memSwapError_oid[]  = { 1, 3, 6, 1, 4, 1, 2021, 4, 100 };    static oid      memSwapErrMsg_oid[] = { 1, 3, 6, 1, 4, 1, 2021, 4, 101 };    DEBUGMSGTL(("memory", "Initializing\n"));    memory_object_index = OID_LENGTH(memory_oid);    netsnmp_register_scalar_group(        netsnmp_create_handler_registration("memory", handle_memory,                                 memory_oid, memory_object_index,                                             HANDLER_CAN_RONLY),                                 1, 17);    netsnmp_register_scalar(        netsnmp_create_handler_registration("memSwapError", handle_memory,                           memSwapError_oid, memory_object_index+1,                                             HANDLER_CAN_RONLY));    netsnmp_register_scalar(        netsnmp_create_handler_registration("memSwapErrMsg", handle_memory,                          memSwapErrMsg_oid, memory_object_index+1,                                             HANDLER_CAN_RONLY));    snmpd_register_config_handler("swap", memory_parse_config,                                      memory_free_config, "min-avail");}voidmemory_parse_config(const char *token, char *cptr){    minimum_swap = atoi(cptr);}voidmemory_free_config(void){    minimum_swap = DEFAULTMINIMUMSWAP;}inthandle_memory(netsnmp_mib_handler *handler,                netsnmp_handler_registration *reginfo,                netsnmp_agent_request_info *reqinfo,                netsnmp_request_info *requests){    netsnmp_memory_info *mem_info;    int val;    char buf[1024];    /*     * We just need to handle valid GET requests, as invalid instances     *   are rejected automatically, and (valid) GETNEXT requests are     *   converted into the appropriate GET request.     *     * We also only ever receive one request at a time.     */    switch (reqinfo->mode) {    case MODE_GET:        netsnmp_memory_load();        switch (requests->requestvb->name[ memory_object_index ]) {        case MEMORY_INDEX:            val = 0;            break;        case MEMORY_ERRNAME:            sprintf(buf, "swap");            snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,                                     (u_char *)buf, strlen(buf));            return SNMP_ERR_NOERROR;        case MEMORY_SWAP_TOTAL:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->size;     /* swaptotal */            val *= (mem_info->units/1024);            break;        case MEMORY_SWAP_AVAIL:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->free;     /* swapfree */            val *= (mem_info->units/1024);            break;        case MEMORY_REAL_TOTAL:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->size;     /* memtotal */            val *= (mem_info->units/1024);            break;        case MEMORY_REAL_AVAIL:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_PHYSMEM, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->free;     /* memfree */            val *= (mem_info->units/1024);            break;        case MEMORY_STXT_TOTAL:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_STEXT, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->size;            val *= (mem_info->units/1024);            break;        case MEMORY_STXT_AVAIL:    /* Deprecated */        case MEMORY_STXT_USED:            /*             *   The original MIB description of memAvailSwapTXT             * was inconsistent with that implied by the name.             *   Retain the actual behaviour for the (sole)             * implementation of this object, but deprecate it in             * favour of a more consistently named replacement object.             */            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_STEXT, 0 );            if (!mem_info)               goto NOSUCH;            val  = (mem_info->size - mem_info->free);            val *= (mem_info->units/1024);            break;        case MEMORY_RTXT_TOTAL:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_RTEXT, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->size;            val *= (mem_info->units/1024);            break;        case MEMORY_RTXT_AVAIL:    /* Deprecated */        case MEMORY_RTXT_USED:            /*             *   The original MIB description of memAvailRealTXT             * was inconsistent with that implied by the name.             *   Retain the actual behaviour for the (sole)             * implementation of this object, but deprecate it in             * favour of a more consistently named replacement object.             */            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_RTEXT, 0 );            if (!mem_info)               goto NOSUCH;            val  = (mem_info->size - mem_info->free);            val *= (mem_info->units/1024);            break;        case MEMORY_FREE:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_VIRTMEM, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->free;     /* memfree + swapfree */            val *= (mem_info->units/1024);            break;        case MEMORY_SWAP_MIN:            val = minimum_swap;            break;        case MEMORY_SHARED:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SHARED, 0 );            if (!mem_info)               goto NOSUCH;            val  =  mem_info->size;     /* memshared */            val *= (mem_info->units/1024);            break;        case MEMORY_BUFFER:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_MBUF, 0 );            if (!mem_info || mem_info->size == -1)               goto NOSUCH;            val  =  mem_info->size;      /* buffers */            val *= (mem_info->units/1024);            break;        case MEMORY_CACHED:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_CACHED, 0 );            if (!mem_info || mem_info->size== -1)               goto NOSUCH;            val  =  mem_info->size;     /* cached */            val *= (mem_info->units/1024);            break;        case MEMORY_SWAP_ERROR:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 0 );            if (!mem_info)               goto NOSUCH;            val = ((mem_info->units / 1024) * mem_info->free > minimum_swap) ? 0 : 1;            break;        case MEMORY_SWAP_ERRMSG:            mem_info = netsnmp_memory_get_byIdx( NETSNMP_MEM_TYPE_SWAP, 0 );            if (!mem_info)               goto NOSUCH;            if ((mem_info->units / 1024) * mem_info->free > minimum_swap)                buf[0] = 0;            else                sprintf(buf, "Running out of swap space (%ld)", mem_info->free);            snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,                                     (u_char *)buf, strlen(buf));            return SNMP_ERR_NOERROR;        default:            snmp_log(LOG_ERR, "unknown object (%lu) in handle_memory\n",                     requests->requestvb->name[ memory_object_index ]);NOSUCH:            netsnmp_set_request_error( reqinfo, requests, SNMP_NOSUCHOBJECT );            return SNMP_ERR_NOERROR;        }        /*         * All non-integer objects (and errors) have already been         * processed.  So return the integer value.         */        snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,                                 (u_char *)&val, sizeof(val));        break;    default:        /*         * we should never get here, so this is a really bad error          */        snmp_log(LOG_ERR, "unknown mode (%d) in handle_memory\n",                 reqinfo->mode);        return SNMP_ERR_GENERR;    }    return SNMP_ERR_NOERROR;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -