net-snmp私有mib动态加载到snmpd

前面的开发步骤我就不描述了,在我的其他博文中有说,一个是写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那么就要查看下对应的错误内容并修正。

上一篇:NET-SNMP使用以及应用第三方MIB


下一篇:snmp扫描