[SNMP4J] No reponse when the agent is restarted

Tomasz Kaczmarek losmotylos at gmail.com
Tue May 11 17:53:14 CEST 2010


Hi,
I'm using a snmp4j to talk to snmp devices. I'm using snmp4j in version 1.11
I'm creating DefaultUdpTransportMapping and Snmp object and running
them once in whole life of the application.
The following code is used:
----------------------------------------------------------------
OctetString localEngineID = new OctetString(MPv3.createLocalEngineID());
USM usm = new USM(SecurityProtocols.getInstance(), localEngineID, 0);
SecurityModels.getInstance().addSecurityModel(usm);
TransportMapping transport = new DefaultUdpTransportMapping();
transport.listen();
Snmp snmp = new Snmp(transport);
((MPv3) snmp.getMessageProcessingModel(MPv3.ID)).setLocalEngineID(localEngineID.getValue());
snmp.listen();
----------------------------------------------------------------

Each time when snmp get/set is send the piece of code is called:
----------------------------------------------------------------
UserTarget target = new UserTarget();
Address agentAddress = GenericAddress.parse("udp:<ADDRESS>/161");
target.setAddress(agentAddress);
target.setRetries(1);
target.setTimeout(10000);
target.setVersion(SnmpConstants.version3);
target.setSecurityLevel(((UserBasedModel)
agent.getSecurityModel()).getSecurityLevel());

byte[] engineIdDisc = null;
if (((MPv3) snmp.getMessageProcessingModel(MPv3.ID)).getEngineID(target.getAddress())
== null) {
	try {
		usm.setEngineDiscoveryEnabled(true);
		engineIdDisc =
snmp.discoverAuthoritativeEngineID(target.getAddress(),
target.getTimeout());
	} finally {
		usm.setEngineDiscoveryEnabled(false);
	}
} else {
	engineIdDisc = ((MPv3)
snmp.getMessageProcessingModel(MPv3.ID)).getEngineID(target.getAddress()).toByteArray();
}
if (engineIdDisc == null) {
	throw new SessionTimeoutException("Failed discovery.");
}
target.setAuthoritativeEngineID(engineIdDisc);
UsmUser user = Snmp4JTranslator.to(((UserBasedModel)
agent.getSecurityModel()).getUser());
target.setSecurityName(user.getSecurityName());
usm.addUser(new OctetString(user.getSecurityName()), new
OctetString(engineIdDisc), user);
ScopedPDU pdu = new ScopedPDU();
pdu.setContextName(new OctetString("contextName"));
ResponseEvent response = snmp.send(pdu, target);
----------------------------------------------------------------

Everything is working fine till the moment the agent is restarted.
After this fact I'm getting no response when trying
response.getResponse()
I'm using localized users because there is one user defined for the
whole system but passphrases may be different depending on the device.

Thanks,
Tomek



More information about the SNMP4J mailing list