Added backend for 'show tunnel' and some minnor fixes
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java b/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java
index d544fc5..e2efa42 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/ISegmentRoutingService.java
@@ -1,9 +1,11 @@
package net.onrc.onos.apps.segmentrouting;
+import java.util.Collection;
import java.util.List;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.util.MACAddress;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelInfo;
import net.onrc.onos.core.util.Dpid;
import net.onrc.onos.core.util.IPv4Net;
@@ -58,4 +60,11 @@
* @return "true/false" depending tunnel deletion status
*/
public boolean removePolicy(String pid);
+ /**
+ * Return the collection of TunnelInfo which contains
+ * info about tunnels
+ * @return Collection<TunnelInfo>
+ */
+
+ public Collection<TunnelInfo> getTunnelTable();
}
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 9380e94..1b8a450 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -937,14 +937,14 @@
// Policy routing classes and functions
// ************************************
- class PolicyInfo {
+ public class PolicyInfo {
- String policyId;
- PacketMatch match;
- int priority;
- String tunnelId;
+ private String policyId;
+ private PacketMatch match;
+ private int priority;
+ private String tunnelId;
- PolicyInfo(String pid, PacketMatch match, int priority, String tid) {
+ public PolicyInfo(String pid, PacketMatch match, int priority, String tid) {
this.policyId = pid;
this.match = match;
this.priority = priority;
@@ -952,54 +952,63 @@
}
}
- class TunnelInfo {
- String tunnelId;
- List<Dpid> dpids;
- List<TunnelRouteInfo> routes;
+ public class TunnelInfo {
+ private String tunnelId;
+ private List<Dpid> dpids;
+ private List<TunnelRouteInfo> routes;
- TunnelInfo(String tid, List<Dpid> dpids, List<TunnelRouteInfo> routes) {
+ public TunnelInfo(String tid, List<Dpid> dpids, List<TunnelRouteInfo> routes) {
this.tunnelId = tid;
this.dpids = dpids;
this.routes = routes;
}
+ public String getTunnelId(){
+ return this.tunnelId;
+ }
+ public List<Dpid> getDpids(){
+ return this.dpids;
+ }
+ public List<TunnelRouteInfo> getRoutes(){
+ return this.routes;
+ }
}
- class TunnelRouteInfo {
+ public class TunnelRouteInfo {
- String srcSwDpid;
- List<Dpid> fwdSwDpids;
- List<String> route;
+ private String srcSwDpid;
+ private List<Dpid> fwdSwDpids;
+ private List<String> route;
- TunnelRouteInfo() {
+ public TunnelRouteInfo() {
fwdSwDpids = new ArrayList<Dpid>();
route = new ArrayList<String>();
}
- void setSrcDpid(String dpid) {
+ private void setSrcDpid(String dpid) {
this.srcSwDpid = dpid;
}
- void setFwdSwDpid(List<Dpid> dpid) {
+ private void setFwdSwDpid(List<Dpid> dpid) {
this.fwdSwDpids = dpid;
}
- void addRoute(String id) {
+ private void addRoute(String id) {
route.add(id);
}
- void setRoute(List<String> r) {
+ private void setRoute(List<String> r) {
this.route = r;
}
- String getSrcSwDpid() {
+ public String getSrcSwDpid() {
return this.srcSwDpid;
}
- List<Dpid> getFwdSwDpid() {
+ public List<Dpid> getFwdSwDpid() {
return this.fwdSwDpids;
}
- List<String> getRoute() {
+ public List<String> getRoute() {
return this.route;
}
}
@@ -1010,7 +1019,7 @@
* @return collection of TunnelInfo
*/
public Collection<TunnelInfo> getTunnelTable() {
- return tunnelTable.values();
+ return this.tunnelTable.values();
}
/**
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelInfo.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelInfo.java
new file mode 100644
index 0000000..785dde7
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelInfo.java
@@ -0,0 +1,32 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+import java.util.List;
+
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelRouteInfo;
+import net.onrc.onos.core.util.Dpid;
+
+/**
+ * This class contains tunnel info of ONOS Segement Routing App
+ * Used for rest API
+ */
+public class SegmentRouterTunnelInfo {
+ private String tunnelId;
+ private List<Dpid> nodes;
+ private List<List<String>> labelStack;
+
+ public SegmentRouterTunnelInfo (String tId, List<Dpid> dpids,
+ List<List<String>> tunnelRoutes){
+ this.tunnelId = tId;
+ this.nodes = dpids;
+ this.labelStack = tunnelRoutes;
+ }
+ public String getTunnelId (){
+ return this.tunnelId;
+ }
+ public List<Dpid> getnodes (){
+ return this.nodes;
+ }
+ public List<List<String>> getLabelStack (){
+ return this.labelStack;
+ }
+}
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
index 7bcdfa6..71cfc05 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterTunnelResource.java
@@ -15,6 +15,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelInfo;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelRouteInfo;
/**
* Base class for return router statistics
*
@@ -57,9 +67,30 @@
}
@Get("json")
- public String getTunnel() {
- String reply = "success";
+ public Object getTunnel() {
+ System.out.println("Got into getTunnel");
+ ISegmentRoutingService segmentRoutingService =
+ (ISegmentRoutingService) getContext().getAttributes().
+ get(ISegmentRoutingService.class.getCanonicalName());
+ Iterator<TunnelInfo> ttI = segmentRoutingService.getTunnelTable().iterator();
+ List<SegmentRouterTunnelInfo> infoList = new ArrayList<SegmentRouterTunnelInfo>();
+ while(ttI.hasNext()){
+ TunnelInfo tunnelInfo = ttI.next();
+ Iterator<TunnelRouteInfo>trI = tunnelInfo.getRoutes().iterator();
+ List<List<String>> labelStack = new ArrayList<List<String>>();
+ while(trI.hasNext()){
+ TunnelRouteInfo label = trI.next();
+ labelStack.add(label.getRoute());
+ }
+ SegmentRouterTunnelInfo info = new SegmentRouterTunnelInfo(tunnelInfo.getTunnelId(),
+ tunnelInfo.getDpids(), labelStack );
+ infoList.add(info);
+ //TODO Add Group/DPID
+
+ }
log.debug("getTunnel with params");
- return reply;
+ Map <String,List<SegmentRouterTunnelInfo>>result = new HashMap<String,List<SegmentRouterTunnelInfo>>();
+ result.put("tunnels", infoList);
+ return infoList;
}
}
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
index 119df92..e19df8d 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
@@ -1,6 +1,9 @@
package net.onrc.onos.apps.segmentrouting.web;
+import java.util.Iterator;
+
import net.floodlightcontroller.restserver.RestletRoutable;
+import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager;
import org.restlet.Context;
import org.restlet.Restlet;