[SNMP4J] BaseAgent vs AgentXMasterAgent

2012-05-04 Thread Rob Morton
Hi,

   I have a BaseAgent-based snmp agent and want to be able to convert to 
an AgentXMasterAgent-based agent so that I can connect sub-agents to my 
Master agent in the future.

   What is the path of least resistance?

Thanks,
Rob

___
SNMP4J mailing list
SNMP4J@agentpp.org
http://lists.agentpp.org/mailman/listinfo/snmp4j


[SNMP4J] problem sending V3 Traps/Informs so they can be received by snmptrapd

2012-05-04 Thread John Marcolla
I have been working on an application which requires messages to be sent
to NMS GUIs using SNMP Version 3 TRAP/INFORMs.  I have been having
problems getting the application to work the same as the existing
netsnmp command line tools.  I have gotten both authenticated and
non-authenticated messaging to work using the command line tools.  I am
not able to get either to work using snmp4J API.  I am sure there is
additional logic in either the tool or API which makes the results
differ.  I would greatly appreciate some expertise to quickly look over
what I have built - sure that the problem is obvious to an expert !  I
have included snippets of both solutions, the resulting exception stack
and dump of vital objects all included below.

 

Here is an authenticated  INFORM/TRAP working example using snmptrap (
to send), and snmptrapd ( to receive ) - INFORM excludes red text; TRAP
includes red text.  I believe that the only configuration being used is
in the file I have specified:

 

snmptrapd -d -Lf /tmp/snmp.out -Os -f -C -c file name

 

   where file nameis :

  createUser -e 0x81022434 collector MD5 authpass DES
privpass

  authuser log collector

 

snmptrap  -Ci -e 0x81022434  -v 3  -u collector  -a MD5  -x DES
-A authpass  -X privpass  -l authPriv  -r 3  -t 2  ipaddress  0
1.1.1.44  1.1.1.44.1  s  it works

 

 

Here is the attempt to simulate the above for both TRAP/INFORM using
snmp4J ( Trap requires red text below ):

 

try

  {

   TransportMapping transport = new DefaultUdpTransportMapping();

   Snmp snmp = new Snmp(transport);

 

// assumes localEngineID is ok to create; bootCount = 0;

byte[] localEngineID =

 
((MPv3)snmp.getMessageProcessingModel(MessageProcessingModel.MPv3)).crea
teLocalEngineID();

USM usm = new USM(SecurityProtocols.getInstance(),

  new OctetString(localEngineID), 0);

SecurityModels.getInstance().addSecurityModel(usm);

 

snmp.getUSM().addUser ( secOctetString,   // collector

   new UsmUser (secOctetString,   //
collector

authID,
// AuthMD5.ID

authOctetString,
// authpass

privID,
//  PrivDES.ID

privOctetString ));
//  privpass

 

this.target = new UserTarget();

this.target.setAddress(udpAddress);  //
ipaddress/162

this.target.setRetries(this.numRetries);   // 2

this.target.setTimeout(this.timeout);   // 1000

this.target.setVersion(SnmpConstants.version3);

this.target.setSecurityLevel(securityLevel);
//SecurityLevel.AUTH_PRIV

this.target.setSecurityName(secOctetString);   // collector

 

this.snmp.listen();

 

ScopedPDU pdu = new ScopedPDU();



pdu.setType(PDU.INFORM/TRAP);

pdu.add( new VariableBinding( SnmpConstants.sysUpTime, new
TimeTicks( 0 ) ) );

pdu.add( new VariableBinding( SnmpConstants.snmpTrapOID, new
OctetString (this.mib) ) );

 

   // fill in remainder of the data here

 

ResponseEvent response = snmp.send(pdu, this.target);

 

TRAP/INFORM - reply:  

org.snmp4j.MessageException: Message processing model 3 returned error:
Encryption error

at
org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:494)

at org.snmp4j.Snmp.sendMessage(Snmp.java:1005)

at org.snmp4j.Snmp.send(Snmp.java:885)

at org.snmp4j.Snmp.send(Snmp.java:878)

at org.snmp4j.Snmp.send(Snmp.java:843)

at EMSAdminSnmp4J.sendMsgToAdmin(EMSAdminSnmp4J.java:285)

at
EMSMessageCollector$EMSMessageSender.run(EMSMessageCollector.java:38)

at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.jav
a:1110)

at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:603)

at java.lang.Thread.run(Thread.java:636)

 

Here is the debug information to show above objects: 

 

USM User:
UsmUserEntry[userName=collector,usmUser=UsmUser[secName=collector,authPr
otocol=1.3.6.1.6.3.10.1.1.2,authPassphrase=authpass,privProtocol=1.3.6.1
.6.3.10.1.2.2,privPassphrase=privpass,localizationEngineID=null]]

 

TARGET: 

UserTarget[address=ipaddress/162,version=3,timeout=2000,retries=2,secu
rityLevel=3,securityModel=3,securityName=collector,preferredTransports=n
ull,authoritativeEngineID=]

 

PDU:

INFORM/TRAP[reqestID=0, errorStatus=0, errorIndex=0,
VBS[1.3.6.1.2.1.1.3.0 = 0:00:00.00; 1.3.6.1.6.3.1.1.4.1.0 = 1.1.1.44;
1.1.1.44.1 = JMTest1; 1.1.1.44.2 = will found ; 1.1.1.44.3 = LogWatcher;
1.1.1.44.4 = /home/jmarcolla/test.app.log1; 1.1.1.44.5 = 1336163302;
1.1.1.44.7 = 0; 1.1.1.44.8 = 24; 1.1.1.44.6 = 3]]

 

I am curious what I need to do to match the results of the command line
snmptrap above.  Are there other configs/setting