Add the feature of removing tunnels.
Change-Id: I467c5a18f20c9eea360935b99bd64be08ca47237
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 aaaccdf..4726b8e 100644
--- a/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
+++ b/src/main/java/net/onrc/onos/core/drivermanager/OFSwitchImplCPqD13.java
@@ -143,12 +143,10 @@
private boolean isEdgeRouter;
private int sid;
private ConcurrentMap<NeighborSet, EcmpInfo> ecmpGroups;
- private ConcurrentMap<String, List<Integer>> tunnelGroups;
+ private ConcurrentMap<String, List<Integer>> tunnelGroupIdTable;
private ConcurrentMap<PortNumber, ArrayList<NeighborSet>> portNeighborSetMap;
private AtomicInteger groupid;
-
-
public OFSwitchImplCPqD13(OFDescStatsReply desc, boolean usePipeline13) {
super();
haltStateMachine = new AtomicBoolean(false);
@@ -160,7 +158,7 @@
ecmpGroups = new ConcurrentHashMap<NeighborSet, EcmpInfo>();
portNeighborSetMap =
new ConcurrentHashMap<PortNumber, ArrayList<NeighborSet>>();
- tunnelGroups = new ConcurrentHashMap<String, List<Integer>>();
+ tunnelGroupIdTable = new ConcurrentHashMap<String, List<Integer>>();
segmentIds = new ArrayList<Integer>();
isEdgeRouter = false;
groupid = new AtomicInteger(0);
@@ -1298,7 +1296,7 @@
int gid = -1;
GroupAction ga = (GroupAction)action;
if (ga.getTunnelId() != null) {
- List<Integer> groupIds = tunnelGroups.get(ga.getTunnelId());
+ List<Integer> groupIds = tunnelGroupIdTable.get(ga.getTunnelId());
gid = groupIds.get(groupIds.size()-1);
}
else {
@@ -1643,16 +1641,19 @@
}
}
- public int createTunnel(String tunnelId, List<String> route, NeighborSet ns) {
+ @Override
+ public void createTunnel(String tunnelId, List<String> route, NeighborSet ns) {
+
+ List<Integer> groups = new ArrayList<Integer>();
// create a last group of the group chaining
int finalGroupId = groupid.incrementAndGet();
createGroupForANeighborSet(ns, finalGroupId);
+ groups.add(Integer.valueOf(finalGroupId));
int groupId = 0;
int nextGroupId = finalGroupId;
boolean bos = false;
- List<Integer> groups = new ArrayList<Integer>();
// process the node ID in order
for (int i = 0; i < route.size(); i++) {
@@ -1664,11 +1665,19 @@
createGroupForMplsLabel(groupId, nodeId, nextGroupId, bos);
nextGroupId = groupId;
}
-
- tunnelGroups.putIfAbsent(tunnelId, groups);
- return groupId;
+ tunnelGroupIdTable.putIfAbsent(tunnelId, groups);
}
+ @Override
+ public void removeTunnel(String tunnelId) {
+ List<Integer> groups = tunnelGroupIdTable.get(tunnelId);
+ // we need to delete groups in reverse order
+ for (int i = groups.size() - 1; i >= 0; i--) {
+ int groupId = groups.get(i);
+ deleteGroup(groupId);
+ }
+ tunnelGroupIdTable.remove(tunnelId);
+ }
// *****************************
// Unused