前面的开发步骤我就不描述了,在我的其他博文中有说,一个是写mib文件,一个是将mib文件转化为.c和.h文件。
这里说下如何通过动态加载的方式将.c和.h编译为lib库然后添加到snmpd上,令其可以被访问到
1. makefile文件
CC=aarch64-linux-gnu-gcc
CFLAGS := -I ../include/ -I ../../include
LDFLAGS := -L ../lib -L ../../lib
lib:
$(CC) $(CFLAGS) $(LDFLAGS) -I.'net-snmp-config --cflags' -fpic -shared -o libNetTable.so NetTable.c -I.'net-snmp-config --libs' -lhiredis -lzlog -lpthread
all:lib
.PHONY : clean
clean :
rm -f *.so *.o
这里要注意的是netsnmp编译的时候会产生net-snmp-config这个软件,这个软件会作为lib编译的一部分。NetTable.c是编译的c文件,libNetTable.so是产生的so文件。
2. 修改snmpd.conf
rwcommunity public
# sec.name souce community
com2sec secname default public
group secgroup v2c secname
view all included .1
view all included .1.3.6.1.4.1
access secgroup "" any noauth exact all all none
上诉的添加内容是添加了一个用来访问的public,另外需要注意注释掉其他的和上诉配置相关的内容比如下面这条:
#rocommunity public default -V systemonly
然后snmp.conf配置好之后还要添加snmp的lib库的申明到配置文件,如下:
dlmod NetTable /lib/libNetTable.so
3. 启动snmpd
snmpd -f -Lo: -Dagentx,dlmod -c /etc/snmpd.conf -M /share/snmp/mibs &
这里要注意dlmod其实只是调试开关,用来启动的时候查看lib是否挂载正确的,agentx也是打开的snmpd调试相关的开关。-c指向配置文件,-M指向的是mib文件的保存路径,让snmpd能够看到mib文件在什么地方。
snmpd如果正常启动结果如下:
root@node1:/media/cyf/net-snmp# snmpd -f -Lo: -Dagentx,dlmod -c /etc/snmpd.conf -M /share/snmp/mibs &
[1] 1151
root@node1:/media/net-snmp# registered debug token agentx, 1
registered debug token dlmod, 1
agentx_register_app_config_handler: registering .conf token for "agentxsocket"
agentx_register_app_config_handler: registering .conf token for "agentxRetries"
agentx_register_app_config_handler: registering .conf token for "agentxTimeout"
agentx_register_app_config_handler: registering .conf token for "agentxperms"
dlmod: register mib
dlmod: dlmod_path: /media/build/setup/lib/snmp/dlmod
Turning on AgentX master support.
dlmod: dlmod_create_module
dlmod: dlmod_load_module NetTable: /lib/libNetTable.so
agentx/master: initializing...
agentx/master: initializing... DONE
NET-SNMP version 5.9.1
这样就是没有错误的启动,如果有其他failed或者error那么就要查看下对应的错误内容并修正。