Fix the tunnel creation logic when the tunnel starts with adjacency Sid with multiiple ports (not using all ports) such as 101 11111 102 103
Change-Id: I3e67c87b0ef29c903503b0345ee2352046b88792
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 5d280ae..711c2b1 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -1409,6 +1409,7 @@
return adjecencyInfo.keySet();
}
+
/**
* Send a Barrier request message and wait for the reply.
* It waits for the reply for 2 seconds and it cause exception when timer
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java
index 91acfe5..d1deb55 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingTunnel.java
@@ -219,6 +219,7 @@
NeighborSet ns) {
IOF13Switch targetSw = srManager.getIOF13Switch(routeInfo.srcSwDpid);
+ int groupId = -1;
if (targetSw == null) {
log.debug("Switch {} is gone.", routeInfo.srcSwDpid);
@@ -229,8 +230,20 @@
for (String IdStr: routeInfo.route)
Ids.add(Integer.parseInt(IdStr));
- List<PortNumber> ports = getPortsFromNeighborSet(routeInfo.srcSwDpid, ns);
- int groupId = targetSw.createGroup(Ids, ports);
+ List<PortNumber> portNumbers = new ArrayList<PortNumber>();
+ if (routeInfo.getSrcAdjanceySid() != null) {
+ String nodeSid = srManager.getMplsLabel(routeInfo.getSrcSwDpid());
+ List<Integer> ports = srManager.getAdacencyPorts(Integer.parseInt(nodeSid),
+ Integer.parseInt(routeInfo.getSrcAdjanceySid()));
+ for (int port: ports) {
+ portNumbers.add(PortNumber.uint32(port));
+ }
+ }
+ else {
+ portNumbers = getPortsFromNeighborSet(routeInfo.srcSwDpid, ns);
+ }
+
+ groupId = targetSw.createGroup(Ids, portNumbers);
return groupId;
}
@@ -300,6 +313,9 @@
routeInfo.addRoute(nodeId);
i++;
}
+ else if (srManager.isAdjacencySid(nodeId)) {
+ routeInfo.setSrcAdjacencySid(nodeId);
+ }
routeInfo.setFwdSwDpid(fwdSws);
// we check only the next node ID of the source router
checkNeighbor = false;
@@ -573,12 +589,17 @@
private List<Dpid> fwdSwDpids;
private List<String> route;
private int gropuId;
+ private String srcAdjSid;
public TunnelRouteInfo() {
fwdSwDpids = new ArrayList<Dpid>();
route = new ArrayList<String>();
}
+ public void setSrcAdjacencySid(String nodeId) {
+ this.srcAdjSid = nodeId;
+ }
+
private void setSrcDpid(String dpid) {
this.srcSwDpid = dpid;
}
@@ -595,6 +616,10 @@
this.gropuId = groupId;
}
+ private String getSrcAdjanceySid() {
+ return this.srcAdjSid;
+ }
+
public String getSrcSwDpid() {
return this.srcSwDpid;
}
@@ -610,6 +635,7 @@
public int getGroupId() {
return this.gropuId;
}
+
}
}