如何根据MIB库自动生成SNMP Agent代码--mib2c

一、环境准备

1、linux,samba,网络已连接

通过samba登录到fedora core的虚拟机上,启动虚拟机Fodera core,

ifconfig 查看eth1网卡的ip地址,eth1为桥接到办公网的网卡,假设IP地址为10.10.51.8

通过samba映射到windows,需要先检查samba服务是否已经启动

若已启动samba服务,映射samba目录

2、MIB库文件

二、操作步骤

1、编写MIB库文件

编写mib文件,并将mib文件拷贝至/user/local/share/snmp/mibs目录下

编写mib库的时候如果是表格,不可增删改的。不需要添加rowstatus,且index必须要设置成read-only,不能设置成not-accessiable

2、设置环境变量,使得可以用mib2c工具来生成相应的.c文件和.h文件

cd /user/local/share/snmp/mibs
export MIBS=ALL
或
export MIBS=+NSCRTV-ROOT
export MIBS=+NSCRTV-EPONEOC-ALARMS-MIB
export MIBS=+NSCRTV-EPONEOC-PROPERTY-MIB
export MIBS=+NSCRTV-EPONEOC-MOD-EOC-MIB
export MIBS=+XXX-MIB # 根据实际的MIB库名称调整

3、查看OID是否能正常输出

snmptranslate -Ts -m ALL //查看所有MIB NODE输出情况
snmptranslate -IR XXXMIBNODE //就可以查看到某个具体的MIB NODE的相关信息

4、模板介绍:通过模板生成.c和.h文件

模板可以采用默认的模板或者自己写模板,默认的模板在/user/local/share/snmp/目录下面
进入你要存放生成代码的文件夹,通过模板生成.c和.h文件,默认的模板介绍如下:
scalars类型的节点:mib2c -c mib2c.scalar.conf XXXMIBNODE
Table类型的节点:mib2c -c mib2c.iterate_access.conf XXXMIBNODE
trap类型的节点:mib2c -c mib2c.notify.conf XXXMIBNODE
int scalars类型的节点:mib2c -c mib2c.int_watch.conf MIBNODE

承上,如果按需排序时:mib2c -c mib2c.array-user.conf MIBNODE
如果要产生Table上任一Column的header时:mib2c -c mib2c.column_defines.conf MIBNODE
如果是要产生Column上任一Enum的header時:mib2c -c mib2c.column_enums.conf MIBNODE

命令参考:

env MIBS="+NSCRTV-EPONEOC-MOD-EOC-MIB" mib2c -c ../../../mib2c.scalar.conf eocCBATAdminGroup
env MIBS="+NSCRTV-EPONEOC-MOD-EOC-MIB" mib2c -c ../../mib2c.iterate_access.conf eocCBATCardRFTable
env MIBS="+NSCRTV-EPONEOC-MOD-EOC-MIB" mib2c -c ../../mib2c.iterate_access.conf eocCBATAdminSNMPCommunityTable
env MIBS="+NSCRTV-EPONEOC-MOD-EOC-MIB" mib2c -c ../../../mib2c.notify.conf eocNotifications

5、生成具体过程:

进入你要存放生成代码的文件夹,所有的模板在/user/local/share/snmp/目录下面

# mib2c -c ../../../mib2c.scalar.conf eocCBATAdminGroup
# env MIBS="+NSCRTV-EPONEOC-MOD-EOC-MIB" mib2c -c ../../mib2c.iterate_access.conf eocCBATCardRFTable
# env MIBS="+NSCRTV-EPONEOC-MOD-EOC-MIB" mib2c -c ../../../mib2c.iterate_access.conf eocCBATAdminSNMPCommunityTable
# env MIBS="+NSCRTV-EPONEOC-MOD-EOC-MIB" mib2c -c ../../mib2c.iterate_access.conf eocCBATCardRFTable
    writing to eocCBATCardRFTable.h
    writing to eocCBATCardRFTable_columns.h
    writing to eocCBATCardRFTable_enums.h
    writing to eocCBATCardRFTable.c
    writing to eocCBATCardRFTable_checkfns_local.h
    writing to eocCBATCardRFTable_checkfns_local.c
    writing to eocCBATCardRFTable_checkfns.h
    writing to eocCBATCardRFTable_checkfns.c
    writing to eocCBATCardRFTable_access.h
    writing to eocCBATCardRFTable_access.c
    writing to -

    **********************************************************************
    NOTE:  The only files you MUST modify should be the following:(要修改的地方)
      eocCBATCardRFTable_access.c(业务相关)
      eocCBATCardRFTable_access.h(路径相关)
      eocCBATCardRFTable_checkfns_local.h()
      eocCBATCardRFTable_checkfns_local.c
    **********************************************************************

    running indent on eocCBATCardRFTable_access.c
    running indent on eocCBATCardRFTable_checkfns.c
    running indent on eocCBATCardRFTable_access.h
    running indent on eocCBATCardRFTable_enums.h
    running indent on eocCBATCardRFTable_columns.h
    running indent on eocCBATCardRFTable_checkfns_local.h
    running indent on eocCBATCardRFTable_checkfns_local.c
    running indent on eocCBATCardRFTable_checkfns.h
    running indent on eocCBATCardRFTable.h
    running indent on eocCBATCardRFTable.c
# 

 

6.修改代码,将修改后的代码拷贝至项目net-snmp-5.4.1/agent/mibgroup下面

1.xxxTable_checkfns.h:
修改前:
/** make sure we load the functions that you can modify */
config_require(eocVLANTable_checkfns_local)
修改后:修改后的路径为实际工程中的编译路径
/** make sure we load the functions that you can modify */
config_require(eoc/nscrtv/vlanGroup/eocVLANTable_checkfns_local)
2.xxxTable.h
修改前:
/** other required module components */
config_require(eocVLANTable_access)
config_require(eocVLANTable_checkfns)
修改后:
/** other required module components */
config_require(eoc/nscrtv/vlanGroup/eocVLANTable_access)
config_require(eoc/nscrtv/vlanGroup/eocVLANTable_checkfns)
3.eocVLANTable.c
修改前:
if (!data_context) {
ci->data_context = eocVLANTable_create_data_context(table_info->indexes, COLUMN_):
ci->new_row = 1;
} else {
ci->data_context = data_context;
}
netsnmp_oid_stash_add_data(&commitStorage,
suffix + 1, suffix_len - 1, ci);
修改后:
if (!data_context) {
ci->data_context = eocVLANTable_create_data_context(table_info->indexes, table_info->colnum);
ci->new_row = 1;
} else {
ci->data_context = data_context;
}
netsnmp_oid_stash_add_data(&commitStorage,
suffix + 1, suffix_len - 1, ci);

注意事项:
生成表项的C代码的时候执行完命令mib2c ../../mib2c.iterate_access.conf wirelessProdWireless5GTable以后,会提示让你选择一些选项:选2 1 2 

原文地址:https://www.cnblogs.com/luoluo1619/p/13925346.html