X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fprotocol_plugins%2Fopenflow%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fprotocol_plugin%2Fopenflow%2Fcore%2Finternal%2FSwitchHandler.java;h=5d51d26a988f553f0e79a3d2a29b408ddb486871;hp=91606f4a41daaeecd7cce64e0566c54e028ced82;hb=b5744fe10a9eef5b5699cd02a901dc51fcbbb7ad;hpb=6e8fef270b6dc88f1dedca0c3e607a1a16e6ce2f;ds=sidebyside diff --git a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/core/internal/SwitchHandler.java b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/core/internal/SwitchHandler.java index 91606f4a41..5d51d26a98 100644 --- a/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/core/internal/SwitchHandler.java +++ b/opendaylight/protocol_plugins/openflow/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/core/internal/SwitchHandler.java @@ -228,7 +228,7 @@ public class SwitchHandler implements ISwitch { * should be used for non-critical messages such as statistics request, * discovery packets, etc. An unique XID is generated automatically and * inserted into the message. - * + * * @param msg * The OF message to be sent * @return The XID used @@ -247,7 +247,7 @@ public class SwitchHandler implements ISwitch { * priority. It will be served after high priority messages. The method * should be used for non-critical messages such as statistics request, * discovery packets, etc. The specified XID is inserted into the message. - * + * * @param msg * The OF message to be Sent * @param xid @@ -269,7 +269,7 @@ public class SwitchHandler implements ISwitch { * method should be used for critical messages such as hello, echo reply * etc. An unique XID is generated automatically and inserted into the * message. - * + * * @param msg * The OF message to be sent * @return The XID used @@ -284,7 +284,7 @@ public class SwitchHandler implements ISwitch { * priority. It will be served first before normal priority messages. The * method should be used for critical messages such as hello, echo reply * etc. The specified XID is inserted into the message. - * + * * @param msg * The OF message to be sent * @return The XID used @@ -308,6 +308,48 @@ public class SwitchHandler implements ISwitch { } } + /** + * This method bypasses the transmit queue and sends the message over the + * socket directly. If the input xid is not null, the specified xid is + * inserted into the message. Otherwise, an unique xid is generated + * automatically and inserted into the message. + * + * @param msg + * Message to be sent + * @param xid + * Message xid + */ + private void asyncSendNow(OFMessage msg, Integer xid) { + if (xid == null) { + xid = getNextXid(); + } + msg.setXid(xid); + + asyncSendNow(msg); + } + + /** + * This method bypasses the transmit queue and sends the message over the + * socket directly. + * + * @param msg + * Message to be sent + */ + private void asyncSendNow(OFMessage msg) { + if (msgReadWriteService == null) { + logger.warn( + "asyncSendNow: {} is not sent because Message ReadWrite Service is not available.", + msg); + return; + } + + try { + msgReadWriteService.asyncSend(msg); + } catch (Exception e) { + reportError(e); + } + } + public void handleMessages() { List msgs = null; @@ -349,7 +391,8 @@ public class SwitchHandler implements ISwitch { case ECHO_REQUEST: OFEchoReply echoReply = (OFEchoReply) factory .getMessage(OFType.ECHO_REPLY); - asyncFastSend(echoReply); + // respond immediately + asyncSendNow(echoReply, msg.getXid()); break; case ECHO_REPLY: this.probeSent = false; @@ -822,7 +865,7 @@ public class SwitchHandler implements ISwitch { barrierMsg.setXid(xid); transmitQ.add(new PriorityMessage(barrierMsg, 0, true)); - + return Boolean.TRUE; } @@ -830,7 +873,7 @@ public class SwitchHandler implements ISwitch { * This method returns the switch liveness timeout value. If controller did * not receive any message from the switch for such a long period, * controller will tear down the connection to the switch. - * + * * @return The timeout value */ private static int getSwitchLivenessTimeout() { @@ -853,7 +896,7 @@ public class SwitchHandler implements ISwitch { * Barrier request message. Then it's blocked until the Barrier rely arrives * or timeout. If syncRequest is false, it simply skips the message send and * just waits for the response back. - * + * * @param msg * Message to be sent * @param xid