如何写扩张mib

0.环境:
OS:opensolaris 2009.06版
gcc:3.4.3 (csl-sol210-3_4-20050802)
snmp:NET-SNMP version: 5.0.9

1.环境准备
确认snmp和gcc的相关包是否已经安装:
pkginfo SUNWsmaS
pkginfo SUNWsmdoc
pkginfo SUNWsmcmd
pkginfo SUNWsmmgr
pkginfo SUNWsmagt
pkginfo SUNWgcc

如果没有的话,请先安装:
pfexec pkg install SUNWsmaS
pfexec pkg install SUNWsmdoc
pfexec pkg install SUNWsmcmd
pfexec pkg install SUNWsmmgr
pfexec pkg install SUNWsmagt
pfexec pkg install SUNWgcc
(注释:如果是以root登录的话,命令前面不需要pfexec)

安装完成后的确认:
检查sma的配置文件:
cat /var/svc/manifest/application/management/sma.xml
cat /etc/sma/snmp/snmpd.conf
确认gcc安装成功:
gcc -v

启动并确认sma:
svcadm enable svc:/application/management/sma:default
svcs -a sma

查看sma的log:
cat /var/log/snmpd.log

2.编写mib并将它导入的snmpd中
下载net-snmp的source,它会在编译自己写的c文件时用到,下载地址是:
http://sourceforge.net/projects/net-snmp/files/

编写自己的mib,这一步很复杂,如果需要的话,我会单独写一片文章;具体可参见:
http://msdn.microsoft.com/en-us/library/aa909833.aspx
http://www.net-snmp.org/wiki/index.php/Writing_your_own_MIBs

mib写好后,可以通过snmptranslate来测试自己的mib是否写的正确:
首先将自己的mib文件copy到/etc/sma/snmp/mibs;
设置环境变量:export MIBS=+YOUR-MIB-FILE-NAME
重启sma服务:svcadm restart svc:/application/management/sma:default
使用snmptranslate来测试自己的mib是否正常加载:snmptranslate -IR yourMIBObject
(具体的可参见:
http://www.net-snmp.org/FAQ.html#How_do_I_add_a_MIB_
http://www.net-snmp.org/wiki/index.php/TUT:snmptranslate )

编写mib对应的c文件:
使用mib2c可以生产对应的c文件和头文件:pfexec mib2c -c /etc/sma/snmp/mib2c.scalar.conf
yourFileName
(注释:mib2c只是生产一个框架,具体的实现自己要完成;/etc/sma/snmp/mib2c.scalar.conf是用来生成c文件的配置文件,
在/etc/sma/snmp目录下还有很多不同的配置文件,具体的区别可参见:
http://docs.sun.com/app/docs/doc/817-3155/writingmodule-19?a=view)

编译source:
首先配置刚才下载的net-snmp的source,转到你解压的目录并执行:
./configure –with-mib-modules=”ucd_snmp $OTHER_MIBS” $OTHER_OPTIONS
编译mib2c生产并且自己实现的c文件:
cc -m64 -I yoursnmproot/net-snmp-svn-main/include net-snmp-config --cflags
-fPIC -shared -g -O0 -o yourSoName.so yourFileName.c net-snmp-config --libs
(注释:-m64 表示生产的目标文件是64位的)

加载so文件:
修改snmpd.conf文件(给文件追加一行),使自己的动态链接库在snmpd重启时可以加载:
dlmod yourMIBObject yourdemopath/yourSoName.so
重启sma并查看log:
svcadm restart svc:/application/management/sma:default
cat /var/log/snmpd.log
(如果log中只有snmp的版本号,表示一切顺利)

使用snmpget,snmpset等命令测试自己的so文件是否正常工作
(参见:http://www.net-
snmp.org/wiki/index.php/TUT:Writing_a_Dynamically_Loadable_Object)

注意,参见我写的另一篇文章:
http://blog.csdn.net/lantianjialiang/archive/2010/04/27/5532789.aspx