- 论坛徽章:
- 0
|
本帖最后由 janeqi1987 于 2015-06-09 19:37 编辑
net-snmp中通过mib2c.iterate.conf生成了多个XXX_Table.c和 XXX_Table.h的文件,代码已写好。现在通过subagent的方法,通过一个main函数,想把这些表编译到一个文件来执行(运行该可执行文件就可以同时几个Table表都能处理相关操作),我按照网上的方法:
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <signal.h>
#include <nstAgentSubagentObject.h>
static int keep_running;
RETSIGTYPE
stop_server(int a) {
keep_running = 0;
}
int
main (int argc, char **argv) {
int agentx_subagent=1; /* change this if you want to be a SNMP master agent */
int background = 0; /* change this if you want to run in the background */
int syslog = 0; /* change this if you want to use syslog */
/* print log errors to syslog or stderr */
if (syslog)
snmp_enable_calllog();
else
snmp_enable_stderrlog();
/* we're an agentx subagent? */
if (agentx_subagent) {
/* make us a agentx client. */
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
}
/* run in background, if requested */
if (background && netsnmp_daemonize(1, !syslog))
exit(1);
/* initialize tcpip, if necessary */
SOCK_STARTUP;
/* initialize the agent library */
//init_agent("example-demon");
init_agent("xxx1_table");
init_agent("xxx2_table");
init_agent("xxx3_table");
init_agent("xxx4_table");
init_agent("xxx5_table");
init_agent("xxx6_table");
init_agent("xxx7_table");
/* initialize mib code here */
/* mib code: init_nstAgentSubagentObject from nstAgentSubagentObject.C */
init_nstAgentSubagentObject();
/* initialize vacm/usm access control */
if (!agentx_subagent) {
init_vacm_vars();
init_usmUser();
}
/* example-demon will be used to read example-demon.conf files. */
//init_snmp("example-demon");
init_snmp("xxx1_table");
init_snmp("xxx2_table");
init_snmp("xxx3_table");
init_snmp("xxx4_table");
init_snmp("xxx5_table");
init_snmp("xxx6_table");
init_snmp("xxx7_table");
/* If we're going to be a snmp master agent, initial the ports */
if (!agentx_subagent)
init_master_agent(); /* open the port to listen on (defaults to udp:161) */
/* In case we recevie a request to stop (kill -TERM or kill -INT) */
keep_running = 1;
signal(SIGTERM, stop_server);
signal(SIGINT, stop_server);
snmp_log(LOG_INFO,"example-demon is up and running.\n");
/* your main loop here... */
while(keep_running) {
/* if you use select(), see snmp_select_info() in snmp_api(3) */
/* --- OR --- */
agent_check_and_process(1); /* 0 == don't block */
}
/* at shutdown time */
//snmp_shutdown("example-demon");
snmp_shutdown("xxx1_table");
snmp_shutdown("xxx2_table");
snmp_shutdown("xxx3_table");
snmp_shutdown("xxx4_table");
snmp_shutdown("xxx5_table");
snmp_shutdown("xxx6_table");
snmp_shutdown("xxx7_table");
SOCK_CLEANUP;
return 0;
}
我通过init_agent("XXX1_table"); init_agent("XXX2_table"); ......init_agent("XXX7_table"); 这种方式编译不行。
打印:
ignoring extra call to init_agent (2)
ignoring extra call to init_agent (3)
ignoring extra call to init_agent (4)
ignoring extra call to init_agent (5)
ignoring extra call to init_agent (6)
ignoring extra call to init_agent (7)
我通过snmpset试了下,只能运行XXX1_table,后面的几个表都不行。
不知道用什么方法来实现多个表同时运行?因为我还需要存储其他一些额外的数据信息,所以不知道怎么处理,如果使用静态或者动态的方法的话,这些额外数据在哪里定义和申请空间。
请高手指导下,谢谢! |
|