net-snmp agentx重新启用

时间:2012-09-25 04:36:46

标签: net-snmp

我在Ubuntu Linux上的c ++应用程序代码中嵌入了net-snmp agentx子代理。我想在agentx子代理工作后禁用它,然后再次重新启用它。我成功地能够设置代理,使用命令行中的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");

2 个答案:

答案 0 :(得分:0)

我认为你必须在关闭后重新运行二进制文件。 您没有在此澄清为什么要重新启动agentx。 如果你这样做是为了经常获取一些数据。我想你可以尝试使用代码中的时间跨度的sleep命令进行无限循环。这将是更好的选择。

答案 1 :(得分:0)

我在net-snmp-5.7.2的README.agentx文件中找到了以下信息(目前在http://www.net-snmp.org/docs/README.agentx.html处可见:

  

同样,子代理将无法重新注册代替   已经解散的同事,直到主代理收到三个请求   对于死连接(因此未注册)。

因此,尽管您尝试完全关闭,但主人似乎仍然可以注册您的子代理。也许您可以尝试在子代理被禁用时发出三个或更多请求,然后继续重新注册。