added 'show router' command in CLI
diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index ad709f4..a9ebf0a 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -1974,10 +1974,26 @@
print "command_display_rest: result ", result
entries = json.loads(result)
-
+ if 'router' in data and data['router'] == 'router':
+ combResult = []
+ for entry in entries:
+ attributes = entry.get('stringAttributes')
+ #raise error.ArgumentValidationError('\n\n\n %s' % (attributes))
+ combResult.append({
+ 'dpid' : entry.get('dpid'),
+ 'routerIP' : attributes['routerIp'],
+ 'name' : attributes['name'],
+ 'isEdgeRouter' : attributes['isEdgeRouter'],
+ 'routerMac' : attributes['routerMac'],
+ 'nodeSId' : attributes['nodeSid'],
+ })
+ entries = combResult
+ #raise error.ArgumentValidationError('\n\n\n %s' % (attributes))
#if 'realtimestats' in data and data['realtimestats'] == 'group':
entries2 = None
+
+
if 'realtimestats' in data and data['realtimestats'] == 'group':
url2 = "http://%s/rest/v1/" % sdnsh.controller + ("realtimestats/groupdesc/%(dpid)s/" % data)
result2 = sdnsh.store.rest_simple_request(url2)
@@ -2024,7 +2040,6 @@
'actions' : actions,
})
elif data['tabletype'] == 'mpls':
- import unicodedata
for ipTableEntry in entries:
match = ipTableEntry['match']
mplsTc = '*'
diff --git a/cli/cli/desc/version200/core.py b/cli/cli/desc/version200/core.py
index 0973daf..3c799f7 100755
--- a/cli/cli/desc/version200/core.py
+++ b/cli/cli/desc/version200/core.py
@@ -2494,6 +2494,37 @@
},
}
+
+
+
+ROUTER_FORMAT = {
+ 'router' : {
+ 'field-orderings' : {
+ 'default' : ['dpid','name', 'routerIP','routerMac','isEdgeRouter','nodeSId'
+ ],
+ },
+ 'fields': {
+ 'dpid' : { 'verbose-name' : 'RouterDPID',
+ #'formatter' : fmtcnv.replace_switch_with_alias
+ },
+ 'name' : { 'verbose-name' : 'RouterName',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ 'routerIP' : { 'verbose-name' : 'RouterIP',
+ },
+ 'routerMac' : { 'verbose-name' : 'RouterMac',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ 'isEdgeRouter' : { 'verbose-name' : 'isEdgeRouter',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ 'nodeSId' : { 'verbose-name' : 'nodeSId',
+ #'formatter' : fmtcnv.decode_port_counter
+ },
+ }
+ },
+}
+
"""
SWITCH_CLUSTER_FORMAT = {
'switch-cluster' : {
diff --git a/cli/sdncon/rest/views.py b/cli/sdncon/rest/views.py
index 545fe98..78f88d2 100755
--- a/cli/sdncon/rest/views.py
+++ b/cli/sdncon/rest/views.py
@@ -722,6 +722,16 @@
return get_sdnplatform_response(url)
@safe_rest_view
+def do_routers(request):
+ if onos == 0:
+ url = controller_url("core", "controller", "switches", "json")
+ else:
+ url = controller_url("onos","segmentrouting", "routers")
+ if request.META['QUERY_STRING']:
+ url += '?' + request.META['QUERY_STRING']
+ return get_sdnplatform_response(url)
+
+@safe_rest_view
def do_mastership(request):
url = controller_url("onos", "registry", "switches" ,"json")
#url = "http://127.0.0.1:8080/wm/onos/registry/switches/json"
diff --git a/cli/sdncon/urls.py b/cli/sdncon/urls.py
index 5d522de..a850a10 100755
--- a/cli/sdncon/urls.py
+++ b/cli/sdncon/urls.py
@@ -70,6 +70,7 @@
# REST API VNS/device information
(r'^rest/v1/device', 'sdncon.rest.views.do_device'),
(r'^rest/v1/switches', 'sdncon.rest.views.do_switches'),
+ (r'^rest/v1/routers', 'sdncon.rest.views.do_routers'),
(r'^rest/v1/links', 'sdncon.rest.views.do_links'),
(r'^rest/v1/mastership', 'sdncon.rest.views.do_mastership'),
(r'^rest/v1/vns/device-interface', 'sdncon.rest.views.do_vns_device_interface'),
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
index f413fd2..6080cb4 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -39,7 +39,6 @@
List<OFInstruction> instructions = flowStatsEntry.getInstructions();
jGen.writeStartObject();
- //System.out.println("flowstats:\n\n\n"+ flowStatsEntry);
jGen.writeNumberField("byteCount", flowStatsEntry.getByteCount().getValue());
jGen.writeNumberField("packetCount", flowStatsEntry.getPacketCount().getValue());
jGen.writeNumberField("priority", flowStatsEntry.getPriority());
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 0a90a89..e3d3470 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -27,9 +27,11 @@
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.core.util.SingletonTask;
+import net.floodlightcontroller.restserver.IRestApiService;
import net.floodlightcontroller.threadpool.IThreadPoolService;
import net.onrc.onos.api.packet.IPacketListener;
import net.onrc.onos.api.packet.IPacketService;
+import net.onrc.onos.apps.segmentrouting.web.SegmentRoutingWebRoutable;
import net.onrc.onos.core.flowprogrammer.IFlowPusherService;
import net.onrc.onos.core.intent.Path;
import net.onrc.onos.core.main.config.IConfigInfoService;
@@ -80,7 +82,8 @@
private static final Logger log = LoggerFactory
.getLogger(SegmentRoutingManager.class);
- private ITopologyService topologyService;
+ private ITopologyService topologyService;
+ private IRestApiService restApi;
private IPacketService packetService;
private MutableTopology mutableTopology;
private ConcurrentLinkedQueue<IPv4> ipPacketQueue;
@@ -127,6 +130,7 @@
l.add(IPacketService.class);
l.add(IFlowPusherService.class);
l.add(ITopologyService.class);
+ l.add(IRestApiService.class);
return l;
@@ -147,6 +151,8 @@
graphs = new HashMap<Switch, ECMPShortestPathGraph>();
linksDown = new HashMap<String, LinkData>();
linksToAdd = new HashMap<String, LinkData>();
+ //topologyLinks = new HashSet<LinkData>();
+ restApi = context.getServiceImpl(IRestApiService.class);
topologyEventQueue = new ConcurrentLinkedQueue<TopologyEvents>();
this.packetService = context.getServiceImpl(IPacketService.class);
@@ -158,6 +164,7 @@
@Override
public void startUp(FloodlightModuleContext context) throws FloodlightModuleException {
ScheduledExecutorService ses = threadPool.getScheduledExecutor();
+ restApi.addRestletRoutable(new SegmentRoutingWebRoutable());
discoveryTask = new SingletonTask(ses, new Runnable() {
@Override
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
new file mode 100644
index 0000000..8e79639
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
@@ -0,0 +1,42 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+import java.util.HashMap;
+
+import net.floodlightcontroller.core.web.ControllerSwitchesResource;
+import net.onrc.onos.core.topology.ITopologyService;
+import net.onrc.onos.core.topology.MutableTopology;
+
+import org.restlet.resource.ResourceException;
+import org.restlet.resource.ServerResource;
+import org.restlet.representation.Representation;
+import org.restlet.resource.Get;
+import static net.onrc.onos.core.topology.web.TopologyResource.eval;
+/**
+ * Base class for return router statistics
+ *
+ */
+public class RouterStatisticsResource extends ServerResource {
+ /**
+ * Gets the switches and ports information from the network topology.
+ *
+ * @return a Representation of a Collection of switches from the network
+ * topology. Each switch contains the switch ports.
+ */
+ @Get("json")
+ public Representation retrieve() {
+ ITopologyService topologyService =
+ (ITopologyService) getContext().getAttributes()
+ .get(ITopologyService.class.getCanonicalName());
+
+ MutableTopology mutableTopology = topologyService.getTopology();
+ mutableTopology.acquireReadLock();
+ try {
+ return eval(toRepresentation(mutableTopology.getSwitches(), null));
+ } finally {
+ mutableTopology.releaseReadLock();
+ }
+ }
+
+
+
+}
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
new file mode 100644
index 0000000..3e121d6
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRoutingWebRoutable.java
@@ -0,0 +1,28 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+import org.restlet.Context;
+import org.restlet.Restlet;
+import org.restlet.routing.Router;
+
+import net.floodlightcontroller.restserver.RestletRoutable;
+import net.onrc.onos.core.topology.web.SwitchesResource;
+/**
+ * Handle all URI's for SegmentRouter web
+ *
+ */
+
+public class SegmentRoutingWebRoutable implements RestletRoutable {
+
+ @Override
+ public Restlet getRestlet(Context context) {
+ Router router = new Router(context);
+ router.attach("/routers", SwitchesResource.class);
+ return router;
+ }
+
+ @Override
+ public String basePath() {
+ return "/wm/onos/segmentrouting";
+ }
+
+}