【问题标题】:net-snmp agentx re-enablenet-snmp agentx 重新启用
【发布时间】:2012-09-25 04:36:45
【问题描述】:

我在 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");

【问题讨论】:

    标签: net-snmp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      同样,子代理也无法代替代理重新注册 在主代理收到三个请求之前,已失效的同事 对于死连接(因此取消注册它)。

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

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多