栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

嵌入式linux下搭建snmp服务,编写自定义mib库,支持ipv6

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌入式linux下搭建snmp服务,编写自定义mib库,支持ipv6

做这个需要交叉编译net-snmp

在官网http://www.net-snmp.org下载源码包,我用的是5.7.3

配置交叉编译器,我的交叉编译器是在/usr/local/arm-2014.05/bin

export PATH=$PATH:/usr/local/arm-2014.05/bin

解压源码包之后,cd 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  --disable-embedded-perl --without-perl-modules -enable-mini-agent -disable-mibs  --with-mib-modules=dlmod --enable-ipv6 --enable-shared

之后make install后,会安装在/opt/net-snmp下

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

下面是编写一个mib库的基本步骤

编写mib库

先准备一个mib文件,我这里是RFC1628_UPS_MIB.MIB

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

之后会生成upsMIB.c和upsMIB.h,里面包含所有的点数据接口,可以通过文件或者共享内存的方式获取数据并填充到这些接口上,之后将此编译成so

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

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

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

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

snmpd -f -d -L -Dxxx,dlmod -Dxxx -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","Initializingn"));

    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使用率过高");

   

    snmp_varlist_add_variable(&var_list,

        snmptrap_oid, snmptrap_oid_len,

        ASN_OBJECT_ID,

        cpuRatioHigh_oid, sizeof(cpuRatioHigh_oid));

    

   

    snmp_varlist_add_variable(&var_list,

        TestTrapDescription_oid, OID_LENGTH(TestTrapDescription_oid),

        ASN_OCTET_STR,

       

        NULL, 0);

   

   

    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);

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/338695.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号