[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