snmp子系统的使用

下载net-snmp-5.7.3

解压执行

./configure --build=i686-linux --host=arm-linux  CC=arm-linux-gcc  --with-endianness=little  --prefix=/opt/net-snmp --with-ar=arm-linux-ar LDFLAGS="-static" --disable-embedded-perl --without-perl-modules

-enable-mini-agent -disable-mibs  --with-mib-modules=dlmod

在configure中,当我们选择了--enable-mini-agent这个选项之后,将会不自动加载大多数modules,其中包括dlmod  mudules,这个模块是用于加载动态库模块。为了使用这个模块,我们需要在选择  --enable-mini-agen之后。再选择--with-mib-modules=dlmod这个选项,同时还要将在agent/mibgroup/ucd-snmp下的dlmod的C文件跟H文件移到agent/mibgroup下,编译就安装之后就可以使用。

之前我有取消的--enable-mini-agent这个参数,但是发现取消之后,虽然dlomd modules能否加载成功,可是当你运行snmp的这个进程的时候,会出现段错误的提示。make

make install

编写mib库

先准备一个xxx.mib

env MIBS="+./RFC1628_UPS_MIB.MIB" mib2c upsMIB

将生成的.so文件的路径添加到snmpd.conf配置文件中,打开snmpd.conf添加内容如下(样例):

dlmod FY04040019(你so文件所在地址)/FY04040019.so

这样以后启动snmpd时就自动加载这个模块了。

 编译出.so文件后就可以把该文件链接到snmpd中了,命令如下(该命令用于服务检测,启动以后该终端就一直检测snmp包的信息):

snmpd -f -d -L -DFY04040019,dlmod -DFY04040019  -c /usr/local/share/snmp/snmpd.conf

trap添加

env MIBS="+/opt/net-snmp/RFC1628_UPS_MIB.MIB" mib2c -c mib2c.notify.conf upsMIB

以下为例程

extern const oid snmptrap_oid[]= {1,3,6,1,6,3,1,1,4,1,0};

const size_t snmptrap_oid_len = OID_LENGTH(snmptrap_oid);


void init_TestTraps(void)

{

    DEBUGMSGTL(("TestTraps","Initializing\n"));

    snmp_alarm_register(1,SA_REPEAT,read_cpudata_repeat,NULL);

}


int

send_cpuRatioHigh_trap(void)

{

    netsnmp_variable_list  *var_list = NULL;

    const oid cpuRatioHigh_oid[]= { 1,3,6,1,4,1,1000,1,1 };

    const oid TestTrapDescription_oid[]= { 1,3,6,1,4,1,1000,1,2,1,0 };


    static char TestTrapDescription[50];

    strcpy(TestTrapDescription,"CPU使用率过高");

    /*

     * Set the snmpTrapOid.0 value

     */

    snmp_varlist_add_variable(&var_list,

        snmptrap_oid,snmptrap_oid_len,

        ASN_OBJECT_ID,

        cpuRatioHigh_oid,sizeof(cpuRatioHigh_oid));


    /*

     * Add any objects from the trap definition

     */

    snmp_varlist_add_variable(&var_list,

        TestTrapDescription_oid,OID_LENGTH(TestTrapDescription_oid),

        ASN_OCTET_STR,

        /* Set an appropriate value for TestTrapDescription */

        NULL,0);


    /*

     * Add any extra(optional)objects here

     */


    /*

     * Send the trap to the list of configured destinations

     *  and clean up

     */

    send_v2trap(var_list);

    snmp_free_varbind(var_list);


    return SNMP_ERR_NOERROR;

}


void judge_send_cputrap(int cpu)

{

    static unsigned int cputrap_clientreg = 0;

    if(cpu > 80)

    {

        if(cputrap_clientreg == 0){

            send_cpuRatioHigh_trap();

            cputrap_clientreg = snmp_alarm_register(5,SA_REPEAT,send_cpuRatioHigh_trap,NULL);


        }

    }

    else

    {

        if(cputrap_clientreg != 0)

        {

            snmp_alarm_unregister(cputrap_clientreg);

            cputrap_clientreg = 0;

        }

    }

}


void read_cpudata_repeat(unsigned int clientreg,void *clientarg)

{

    int cpu = 90;

    judge_send_cputrap(cpu);

}

你可能感兴趣的:(snmp子系统的使用)