免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3410 | 回复: 0
打印 上一主题 下一主题

成功了!写一个动态加载模块(DLMOD)的步骤 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-07 14:03 |只看该作者 |倒序浏览

                写动态加载对象的方法与写普通SNMP模块的方法基本一致,只是设置上的区别。
开始前,需要确认snmpd主代理已采用了支持DLMOD的编译选项。编译时使用
./configure --enable-shared $OTHER_OPTIONS
安装好后用
snmpd -H | grep dlmod
查看是否已经支持DLMOD。
同样的,准备好三个文件:MIB文件,对象实现的头文件,.c文件。这些文件与普通的SNMP模块的区别在于,需定义一个“去初始化”函数
void deinit_nstFILENAME(void)
在该函数中使用unregister_mib函数注销OID。
注意在snmpd.conf中为目标位置开放读/写的权限
我用的三个文件为
NET-SNMP-TUTORIAL-MIB.txt(MIB文件)
nstAgentPluginObject.h
nstAgentPluginObject.c
准备好这三个文件后开始配置
1、编译共享库文件
可以直接使用命令行编译,也可写成MAKE文件。命令行
cc `net-snmp-config --cflags` -fPIC -shared -g -O0 -o nstAgentPluginObject.so nstAgentPluginObject.c `net-snmp-config --libs`
其中`net-snmp-config --cflag`,`net-snmp-config --libs`参数指定编译链接时所用的脚本和库,-fPIC表示生成位置无关代码(position-independent code),-shared表示生成共享库,一般-fPIC与-shared同时使用。-g生成调试信息。-O0不采用编译优化。-o OBJFILENAME指定目标文件名。
2、将生成的共享库动态加载到主代理
• 以独立的终端启动snmpd代理,输出指定的调试信息
snmpd -f -L -DnstAgentPluginObject,dlmod
• 查看当前不存在指定的模块
snmpget -v2c -c COMMUNITYNAME localhost NET-SNMP-TUTORIAL-MIB::nstAgetnPluginObject.0
输出
nstAgentPluginObject.0 = No Such Object available on this agent at this OID
• 在代理MIB库中创建表项以支持新的模块动态加载。该表控制动态模块名,共享库路径,模块是否加载。
snmpset -v2c -c COMMUNITYNAME localhost UCD-DLMOD-MIB::dlmodStatus.1 i create
• 查看表项已创建
snmptable localhost UCD-DLMOD-MIB::dlmodTable
输出
    SNMP table: dlmodTable
    dlmodName dlmodPath dlmodError dlmodStatus
    unloaded (或3)
• 指定共享库的位置和动态模块名
snmpset -v2c -c COMMUNITYNAME localhost UCD-DLMOD-MIB::dlmodName.1 s "nstAgentPluginObject" UCD-DLMOD-MIB::dlmodPath.1 s "(全路径)/nstAgentPluginObject.so"
输出
    dlmodName.1 = "nstAgentPluginObject"
    dlmodName.1 = "/path/to/nstAgentPluginObject.so"
• 查看表项值
snmpTable -v2c -c COMMUNITYNAME localhost UCD-DLMOD-MIB::dlmodTable
输出
    SNMP table: dlmodTable
    dlmodName dlmodPath dlmodError dlmodStatus
    nstAgentPluginObject (全路径)/nstAgentPluginObject.so unloaded
• 加载共享库(其实是置上标志)
snmpset -v2c -c COMMUNITYNAME localhost UCD-DLMOD-MIB::dlmodStatus.1 i load
输出
    dlmodStatus.1 = loaded(1)
• 查看表项值
snmpTable -v2c -c COMMUNITYNAME localhost UCD-DLMOD-MIB::dlmodTable
输出
    SNMP table: dlmodTable
    dlmodName dlmodPath dlmodError dlmodStatus
    nstAgentPluginObject (全路径)/nstAgentPluginObject.so loaded
• 测试
snmpget -v2c -c COMMUNITYNAME localhost NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject.0
输出
    nstAgentPluginObject.0 = INTEGER: 3
成功
3、实际使用中多采取直接在snmpd.conf文件中指定模块在snmpd启动时加载,在snmpd.conf中添加命令
dlmod nstAgentPluginObject (全路径)/nstAgentPluginObject.so
原指导文档见
http://www.net-snmp.org/wiki/index.php/TUT:Writing_a_Dynamically_Loadable_Object
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/109209/showart_2143070.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP