[SNMP4J] possible bug in org.snmp4j.agent.mo.snmp.NotificationOriginatorImpl

Yuan Ding yding at goldengate.com
Fri Apr 27 23:11:37 CEST 2007


Hi Frank,

Here is the code snippet:

    mib = new NodeAgentMibModule(ggAgent);
    mib.loadNotificationEntry();
    ArrayList<String> targetAddrList = mib.getTargetAddressList();
    for (int i = 0; i < targetAddrList.size(); i++) {
      targetMIB.addTargetAddress(new OctetString("notification"),
          TransportDomains.transportDomainUdpIpv4,
          new OctetString(new
UdpAddress(targetAddrList.get(i)).getValue()),
          200, 0, //TODO add it to config
          new OctetString(mib.getTagList()),
          new OctetString("v2c"),
          StorageType.permanent);
    }
    targetMIB.addTargetParams(new OctetString("v2c"),
        MessageProcessingModel.MPv2c,
        SecurityModel.SECURITY_MODEL_SNMPv2c,
        new OctetString("public"),
        SecurityLevel.AUTH_PRIV,
        StorageType.permanent);
    Set<ObjectName> keyset = mib.getNotificationMap().keySet();
    Iterator<ObjectName> iter = keyset.iterator();
    while (iter.hasNext()) {
      ObjectName objName = iter.next();
      NotificationEntry entry = mib.getNotificationMap().get(objName);
      notificationMIB.addNotifyEntry(new OctetString(entry.getOidStr()),
          new OctetString(entry.getTag()),
          SnmpNotificationMIB.SnmpNotifyTypeEnum.trap,
          StorageType.permanent);
    }


Target address are loaded from config file. (1 here)
Notifications are loaded from MIB module - 2 here. When one invocation
of 
getNotificationOriginator().notify(
        new OctetString("public"), new OID(entry.getOidStr()),
vbindings);
is called, two notifications are sent out.
entry and vbindings are built dynamically, based on notification type.

Thanks for taking a look at this.

yuan 


-----Original Message-----
From: Frank Fock [mailto:fock at agentpp.com] 
Sent: Friday, April 27, 2007 1:47 PM
To: Yuan Ding
Cc: snmp4j at agentpp.org
Subject: Re: [SNMP4J] possible bug in
org.snmp4j.agent.mo.snmp.NotificationOriginatorImpl

Hi Yuan,

 From the information you provide, SNMP4J-Agent is
working correctly (as expected).

Can you provide more details why you think that
there is a bug?

Best regards,
Frank

Yuan Ding wrote:
> Hi, 
> 
>  
> 
> I don't know if anyone encounter this before.
> 
>  
> 
> It looks like a bug in this class's notify method.
> 
>  
> 
> Here is the scenario:
> 
>  
> 
> Add two notification entries to notificationMIB in the agent.
> 
> Then send one notification with notificationID (OID) and set all
> variable bindings. 
> 
>  
> 
> The result is: two identical notifications are sent.
> 
>  
> 
> I have a temporary fix: while adding notification entry, I use
> notificationID as name. Within NotificationOriginatorImpl's notify
> method, since there are several private members, I have to clone the
> impl class and change "notify" method the following way:
> 
>  
> 
>   public Object notify(OctetString context, OID notificationID,
> 
>                        TimeTicks sysUpTime, VariableBinding[] vbs) {
> 
>     if (logger.isInfoEnabled()) {
> 
>       logger.info("Notification " + notificationID + " issued with " +
> 
>                   Arrays.asList(vbs));
> 
>     }
> 
>     List responses = new LinkedList();
> 
>     for (Iterator it =
> notificationMIB.getNotifyTable().getModel().iterator();
> 
>          it.hasNext(); ) {
> 
>       MOTableRow notifyRow = (MOTableRow) it.next();
> 
>       
> 
>       //==================Start local fix=======================
> 
>       // fetch name as OID
> 
>       OctetString name = new OctetString();
> 
>       name.fromSubIndex(notifyRow.getIndex(), true);
> 
>       String notificationIDStr = notificationID.toString();
> 
>       if (!notificationIDStr.equals(name.toString())) {
> 
>         continue; // skip those notification that does not match
> notificationID
> 
>       }
> 
>       //==================End local fix========================
> 
> ... (the rest of the code)
> 
>  
> 
> Let me know if this is truly a bug or the way I am using it is wrong.
If
> it's a bug let me know if the fix make sense. 
> 
> Thanks
> 
> yuan
> 
> 
> 
> This e-mail message and any attachments may contain private,
confidential, proprietary or privileged material of GoldenGate Software,
Inc. that is for the sole use of the intended recipient(s) of this
e-mail message.  Any review, copying or distribution or other use of
this e-mail message or any attachments hereto by anyone other than the
intended recipient(s) is strictly prohibited.  If you are not the
intended recipient(s) of this e-mail message, please contact GoldenGate
Software, Inc. (415-777-0200) immediately and permanently delete the
original e-mail message and any copies of this e-mail message and all
attachments, if any.
> _______________________________________________
> SNMP4J mailing list
> SNMP4J at agentpp.org
> http://lists.agentpp.org/mailman/listinfo/snmp4j

-- 
AGENT++
http://www.agentpp.com
http://www.mibexplorer.com
http://www.mibdesigner.com




This e-mail message and any attachments may contain private, confidential, proprietary or privileged material of GoldenGate Software, Inc. that is for the sole use of the intended recipient(s) of this e-mail message.  Any review, copying or distribution or other use of this e-mail message or any attachments hereto by anyone other than the intended recipient(s) is strictly prohibited.  If you are not the intended recipient(s) of this e-mail message, please contact GoldenGate Software, Inc. (415-777-0200) immediately and permanently delete the original e-mail message and any copies of this e-mail message and all attachments, if any.




More information about the SNMP4J mailing list