Added a feature to optimize the tunnel for AVOID policy ([101, 103, 104, 106]->[101,104,106] in fish topo)
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 0eee543..c11d604 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -274,8 +274,8 @@
}
});
- //testMode = TEST_MODE.POLICY_AVOID;
- //testTask.reschedule(20, TimeUnit.SECONDS);
+ testMode = TEST_MODE.POLICY_AVOID;
+ testTask.reschedule(20, TimeUnit.SECONDS);
}
@Override
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingPolicyAvoid.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingPolicyAvoid.java
index 162b1c0..478eeb6 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingPolicyAvoid.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingPolicyAvoid.java
@@ -89,19 +89,36 @@
Switch srcNode = srManager.getSwitchFromNodeId(
labelStack.get(0).toString());
- Switch dstNode = srManager.getSwitchFromNodeId(
- labelStack.get(labelStack.size()-1).toString());
+
+ int i = 2;
+ boolean violated = false;
Switch nodeToCheck = srManager.getSwitchFromNodeId(
- labelStack.get(labelStack.size()-2).toString());
-
+ labelStack.get(labelStack.size()-i).toString());
+ ECMPShortestPathGraph ecmpGraph = new ECMPShortestPathGraph(srcNode);
while (!nodeToCheck.getDpid().equals(srcNode)) {
-
-
+ List<Path> paths = ecmpGraph.getECMPPaths(nodeToCheck);
+ for (Path path: paths) {
+ for (LinkData link: path) {
+ if (link.getSrc().getDpid().equals(switchToAvoid.getDpid())) {
+ violated = true;
+ break;
+ }
+ }
+ if (violated)
+ break;
+ }
+ if (violated) {
+ i++;
+ nodeToCheck = srManager.getSwitchFromNodeId(
+ labelStack.get(labelStack.size()-i).toString());
+ }
+ // remove the rest of the label Ids and stop here
+ else {
+ for (int j=1; j<i; j++) {
+ labelStack.remove(j);
+ return;
+ }
+ }
}
-
-
-
-
}
-
}