- Modify the GROUP MOD function to set WatchPort and WatchGroup as ANY
- Process the multiple port description replies ( NOTE : Test failes due to unmodifiableList)
Change-Id: Idaca5a4218e3b920d6c4d3bf3c2611a7ddc0d166
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
index 2dd458b..9a8f21b 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFChannelHandler.java
@@ -145,6 +145,7 @@
this.roleChanger = new RoleChanger(DEFAULT_ROLE_TIMEOUT_MS);
this.state = ChannelState.INIT;
this.pendingPortStatusMsg = new CopyOnWriteArrayList<OFPortStatus>();
+ this.portDescReplies = new ArrayList<OFPortDescStatsReply>();
factory13 = controller.getOFMessageFactory_13();
factory10 = controller.getOFMessageFactory_10();
controlRequested = Boolean.FALSE;
@@ -723,8 +724,8 @@
h.channel.getRemoteAddress());
return;
}
- if (h.portDescReplies == null) {
- h.portDescReplies = new ArrayList<OFPortDescStatsReply>();
+ if (h.portDescReplies.isEmpty()) {
+ //h.portDescReplies = new ArrayList<OFPortDescStatsReply>();
h.portDescReplies.add((OFPortDescStatsReply) m);
if (m.getFlags().contains(OFStatsReplyFlags.REPLY_MORE)) {
log.warn("Stats reply indicates more stats from sw {} for "
diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
index 501c020..e93f378 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImplBase.java
@@ -474,6 +474,25 @@
return;
}
+ /*
+
+ for (OFPortDescStatsReply portDesc: portDescList) {
+ for (OFPortDesc port: portDesc.getEntries()) {
+ boolean up = false;
+ for (OFPortConfig state: port.getConfig()) {
+ if (state != OFPortConfig.PORT_DOWN) {
+ up = true;
+ break;
+ }
+ }
+
+ if (up) {
+ portManager.updatePorts(portDesc.getEntries());
+ }
+ }
+ }
+ */
+
for (OFPortDescStatsReply portDesc: portDescList) {
portManager.updatePorts(portDesc.getEntries());
}
@@ -1022,14 +1041,31 @@
}
if (doUpdate) {
- portsByName = Collections.unmodifiableMap(newPortsByName);
- portsByNumber =
- Collections.unmodifiableMap(newPortsByNumber);
- enabledPortList =
- Collections.unmodifiableList(newEnabledPortList);
- enabledPortNumbers =
- Collections.unmodifiableList(newEnabledPortNumbers);
- portList = Collections.unmodifiableList(newPortsList);
+ if (enabledPortList.isEmpty() ) {
+ //portsByName = new HashMap<String, OFPortDesc>(newPortsByName);
+ portsByName = newPortsByName;
+ portsByNumber = newPortsByNumber;
+ enabledPortList = newEnabledPortList;
+ enabledPortNumbers = newEnabledPortNumbers;
+ portList = newPortsList;
+ /*
+ portsByNumber = Collections
+ Collections.unmodifiableMap(newPortsByNumber);
+ enabledPortList =
+ Collections.unmodifiableList(newEnabledPortList);
+ enabledPortNumbers =
+ Collections.unmodifiableList(newEnabledPortNumbers);
+ portList = Collections.unmodifiableList(newPortsList);
+ */
+ }
+ else {
+ portsByName.putAll(newPortsByName);
+ portsByNumber.putAll(newPortsByNumber);
+ enabledPortList.addAll(newEnabledPortList);
+ enabledPortNumbers.addAll(newEnabledPortNumbers);
+ portList.addAll(newPortsList);
+
+ }
}
return events;
} finally {
diff --git a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
index fe9d8e9..59e369a 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplSpringOpenTTP.java
@@ -1087,6 +1087,8 @@
bldr.setActions(actions);
if (ecmpInfo.groupType == OFGroupType.SELECT)
bldr.setWeight(1);
+ bldr.setWatchGroup(OFGroup.ANY);
+ bldr.setWatchPort(OFPort.ANY);
OFBucket ofb = bldr.build();
buckets.add(ofb);
}
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
index 66e1b88..e8be836 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyPublisher.java
@@ -412,6 +412,7 @@
// FIXME should be merging, with existing attrs, etc..
// TODO define attr name as constant somewhere.
// TODO populate appropriate attributes.
+ //portData.
portData.createStringAttribute("name", port.getName());
portData.createStringAttribute(TopologyElement.TYPE,
TopologyElement.TYPE_PACKET_LAYER);
diff --git a/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java b/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java
index 4d6639b..6c52f15 100644
--- a/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java
+++ b/src/test/java/net/floodlightcontroller/core/internal/OFChannelHandlerTest.java
@@ -484,6 +484,7 @@
swImplBase.setFeaturesReply(featuresReply);
expectLastCall().once();
swImplBase.setPortDescReply((OFPortDescStatsReply)null );
+ swImplBase.setPortDescReplies((List<OFPortDescStatsReply>)null );
replay(swImplBase);
// send the description stats reply