Hi!
We’re seeing an issue with the new snmp4j-agent 3.7.0 release whenever a client issues a request for an OID that is not present.
For example, if a client issues a GET request for three OIDs, the third of which is not present, the new 3.7.0 snmp-agent release generates a response PDU with an error-status of “genErr(5)”, with variable-bindings containing values of the two present OIDs and the third OID with “noSuchObject”.
Prior snmp-agent releases generated an identical response PDU (same variable-bindings containing values of the two present OIDs and the third OID with “noSuchObject”), except with an error-status of “noError(0)”.
Logging messages from 3.7.0 show a NullPointerException being generated with the CommandProcessor class, which is triggering the response PDU to have it’s error-status set to “genErr(5)” when the NullPointerException caught and handled:
java.lang.NullPointerException: Cannot invoke "org.snmp4j.agent.ManagedObject.get(org.snmp4j.agent.request.SubRequest)" because "mo" is null
at org.snmp4j.agent.CommandProcessor$GetHandler.processPdu(CommandProcessor.java:1220)
at org.snmp4j.agent.CommandProcessor$GetHandler.processPdu(CommandProcessor.java:1173)
at org.snmp4j.agent.CommandProcessor.processRequest(CommandProcessor.java:425)
at org.snmp4j.agent.CommandProcessor.processRequest(CommandProcessor.java:381)
at org.snmp4j.agent.CommandProcessor.dispatchCommand(CommandProcessor.java:335)
at org.snmp4j.agent.CommandProcessor$Command.run(CommandProcessor.java:613)
at org.snmp4j.agent.CommandProcessor.processPdu(CommandProcessor.java:162)
at org.snmp4j.MessageDispatcherImpl.fireProcessPdu(MessageDispatcherImpl.java:791)
at org.snmp4j.MessageDispatcherImpl.dispatchMessage(MessageDispatcherImpl.java:439)
at org.snmp4j.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java:513)
at org.snmp4j.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java:477)
at org.snmp4j.transport.AbstractTransportMapping.fireProcessMessage(AbstractTransportMapping.java:121)
at org.snmp4j.transport.DefaultUdpTransportMapping.fireProcessMessage(DefaultUdpTransportMapping.java:497)
at org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread.run(DefaultUdpTransportMapping.java:409)
at java.base/java.lang.Thread.run(Thread.java:840)
java.lang.Exception: Error 'General variable binding error' generated at: 1.3.6.1.2.1.2.2.1.20.3 = noSuchObject
at org.snmp4j.agent.request.SnmpRequest$SnmpSubRequest.requestStatusChanged(SnmpRequest.java:684)
at org.snmp4j.agent.request.RequestStatus.fireRequestStatusChanged(RequestStatus.java:89)
at org.snmp4j.agent.request.RequestStatus.setErrorStatus(RequestStatus.java:52)
at org.snmp4j.agent.CommandProcessor$GetHandler.processPdu(CommandProcessor.java:1232)
at org.snmp4j.agent.CommandProcessor$GetHandler.processPdu(CommandProcessor.java:1173)
at org.snmp4j.agent.CommandProcessor.processRequest(CommandProcessor.java:425)
at org.snmp4j.agent.CommandProcessor.processRequest(CommandProcessor.java:381)
at org.snmp4j.agent.CommandProcessor.dispatchCommand(CommandProcessor.java:335)
at org.snmp4j.agent.CommandProcessor$Command.run(CommandProcessor.java:613)
at org.snmp4j.agent.CommandProcessor.processPdu(CommandProcessor.java:162)
at org.snmp4j.MessageDispatcherImpl.fireProcessPdu(MessageDispatcherImpl.java:791)
at org.snmp4j.MessageDispatcherImpl.dispatchMessage(MessageDispatcherImpl.java:439)
at org.snmp4j.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java:513)
at org.snmp4j.MessageDispatcherImpl.processMessage(MessageDispatcherImpl.java:477)
at org.snmp4j.transport.AbstractTransportMapping.fireProcessMessage(AbstractTransportMapping.java:121)
at org.snmp4j.transport.DefaultUdpTransportMapping.fireProcessMessage(DefaultUdpTransportMapping.java:497)
at org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread.run(DefaultUdpTransportMapping.java:409)
at java.base/java.lang.Thread.run(Thread.java:840)
It seems unlikely to us that internally generating a NullPointerException was intended, so we think this maybe a fault in some of the changes in 3.7.0?
Thanks!
Jeremy