我正在尝试创建SNMP4j代理,并且发现很难正确理解该过程。我已经成功创建了一个可以使用snmpwalk从命令行查询的代理。我遇到的困难是理解我是如何更新存储在我实现的MIB中的值。
以下显示了我用于创建MIB的相关代码(我实现了Host-Resources-MIB)
agent = new Agent("0.0.0.0/" + port);
agent.start();
agent.unregisterManagedObject(agent.getSnmpv2MIB());
modules = new Modules(DefaultMOFactory.getInstance());
HrSWRunEntryRow thisRow = modules.getHostResourcesMib().getHrSWRunEntry()
.createRow(oidHrSWRunEntry);
final OID ashEnterpriseMIB = new OID(".1.3.6.1.4.1.49266.0");
thisRow.setHrSWRunIndex(new Integer32(1));
thisRow.setHrSWRunName(new OctetString("RunnableAgent"));
thisRow.setHrSWRunID(ashEnterpriseMIB);
thisRow.setHrSWRunPath(new OctetString("All is good in the world")); // Max 128 characters
thisRow.setHrSWRunParameters(new OctetString("Everything is working")); // Max 128 characters
thisRow.setHrSWRunType(new Integer32(HrSWRunTypeEnum.application));
thisRow.setHrSWRunStatus(new Integer32(HrSWRunStatusEnum.running));
modules.getHostResourcesMib().getHrSWRunEntry().addRow(thisRow);
agent.registerManagedObject(modules.getHostResourcesMib());
这似乎足以创建一个可运行的代理。我不明白的是我打算如何更改存储在MIB中的值(例如,如何更改HrSWRunStatus的值)。似乎有一些kludge方式,但它们似乎不适合图书馆的编写方式。
我遇到过很多关于使用/覆盖方法
的参考资料但找不到任何这样做的例子。我们将非常感激地提供任何帮助。
答案 0 :(得分:0)
在protected void registerManagedObjects()
中,您需要为 HrSWRunStatus 执行new MOMutableColumn(columnId, SMIConstants.SYNTAX_INTEGER, MOAccessImpl.ACCESS_READ_WRITE, null);
之类的操作。请查看SNMP4J-agent源代码的TestAgent.java
示例。