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