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
_______________________________________________
SNMP4J mailing list
[email protected]
http://lists.agentpp.org/mailman/listinfo/snmp4j