Interface definition for add and remove ports to groups
diff --git a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
index ad84268..968fb6f 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
@@ -4,7 +4,9 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -133,6 +135,7 @@
private SegmentRouterConfig srConfig;
private ConcurrentMap<Dpid, Set<PortNumber>> neighbors;
private ConcurrentMap<NeighborSet, EcmpInfo> ecmpGroups;
+ private HashMap<PortNumber, ArrayList<NeighborSet>> portNeighborSetMap;
@@ -204,6 +207,37 @@
return driverState.toString();
}
+ public void removePortFromGroups(PortNumber port) {
+ ArrayList<NeighborSet> portNSSet = portNeighborSetMap.get(port);
+ for (NeighborSet ns : portNSSet) {
+ /* Delete the first matched bucket */
+ Iterator<BucketInfo> it = ecmpGroups.get(ns).buckets.iterator();
+ while (it.hasNext()) {
+ BucketInfo bucket = it.next();
+ if (bucket.outport.equals(port)) {
+ it.remove();
+ /* Assuming port appears under only one bucket for
+ * a neighbor set
+ */
+ break;
+ }
+ }
+ }
+ /* Delete entry from portNeighborSetMap */
+ portNeighborSetMap.remove(port);
+ /* TODO: Update switches using GroupMod */
+ }
+
+ public void addPortToGroups(PortNumber port) {
+ ArrayList<NeighborSet> portNSSet = portNeighborSetMap.get(port);
+ if (portNSSet != null) {
+ /* Port is already part of ECMP groups */
+ return;
+ }
+ /* TODO: Not yet finished */
+ return;
+ }
+
// *****************************
// Driver handshake state-machine
// *****************************
@@ -669,6 +703,21 @@
buckets.add(b);
}
}
+
+ for (Dpid d : combo) {
+ for (PortNumber sp : neighbors.get(d)) {
+ ArrayList<NeighborSet> portNeighborSets =
+ portNeighborSetMap.get(sp);
+ if (portNeighborSets == null) {
+ portNeighborSets = new ArrayList<NeighborSet>();
+ portNeighborSets.add(ns);
+ portNeighborSetMap.put(sp, portNeighborSets);
+ }
+ else
+ portNeighborSets.add(ns);
+ }
+ }
+
EcmpInfo ecmpInfo = new EcmpInfo(groupid++, buckets);
setEcmpGroup(ecmpInfo);
ecmpGroups.put(ns, ecmpInfo);