[SNMP4J] How to use ProxyForwarder

Kanda Norimichi nkanda at fsi.co.jp
Thu Mar 22 13:30:36 CET 2007


Dear Mr. Fock:

Thank you very much for your reply of March 21.

I tried to fix ProxyForwarderImpl.java following your advice and check the operation.
So I could confirm it was set intended contextEngineID and contextName.

But I found another problem.
For a Trap from MA, two same forwarding Traps were sent to NMS.

It was caused by adding listener to MessageDispatcher doubly.
----
Thread [DefaultUDPTransportMapping_0.0.0.0/162] (Suspended (entry into method processPdu in CommandProcessor))	
	CommandProcessor.processPdu(CommandResponderEvent) line: 84	
	Snmp$NotificationDispatcher.processPdu(CommandResponderEvent) line: 1617	
	Snmp.fireProcessPdu(CommandResponderEvent) line: 1281	
	Snmp.processPdu(CommandResponderEvent) line: 1144	
	MessageDispatcherImpl.fireProcessPdu(CommandResponderEvent) line: 573	
	MessageDispatcherImpl.dispatchMessage(TransportMapping, MessageProcessingModel, Address, BERInputStream) line: 260	
	MessageDispatcherImpl.processMessage(TransportMapping, Address, BERInputStream) line: 320	
	MessageDispatcherImpl.processMessage(TransportMapping, Address, ByteBuffer) line: 282	
	DefaultUdpTransportMapping(AbstractTransportMapping).fireProcessMessage(Address, ByteBuffer) line: 83	
	DefaultUdpTransportMapping$ListenThread.run() line: 323	

Thread [DefaultUDPTransportMapping_0.0.0.0/162] (Suspended (entry into method processPdu in CommandProcessor))	
	CommandProcessor.processPdu(CommandResponderEvent) line: 84	
	MessageDispatcherImpl.fireProcessPdu(CommandResponderEvent) line: 573	
	MessageDispatcherImpl.dispatchMessage(TransportMapping, MessageProcessingModel, Address, BERInputStream) line: 260	
	MessageDispatcherImpl.processMessage(TransportMapping, Address, BERInputStream) line: 320	
	MessageDispatcherImpl.processMessage(TransportMapping, Address, ByteBuffer) line: 282	
	DefaultUdpTransportMapping(AbstractTransportMapping).fireProcessMessage(Address, ByteBuffer) line: 83	
	DefaultUdpTransportMapping$ListenThread.run() line: 323	
----

Tentatively I resolved the problem by changing second argument of 
session.addNotificationListener()
at the 114th line in TestProxy.java to dummy listener.
----
//    // NOTE: 2nd trial and error
//    session.addNotificationListener(new UdpAddress(162), agent);

    // NOTE: 3rd trial and error
    session.addNotificationListener(new UdpAddress(162), new CommandResponder() {
      public void processPdu(CommandResponderEvent event) {
        // NOTE: dummy listener
      }
    });
----
Is it the right resolution?

Also, when I make my program generating Snmp instance as well as 'session'
for receiving the Trap at the instance,
is it no problem with taking same way : setting CommandProcessor instance as 
the listener which is added Snmp instance?

Sincerely.

Norimichi Kanda

> -----Original Message-----
> From: Frank Fock [mailto:fock at agentpp.com]
> Sent: Wednesday, March 21, 2007 4:25 AM
> To: Kanda Norimichi
> Cc: snmp4j at agentpp.org
> Subject: Re: [SNMP4J] How to use ProxyForwarder
> 
> 
> Hi Kanda,
> 
> This is indeed a bug which can be fixed
> by the following patch on ProxyForwarderImpl.java:
> 
> @@ -199,6 +199,7 @@
>      }
>      PDU reqPDU = request.getCommandEvent().getPDU();
>      PDU pdu = DefaultPDUFactory.createPDU(target, reqPDU.getType());
> +    setScope(request, pdu);
>      try {
>        proxyForwardTranslation(request, reqPDU, pdu);
>        ResponseEvent response = null;
> @@ -402,6 +403,7 @@
>              try {
>                PDU reqPDU = request.getCommandEvent().getPDU();
>                PDU pdu = DefaultPDUFactory.createPDU(target,
> reqPDU.getType());
> +              setScope(request, pdu);
>                proxyForwardTranslation(request, reqPDU, pdu);
>                ResponseEvent resp = session.send(pdu, target);
>                if (logger.isInfoEnabled()) {
> @@ -436,6 +438,14 @@
>      return allOK;
>    }
> 
> +  private void setScope(ProxyForwardRequest request, PDU pdu) {
> +    if (pdu instanceof ScopedPDU) {
> +      ScopedPDU scopedPDU = (ScopedPDU)pdu;
> +      scopedPDU.setContextEngineID(request.getContextEngineID());
> +      scopedPDU.setContextName(request.getContext());
> +    }
> +  }
> +
> 
> Please let me know if this fixes the issue!
> 
> Best regards,
> Frank
> 
> 
> Kanda Norimichi wrote:
> > Dear Mr. Fock:
> > 
> > I am Kanda and I work at Fujisoft.
> > 
> > I hope to use ProxyForwarder.
> > But SNMPv1-Trap forward doesn't operate correctly.
> > 
> > I'll show below specifically.
> > I'm designing the following system structure.
> > 
> >     MA - TestProxy - NMS
> > 
> > "MA" is Managed-Agent, it is SNMP agent that support SNMPv1.
> > I hope that message from MA will be forwarded to NMS with 
> > the addition of contextEngineID that generated from
> > MA's IP address in TestProxy and fixed contextName.
> > 
> > But in TestProxy made by our system, contextEngineID configured actually is 
> > replaced by snmpEngineID of TestProxy.
> > ContextEngineID and contextName that should be configured forwarded Trap are 
> > already added to snmpCommunityTable.
> > 
> > I guess, maybe I failed in making TestProxy.
> > But I couldn't find sample program and I have no idea what should I do.
> > Would you give me any advice?
> > 
> > I'll attach TestProxy made by arranging org.snmp4j.agent.test.TestAgent.
> > 
> > Sincerely.
> > 
> > Norimichi Kanda
> > ----
[deleted]
> > ----
> > 
> > _______________________________________________
> > 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
> 



More information about the SNMP4J mailing list