我正在编写一个python应用程序,该应用程序应该使用Opendaylight SNMP Plugin REST API (http://IPAddress:8181/restconf/operations/snmp:snmp-get)从运行SNMP代理的网络设备获取一些信息。
我正在模拟如下设置:
- SNMP agent: Ubuntu running on a VM.
- SNMP Manager:一个运行在Opendaylight之上的python应用程序。
已经做了什么
要获取Total RAM (OID: .1.3.6.1.4.1.2021.4.5.0)等信息,我需要添加UCD-SNMP-MIB。
将对象的类型和ID设置为opendaylight。我已经检查了这个页面,但我似乎不能使它工作。页面中的教程似乎过时了,它解释了如何创建一个本地opendaylight项目,而我的目标是使用北向api。
:我们如何将自定义MIB文件添加到opendaylight目录中,以便应用程序可以使用REST API通过网络管理snmp代理?
odl-snmp-plugin没有任何直接处理MIB文件的功能。
一般的rpc,如snmp-get,只接受OID值,并返回一个OID/值对的JSON文档。
POST :host/restconf/operations/snmp:snmp-get
Authentication: :basic-auth
Content-Type: application/json
{
"input": {
"ip-address": ":addr",
"oid" : "1.3.6.1.2.1.2.2.1",
"get-type" : "GET-BULK",
"community" : ":community"
}
}
{
"output": {
"results": [
{
"oid": "1.3.6.1.2.1.2.2.1.1.1",
"value": "1"
},
{
"oid": "1.3.6.1.2.1.2.2.1.1.2",
"value": "2"
},
...
]
}
}
特定于模块的rpc,如get-interface依赖于两个先决条件:
- 已从所需的MIB生成YANG文件
- 一个. OID文件,包含从MIB名到OID的映射,用于yang-oid-plugin。
OpenDaylight snmp项目是一个完整的示例。
请参阅这里的例子,从IF-MIB生成的YANG文件:https://github.com/opendaylight/snmp/blob/master/mibs-model/src/main/yang/IF-MIB.yang
参见这里的一个示例。oid文件,也是由IF-MIB生成的:https://github.com/opendaylight/snmp/blob/master/mibs-model/src/main/oid/IF-MIB.oid
需要进一步的步骤来实现通过NETCONF或RESTCONF公开此内容的解决方案。一种简单的方法是像odl-snmp-plugin那样添加rpc并对其进行硬编码。更复杂的解决方案需要一个挂载设备的概念,就像odl-netconf-connector所做的那样,其中扩展拓扑以存储设备的SNMP凭据,然后编写一个连接器,在设备的拓扑节点下挂载SNMP支持的YANG模块。