我一直在使用此处的示例处理我自己的SNMP代理: http://www.net-snmp.org/dev/agent/example_8c_source.html
我想更好地组织我的树结构以使其更有意义,这反过来使得使用客户端命令更容易。
我使用传统的旧C API来实现这一点,并且是示例链接中使用的。
我有一棵树想要实现
我的MIB:
MIB-NAME-HERE DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Integer32, enterprises,
NOTIFICATION-TYPE FROM SNMPv2-SMI
OBJECT-GROUP, NOTIFICATION-GROUP FROM SNMPv2-CONF
;
myProduct MODULE-IDENTITY
LAST-UPDATED "201505200000Z"
ORGANIZATION "www.example.com"
CONTACT-INFO
"email: support@example.com"
DESCRIPTION
"MIB Example."
REVISION "201505200000Z"
DESCRIPTION
"version 1.0"
::= { enterprises 54321 }
--
-- top level structure
--
IPConfig OBJECT IDENTIFIER ::= { myProduct 1 }
Services OBJECT IDENTIFIER ::= { myProduct 3 }
IPConfigValuesGroup OBJECT-GROUP
OBJECTS { ObjectA,
ObjectB,
ObjectC
}
STATUS current
DESCRIPTION
"Group of all blahblah variables."
::= { myProduct 4 } <----**How would this affect a client request?**
--
-- Values
--
ObjectA OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(1..4096))
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Test Example"
::= { IPConfig 1 }
ObjectB OBJECT-TYPE
SYNTAX OCTET STRING (SIZE(1..4096))
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"Test Example"
::= { IPConfig 2 }
--MORE STUFF...
.... END
我希望能够将相对对象组合在一起,以便用户可以进行
snmpset -v 2c -c communityNameHere -m MIB-NAME-HERE.txt 10.20.30.40 1.3.6.1.4.1.54321.x.1.3 s "I am a string"
访问IPConfig组下的ObjectC。
问题:如何在我的“子代理”中实现子树?
This is an excerpt from the link shown above.
/*
* This array defines the OID of the top of the mib tree that we're
* registering underneath.
* Note that this needs to be the correct size for the OID being
* registered, so that the length of the OID can be calculated.
* The format given here is the simplest way to achieve this.
*/
oid example_variables_oid[] = { 1, 3, 6, 1, 4, 1, 54321, x};
我是否必须声明另一个数组,包括服务OID?
oid example_variables_oid[] = { 1, 3, 6, 1, 4, 1, 54321, x, 3};
或者对于每个子树,他们需要有一个example.c * -type *文件吗?
问题:这个MIB会实现我想要的吗?需要做些什么不同的事情?我已经阅读了OBJECT-GROUPS,SEQUENCE,O'Reily的书以及RFC。我还在努力抓住一切。
答案 0 :(得分:2)
这里有很多问题,说实话,需要一个超长的帖子才能回答这些问题。因此,我会在较高的层次上回答它们,然后为您提供一系列链接,以便阅读更长时间和更深入的文章。
首先,写mibs并不是一件容易的事。关于这个主题的参考书最多可能是Understand SNMP MIBs并且非常好(我有一份副本)。所有的mib写作问题都在那里得到了很好的解答,但关于你的上述内容有几点快速解答:
1)几乎所有的MIB对象都应该以小写字母开头(除了你还没有的表序列)。
2)上面的oid中没有'x'。例如,您已在定义中创建了一个直接导出到1.3.6.1.4.1.54321.1.3的树结构。
3)暂时抛出对象组子句。它一开始只会让你困惑而且不需要。只有那里才能真正为列出对象编写标准定义,以便符合mib(使用一致性声明)。对你来说,这根本不需要。只是杀掉整个事情。
至于编写代码以支持您尝试定义的对象,您需要在代码或您正在编写的子代理中的C代码中执行此操作。关于Net-SNMP项目网站已经有很多文档,所以你应该去那里看看。有助于您入门的链接是:
一般来说,如何为基于net-smnp的代理编写mib代码:
http://www.net-snmp.org/wiki/index.php/TUT:Writing_a_MIB_Module
如何使用mib2c转换器生成一些模板代码以开始:
http://www.net-snmp.org/wiki/index.php/TUT:mib2c_General_Overview
更一般地说,Net-SNMP的所有编码教程都可以在这里找到:
http://www.net-snmp.org/wiki/index.php/Tutorials#Coding_Tutorials
最后一条评论:您在上面定义的对象称为“标量”。 IE,树中只有一个实例。因此,当您阅读教程或mib2c问题时,它会询问您,以上是“标量”。表格可能会出现在您的项目中,因为每个人似乎最终会得到表格!祝你好运!