zoukankan      html  css  js  c++  java
  • 如何根据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 

  • 相关阅读:
    兼容火狐几秒后跳转页面
    js 利用sina ip库获取ip及通信服务商
    jQuery.validate 中文API
    s:select标签的Map形式使用
    【原创随笔】reCAPTCHA加密验证Email地址,正确才可完整查看地址!
    eclipse编辑jsp文件和javascript代码很卡解决办法
    oracle 10 R2 静默安装 + psu
    【容易成功的十种能力你具备几种
    CentOS 新虚拟机网卡设置
    【与人沟通的技巧很重要】
  • 原文地址:https://www.cnblogs.com/luoluo1619/p/13925346.html
Copyright © 2011-2022 走看看