BUG-3219: Handle EchoRequests directly in ConnectionAdapter 72/20972/1
authorRobert Varga <rovarga@cisco.com>
Mon, 18 May 2015 15:18:41 +0000 (17:18 +0200)
committerMichal Polkorab <michal.polkorab@pantheon.sk>
Fri, 22 May 2015 11:01:22 +0000 (13:01 +0200)
If we have an OutboundQueueManager, we should short-cut handling of echo
request messages in the plugin itself. Perform exectly that.

Change-Id: If4090d02e521c2da5914545bf3e887bd265c54a0
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit 464718c39f203539d7285c172d29027484c88fc9)

openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/ConnectionAdapterImpl.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/OutboundQueueManager.java

index 464527c7b886ecef1da21bd61652dd5d7d36c778..cf2693c80276a4c587b3bc0f45d47af17d8078e5 100644 (file)
@@ -284,7 +284,11 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
                 systemListener.onSwitchIdleEvent((SwitchIdleEvent) message);
                 // OpenFlow messages
             } else if (message instanceof EchoRequestMessage) {
-                messageListener.onEchoRequestMessage((EchoRequestMessage) message);
+                if (outputManager != null) {
+                    outputManager.onEchoRequest((EchoRequestMessage) message);
+                } else {
+                    messageListener.onEchoRequestMessage((EchoRequestMessage) message);
+                }
                 statisticsCounters.incrementCounter(CounterEventTypes.US_MESSAGE_PASS);
             } else if (message instanceof ErrorMessage) {
                 // Send only unmatched errors
index a4d3f9746928dba8e7953db7923754a576a59957..766abe6a1d5bd0b3944acab9b24a6505f24e30fe 100644 (file)
@@ -20,6 +20,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueException;
 import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueHandler;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoRequestMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -450,4 +453,9 @@ final class OutboundQueueManager<T extends OutboundQueueHandler> extends Channel
     public String toString() {
         return String.format("Channel %s queue [flushing=%s]", parent.getChannel(), flushScheduled.get());
     }
+
+    void onEchoRequest(final EchoRequestMessage message) {
+        final EchoReplyInput reply = new EchoReplyInputBuilder().setData(message.getData()).setVersion(message.getVersion()).setXid(message.getXid()).build();
+        parent.getChannel().writeAndFlush(reply);
+    }
 }