[SNMP4J] Broadcasting via SNMPv3 doesn't work properly

Dmitriy Dubovoy ddubovoy at gmail.com
Mon Jan 19 13:05:59 CET 2009


 

Hello,

 

Please help me,

 

I tried to send broadcast snmp request using SNMPv3 but always I received
only one response.

Please look at the my code below:

 

try {

            ThreadPool tp = ThreadPool.create("Asynchronous SNMP Adaptor
Thread", 3);

            MultiThreadedMessageDispatcher mtmd = new
MultiThreadedMessageDispatcher(tp, new MessageDispatcherImpl());

            mtmd.addMessageProcessingModel(new MPv1());

            mtmd.addMessageProcessingModel(new MPv2c());

            mtmd.addMessageProcessingModel(new MPv3());

            mtmd.addCommandResponder(this);

            

            DefaultUdpTransportMapping defaultTransport = new
DefaultUdpTransportMapping();

            defaultTransport.setReceiveBufferSize(65535);

            TransportMapping transport = defaultTransport;

            mtmd.addTransportMapping(transport);

            

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

                    new OctetString(MPv3.createLocalEngineID()), 0);

            SecurityModels.getInstance().addSecurityModel(usm);

            

            OctetString securityName = new OctetString("admin");

 

            UsmUser usmUser = new UsmUser(securityName, 

AuthMD5.ID, 

new OctetString("adminadmin"),

                  PrivDES.ID,

                  new OctetString("adminadmin"));

                  

            snmp.getUSM().addUser( securityName, usmUser);

            

            transport.addTransportListener(mtmd); // addMessageDispatcher()
was deprecated in 1.7.4a.

 

            transport.listen();

                  

            // create the PDU

                ScopedPDU pduScoped = new ScopedPDU();

                

                //Fill scoped pdu parameters

                logger.debug("asyncsend_v3(): Fill scoped pdu parameters ");

                pduScoped.setType(PDU.GET);

                pduScoped.add(new VariableBinding(new
OID("1.3.6.1.2.1.2.2.1.10"))); //for example

            

                //set SecurityLevel

                int securityLevel = snmpTarget.getSecurityLevel();

                

Address targetAddress = GenericAddress.parse("10.10.255.255/161");

                  PduHandle reqHandle = mtmd.sendPdu(null, targetAddress,
SnmpConstants.version3,

                              SecurityModel.SECURITY_MODEL_USM,
securityName.getValue(),

                              SecurityLevel.NOAUTH_NOPRIV, pduScoped, true);

         } catch (IOException e) {

            logger.error("asyncsend(): Error sending async message. " + e);

            throw e;

         } catch (Exception e){

            logger.error("asyncsend(): Error sending async message. " + e);

         }

 

...

 

public void processPdu(CommandResponderEvent e) {

                                PDU responsePdu = e.getPDU();

                                if (responsePdu == null)

                                                return;

                                

                                /*

                                if (responsePdu.getType() != PDU.RESPONSE)

                                                return;

                                

                                Integer32 int32 =
responsePdu.getRequestID();

                                if (int32.getValue() == 0)

                                                return;

                                */

 

 

                                PduHandle pduHandle = e.getPduHandle();

                                 e.getPeerAddress();

 

                                } catch (Exception exception) {

                                }

                }

 

After executing the first part of code I receives only one
CommandResponderEvent. 

The same code for SNMP v1 works fine, I receives responses from all my
devices:

 

ThreadPool tp = ThreadPool.create("Asynchronous SNMP Adaptor Thread", 3);

            MultiThreadedMessageDispatcher mtmd = new
MultiThreadedMessageDispatcher(tp, new MessageDispatcherImpl());

            mtmd.addMessageProcessingModel(new MPv1());

            mtmd.addMessageProcessingModel(new MPv2c());

            mtmd.addMessageProcessingModel(new MPv3());

            mtmd.addCommandResponder(this);

            

            DefaultUdpTransportMapping defaultTransport = new
DefaultUdpTransportMapping();

            defaultTransport.setReceiveBufferSize(65535);

            TransportMapping transport = defaultTransport;

            mtmd.addTransportMapping(transport);

            // transport.addMessageDispatcher(mtmd);

            transport.addTransportListener(mtmd);

 

transport.listen();

                                

Address targetAddress = GenericAddress.parse("10.10.255.255/161");

 

                                PduHandle reqHandle = mtmd.sendPdu(null,
targetAddress, SnmpConstants.version1,

 
SecurityModel.SECURITY_MODEL_SNMPv1, new OctetString("public") .getValue(),

 
SecurityLevel.NOAUTH_NOPRIV, pdu, true);

                                

 

All devices supports SNMPv3 and set up by the same settings.

Could anyone help me to receive all responses? What I do incorrectly?

 

Please help me!

 

Thanks,

Dmitriy

 

 

 




More information about the SNMP4J mailing list