代码改变世界

利用mib2c生成框架代码

2019-05-17 17:51  C#成长路  阅读(1413)  评论(0编辑  收藏  举报
准备工作:Linux安装net-snmp(默认自带mib2c),确认具备perl工具。实际开发环境为Fedora14。

编写好新的MIB库后,利用mib2c工具生成.c和.h文件:

        a. 将MIB库文件连同其他所有标准MIB文件(.../Application/net-snmp-5.7.1/mibs下的所有库文件),全部拷贝到Fedora目录/usr/share/snmp/mibs(有的环境路径为  /usr/local/share/snmp/mibs(我的mib文件在这里))。
        b. 然后在终端中切换到交换机工程路径.../Application/net-snmp-5.7.1/agent/mibgroup/example(新增example文件夹用于.c和.h文件的存放,example名只是个范例,具体开发中文件夹名最好与开发mib库文件同名)。
        c. 在当前工程路径下,执行生成代码指令:
          (mib库文件为CSG-INTERFACE-PORT-MIB.txt,目标节点为csgIfPortPHYTable)
env MIBS="+/usr/local/share/snmp/mibs/CSG-INTERFACE-PORT-MIB.txt" mib2c -c mib2c.mfd.conf csgIfPortPHYTable
        
        特别说明
        1. 注意将代码存放到交换机工程文件夹mibgroup/example下;
        2. 注意命令参数(命令中标红部分),由于mib2c目前不支持同时解析标量对象(scalar)和表对象(table),所以对于同时具备这两种对象的mib模块,需要分别单独生成对应代码,然后整合。上面这个命令是用来生成表对象的,用到mib2c.mfd.conf这个配置文件。参数选择参考如下:
        生成标量对象框架代码:mib2c.scalar.conf
        生成表对象框架代码:mib2c.iterate.conf  mib2c.mfd.conf
        针对表对象,推荐用mfd这个配置文件,模块更清晰,但生成的文件更多。生成时会提示是否生成带缓存的代码,带缓存的设计是为了减少SNMP客户端频繁访问系统数据的次数。如果在很短的时间内获取相同的数据,就直接返回缓存内的数据,而不需要每次去更新数据。


P.S. 另一种等价方法

        首先更改/etc/snmp下的snmpd.conf,在最后一行加上mib <MIB库名>(也就是MIB文件中DEFINITION前面的那个名字),然后执行命令mib2c -c mib2c.mfd.conf CSG-INTERFACE-PORT-MIB::csgIfPortPHYTable