[SNMP4J] How to use ProxyForwarder

Frank Fock fock at agentpp.com
Sat Mar 24 10:52:00 CET 2007


Dear Mr. Norimichi,

To implement a proxy forwarder it is not
necessary to add a command or notification
listener yourself. Extending the BaseAgent
class and adding your own configuration for
the proxy forwarder and target MIB is
enough.

Best regards,
Frank

Kanda Norimichi wrote:
> 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
>>
> _______________________________________________
> 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