From e66a43f2d51b8209a086fb4502a533830425a8de Mon Sep 17 00:00:00 2001
From: Ryan Izard <rizard@g.clemson.edu>
Date: Thu, 16 Apr 2015 16:14:47 -0400
Subject: [PATCH] Modified slightly to track the specific initial state. If we
 were slave first, then we won't clear the flow table if we go to master for
 the first time.

---
 .../core/internal/OFSwitchHandshakeHandler.java          | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
index 66a7b55e9..b171312ca 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchHandshakeHandler.java
@@ -101,7 +101,7 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 	private final OFFeaturesReply featuresReply;
 	private final Timer timer;
 	
-	private volatile boolean visitedMaster = false;
+	private volatile OFControllerRole initialRole = null;
 
 	private final ArrayList<OFPortStatus> pendingPortStatusMsg;
 
@@ -1234,8 +1234,8 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 			if (OFSwitchManager.clearTablesOnEachTransitionToMaster) {
 				log.info("Clearing flow tables of {} on recent transition to MASTER.", sw.getId().toString());
 				clearAllTables();
-			} else if (OFSwitchManager.clearTablesOnInitialConnectAsMaster && !visitedMaster) {
-				visitedMaster = true;
+			} else if (OFSwitchManager.clearTablesOnInitialConnectAsMaster && initialRole == null) { /* don't do it if we were slave first */
+				initialRole = OFControllerRole.ROLE_MASTER;
 				log.info("Clearing flow tables of {} on initial role as MASTER.", sw.getId().toString());
 				clearAllTables();
 			}
@@ -1367,6 +1367,9 @@ public class OFSwitchHandshakeHandler implements IOFConnectionListener {
 		@Override
 		void enterState() {
 			setSwitchStatus(SwitchStatus.SLAVE);
+			if (initialRole == null) {
+				initialRole = OFControllerRole.ROLE_SLAVE;
+			}
 		}
 
 		@Override
-- 
GitLab