From 09d91df465156589b8592b583d175c99e19d2181 Mon Sep 17 00:00:00 2001
From: Ryan Izard <rizard@g.clemson.edu>
Date: Tue, 11 Aug 2015 15:26:14 -0400
Subject: [PATCH] Ignore packet-in messages in the WaitFeaturesReplyState.

---
 .../core/internal/OFChannelHandler.java       | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
index 7f3463bdd..50d471a79 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
@@ -46,7 +46,9 @@ import org.projectfloodlight.openflow.protocol.OFHello;
 import org.projectfloodlight.openflow.protocol.OFHelloElem;
 import org.projectfloodlight.openflow.protocol.OFHelloElemVersionbitmap;
 import org.projectfloodlight.openflow.protocol.OFMessage;
+import org.projectfloodlight.openflow.protocol.OFPacketIn;
 import org.projectfloodlight.openflow.protocol.OFPortStatus;
+import org.projectfloodlight.openflow.protocol.OFType;
 import org.projectfloodlight.openflow.protocol.OFVersion;
 import org.projectfloodlight.openflow.protocol.ver13.OFHelloElemTypeSerializerVer13;
 import org.projectfloodlight.openflow.protocol.ver14.OFHelloElemTypeSerializerVer14;
@@ -122,7 +124,7 @@ class OFChannelHandler extends IdleStateAwareChannelHandler {
 			// we only expect features reply in the WAIT_FEATURES_REPLY state
 			illegalMessageReceived(m);
 		}
-		
+
 		void processOFPortStatus(OFPortStatus m) {
 			unhandledMessageReceived(m);
 		}
@@ -419,7 +421,7 @@ class OFChannelHandler extends IdleStateAwareChannelHandler {
 				super.processOFHello(m); /* Versions don't match as they should; abort */
 			}
 		}
-		
+
 		@Override
 		void processOFPortStatus(OFPortStatus m) {
 			log.warn("Ignoring PORT_STATUS message from {} during OpenFlow channel establishment. Ports will be explicitly queried in a later state.", channel.getRemoteAddress());
@@ -429,6 +431,15 @@ class OFChannelHandler extends IdleStateAwareChannelHandler {
 		void enterState() throws IOException {
 			sendFeaturesRequest();
 		}
+
+		@Override
+		void processOFMessage(OFMessage m) throws IOException {
+			if (m.getType().equals(OFType.PACKET_IN)) {
+				log.warn("Ignoring PACKET_IN message from {} during OpenFlow channel establishment.", channel.getRemoteAddress());
+			} else {
+				super.processOFMessage(m);
+			}
+		}
 	};
 
 	/**
@@ -856,8 +867,8 @@ class OFChannelHandler extends IdleStateAwareChannelHandler {
 		// Send initial hello message
 		List<OFHelloElem> he = new ArrayList<OFHelloElem>();
 		he.add(factory.buildHelloElemVersionbitmap()
-						.setBitmaps(ofBitmaps)
-						.build());
+				.setBitmaps(ofBitmaps)
+				.build());
 		OFHello.Builder builder = factory.buildHello()
 				.setXid(handshakeTransactionIds--)
 				.setElements(he);
-- 
GitLab