From 05cf1c7659366cd646cc83e69365ccbdf3e8db5f Mon Sep 17 00:00:00 2001
From: Shudong Zhou <shudongzhou@gmail.com>
Date: Fri, 28 Sep 2012 14:59:38 -0700
Subject: [PATCH] Update switch features when getting new featuresReply from
 switch

---
 .../floodlightcontroller/core/internal/Controller.java   | 5 ++++-
 .../floodlightcontroller/core/internal/OFSwitchImpl.java | 9 +++++++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index b866c7069..f47484054 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -937,15 +937,18 @@ public class Controller implements IFloodlightProviderService,
                     if (log.isTraceEnabled())
                         log.trace("Features Reply from {}", sw);
                     
+                    sw.setFeaturesReply((OFFeaturesReply) m);
                     if (state.hsState.equals(HandshakeState.HELLO)) {
-                        sw.setFeaturesReply((OFFeaturesReply) m);
                         sendFeatureReplyConfiguration();
                         state.hsState = HandshakeState.FEATURES_REPLY;
                         // uncomment to enable "dumb" switches like cbench
                         // state.hsState = HandshakeState.READY;
                         // addSwitch(sw);
                     } else {
+                        // return results to rest api caller
                         sw.deliverOFFeaturesReply(m);
+                        // update database */
+                        updateActiveSwitchInfo(sw);
                     }
                     break;
                 case GET_CONFIG_REPLY:
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
index 0d73de7f1..d0bf49493 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
@@ -273,8 +273,13 @@ public class OFSwitchImpl implements IOFSwitch {
     @JsonIgnore
     public void setFeaturesReply(OFFeaturesReply featuresReply) {
         synchronized(portLock) {
-            for (OFPhysicalPort port : featuresReply.getPorts()) {
-                setPort(port);
+            if (stringId == null) {
+                /* ports are updated via port status message, so we
+                 * only fill in ports on initial connection.
+                 */
+                for (OFPhysicalPort port : featuresReply.getPorts()) {
+                    setPort(port);
+                }
             }
             this.datapathId = featuresReply.getDatapathId();
             this.capabilities = featuresReply.getCapabilities();
-- 
GitLab