我在Ubuntu Linux上的c++应用程序代码中嵌入了一个net-snmp agentx子代理。我希望在agentx subagent工作后禁用它,然后再次重新启用它。我能够成功地设置代理,从命令行使用snmpget轮询mib,并使用snmp_shutdown禁用agentx套接字连接,但一旦禁用它,我就无法再次重新启用套接字连接。
感谢您的帮助/指点。
我使用以下代码初始化SNMP库和agentx套接字连接。
首先,初始化AgentX子代理-
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL, 120);
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_X_SOCKET, m_agentx_socket.c_str());
/* initialize the agent library */
init_agent("MyApp");
// initialise MIB module
init_snmp("MyApp");使用snmpget轮询MIB,并使用以下函数禁用连接-
snmp_shutdown("MyApp");
SOCK_CLEANUP;到目前为止一切正常。
然后我使用下面的代码重新启用连接,但这不起作用。
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
netsnmp_ds_set_int(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_AGENTX_PING_INTERVAL, 120);
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_X_SOCKET, m_agentx_socket.c_str());
/* initialize the agent library */
init_agent("MyApp");
init_snmp("MyApp");发布于 2012-10-05 19:12:43
我认为你必须在它被关闭后重新运行二进制文件本身。您尚未在此处说明为什么要重新启动agentx。如果您这样做是为了频繁地获取一些数据。那么我猜你可以在你的代码中使用一个时间跨度的睡眠命令来尝试无限的for循环。这将是更好的选择。
发布于 2013-11-29 01:13:27
我在net-snmp-5.7.2 (当前在http://www.net-snmp.org/docs/README.agentx.html上可见)的README.agentx文件中找到了以下信息:
类似地,子代理将无法重新注册已不存在的同事,直到主代理收到三个对失效连接的请求(因此取消注册)。
因此,尽管您尝试完全关闭,但主服务器似乎仍然注册了您的subagent。也许您可以尝试在子代理被禁用的情况下发出三个或更多请求,然后继续重新注册。
https://stackoverflow.com/questions/12576275
复制相似问题