【问题标题】:Delayed Table Initialization延迟表初始化
【发布时间】:2011-01-25 20:32:08
【问题描述】:

使用net-snmp API,使用mib2c生成骨架代码,是否可以支持延迟初始化表?我的意思是,在直接查询它的任何成员之前,不会初始化该表。这样做的原因是成员数据是从另一台服务器获取的,我希望能够启动 snmpd 守护程序,而无需另一台服务器在线/准备好请求。我想也许可以用在查询成员时用真实值更新的虚拟数据来初始化表,但我不确定这是否是最好的方法。

该表也只有一行条目,因此使用 mib2c.iterate.conf 生成表迭代器并处理所有这些似乎没有必要。我想也许只是实现 MIB 中定义的序列而不是实际的表,但这通常不是我见过的所有示例中的完成方式。我查看了 /mibgroup/examples/delayed_instance.c,但这并不是我想要的。将 mib2c 与 mib2c.create-dataset.conf 配置文件一起使用是我最接近让它轻松工作的方法,但是这个配置文件假定数据是静态的而不是外部的(在我的情况下两者都不是真的),所以它行不通。如果它不容易完成,我可能只会实现序列而不是表格,但我希望有一个简单的方法。提前致谢。

【问题讨论】:

    标签: c snmp net-snmp mib


    【解决方案1】:

    迭代器方法可以正常工作。在调用您的 _first 和 _next 例程之前,它不会加载任何数据。因此,在这些例程和 _handler 例程中,由您决定从远程服务器请求数据。事实上,默认情况下,它根本不缓存数据,因此它会让您查询远程服务器的每个请求。如果表中有大量数据,这可能会很慢,因此在这种情况下建议添加缓存以将数据存储 N 秒。

    【讨论】:

    • 非常感谢,我搞定了。最后一件事是它在表上使用 snmpwalk 或直接在表 OID 上使用 snmptable 时有效,但在尝试遍历完整 MIB 时它不起作用。知道为什么会这样吗?
    • 这通常是因为传入的请求 oid 开始表之前,它没有被正确处理。 IE,即使表位于 .1.3.100,mib 代码也需要能够处理 .1.3.1 的 GETNEXT。
    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2020-10-08
    • 2017-11-11
    • 1970-01-01
    • 2011-12-19
    • 2012-07-27
    相关资源
    最近更新 更多