'added show router <dpid> port'
diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index a5aed26..00582cf 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -2004,26 +2004,13 @@
         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
+        #rest_type = None
         #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)
@@ -2047,6 +2034,38 @@
                                                       data,
                                                       entries2)
 
+    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' % (entries))
+    if 'routerrealtimestats' in data  and data['routerrealtimestats'] == 'port':
+        #raise error.ArgumentValidationError('\n\n\n %s' % (data))
+        combResult = []
+        portList = entries
+        for port in portList:
+            portData = port.get("port")
+            name = portData.get("stringAttributes").get('name')
+            portNo = portData.get("portNumber")
+            subnetIp = port.get("subnetIp")
+            combResult.append({
+                               'name'            :name,
+                               'portNo'           : portNo,
+                               'subnetIp'         : subnetIp,
+                               })
+        entries = combResult
+
+
     if 'realtimestats' in data and 'tabletype' in data and data['realtimestats'] == 'table':
         combResult = []
         if data['tabletype'] == 'ip':
diff --git a/cli/cli/desc/version200/core.py b/cli/cli/desc/version200/core.py
index 20e888b..df2b3f0 100755
--- a/cli/cli/desc/version200/core.py
+++ b/cli/cli/desc/version200/core.py
@@ -2526,6 +2526,21 @@
         },
 }
 
+
+ROUTER_PORT_FORMAT = {
+    'router_port' : {
+        'field-orderings' : {
+            'default' : [ 'Idx', 'name', 'portNo', 'subnetIp','adjacencySid'],
+            'scoped' : [ 'Idx', 'name', 'portNo', 'subnetIp','adjacencySid'],
+            },
+        #'fields': {
+        #    'switch'               : { 'verbose-name' : 'Switch',
+        #                                'formatter' : fmtcnv.replace_switch_with_alias
+        #                             },
+
+        },
+}
+
 """
 SWITCH_CLUSTER_FORMAT = {
     'switch-cluster' : {
diff --git a/cli/cli/desc/version200/router.py b/cli/cli/desc/version200/router.py
index c1f9728..c68f3cc 100644
--- a/cli/cli/desc/version200/router.py
+++ b/cli/cli/desc/version200/router.py
@@ -36,3 +36,66 @@
         },
     )
 }
+
+
+
+ROUTER_SHOW_REALTIME_STATS_COMMAND_DESCRIPTION = {
+    'name'                : 'show',
+    'mode'                : 'login',
+    'short-help'          : 'Show router stats via direct query to switch',
+    'no-supported'        : False,
+    'short-help'          : 'Show realtime stats for router',
+    'parent-field'        : None,
+    'obj-type'            : 'switches',
+    'args'                : (
+        {
+            'token'        : 'router',
+            'obj-type'     : 'switches',
+            'command-type' : 'display-table',
+            # 'command-type' : 'display-rest',
+        },
+        {
+            'choices' : (
+                {
+                    'field'        : 'dpid',
+                    'completion'   : 'complete-alias-choice',
+                    'type'         : 'dpid',
+                    'help-name'    : 'switch dpid or alias',
+                    'data-handler' : 'alias-to-value',
+                    'data'         : { 'detail' : 'scoped' },
+                },
+                {
+                    'token'        : 'all',
+                    'doc'          : 'reserved|all',
+                },
+            ),
+        },
+        {
+            'choices' : (
+                (
+                    {
+                        'field'      : 'routerrealtimestats',
+                        'type'       : 'enum',
+                        'values'     : (
+                                        'port',
+                                        ),
+                        'action'     : 'display-rest',
+                        'url'        : 'router/%(dpid)s/%(routerrealtimestats)s',
+                        'rest-type'  : 'dict-of-list-of-switch',
+                        'format'     : 'router_port',
+                        'short-help' : 'Show requested item by querying router/switch',
+                        'doc'        : 'switch|realtime-+',
+                    },
+                    {
+                        'field'    : 'detail',
+                        'optional' : True,
+                        'type'     : 'enum',
+                        'values'   : ('details','brief'),
+                        'doc'      : 'format|+',
+                    },
+                ),
+                
+            )
+        }
+    )
+}
diff --git a/cli/sdncon/rest/views.py b/cli/sdncon/rest/views.py
index f8d15a2..e7ba572 100755
--- a/cli/sdncon/rest/views.py
+++ b/cli/sdncon/rest/views.py
@@ -732,6 +732,21 @@
     return get_sdnplatform_response(url)        
 
 @safe_rest_view
+def do_router_stats(request, stattype, dpid):
+    """
+    This returns the subnets info about the specifed
+    router dpid. statetype should be 'port'.
+    """
+    #raise RestInvalidMethodException()
+    if request.method != 'GET':
+        raise RestInvalidMethodException()
+    #url = controller_url('core', 'switch', dpid, stattype, 'json')
+    url = "http://localhost:8080/wm/onos/segmentrouting/router/%s/%s" % (dpid, stattype)
+    #raise RestInvalidMethodException(url)
+    #url = "http://localhost:8080/wm/onos/segementrouting/router/00:00:00:00:00:00:00:01/port"
+    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 a850a10..329dc7d 100755
--- a/cli/sdncon/urls.py
+++ b/cli/sdncon/urls.py
@@ -71,6 +71,7 @@
     (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/router/(?P<dpid>[A-Za-z0-9_:.\-]+)/(?P<stattype>[A-Za-z]+)', 'sdncon.rest.views.do_router_stats'),
     (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/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
index 944bf1c..12ee18c 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/RouterStatisticsResource.java
@@ -1,23 +1,27 @@
 package net.onrc.onos.apps.segmentrouting.web;
 
 
-import java.util.List;
-import java.util.concurrent.Future;
 
-import net.floodlightcontroller.core.IFloodlightProviderService;
-import net.floodlightcontroller.core.IOFSwitch;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.MutableTopology;
+import net.onrc.onos.core.topology.Port;
+import net.onrc.onos.core.topology.Switch;
 import net.onrc.onos.core.util.Dpid;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 
-import org.apache.commons.codec.binary.Hex;
 import org.projectfloodlight.openflow.util.HexString;
 import org.restlet.resource.ServerResource;
 import org.restlet.representation.Representation;
 import org.restlet.resource.Get;
 
-import com.esotericsoftware.minlog.Log;
-
 import static net.onrc.onos.core.topology.web.TopologyResource.eval;
 /**
  * Base class for return router statistics
@@ -34,7 +38,6 @@
     public Representation retrieve() {
         String routerId = (String) getRequestAttributes().get("routerId");
         String statsType = (String) getRequestAttributes().get("statsType");
-        //if (routerId == null && statsType == null){
         ITopologyService topologyService =
                 (ITopologyService) getContext().getAttributes()
                 .get(ITopologyService.class.getCanonicalName());
@@ -45,31 +48,53 @@
             if (routerId == null && statsType == null){
                 return eval(toRepresentation(mutableTopology.getSwitches(), null));
         }
-            else if(routerId != null && statsType == "port"){
-                Log.debug("\n\n\nGot router port stats request\n\n\n");
-                System.out.println("\n\n\nGot router port stats request\n\n\n");
-                Long rId = HexString.toLong(routerId);
-                return eval(toRepresentation(mutableTopology.getSwitch(new Dpid(rId)), null));
+            else if(routerId != null && statsType.equals("port")){
+                Switch sw = mutableTopology
+                .getSwitch(new Dpid(HexString.toLong(routerId)));
+                if(sw ==null){
+                    //TODO: Add exception
+                    return null;
+                }
+                Map <String, List<SegmentRouterPortInfo>> result = new HashMap <String, List<SegmentRouterPortInfo>>();
+                List<SegmentRouterPortInfo> listPortInfo = new ArrayList<SegmentRouterPortInfo>();
+                Collection<Port> portList =sw.getPorts();
+                String subnets = null;
+                if (sw.getAllStringAttributes().containsKey("subnets")){
+                    subnets = sw.getAllStringAttributes().get("subnets");
+                    JSONArray subnetArray = JSONArray.fromObject(subnets);
+                    Iterator pI = portList.iterator();
+                    while(pI.hasNext()){
+                        Port p = (Port) pI.next();
+                        Iterator sI = subnetArray.iterator();
+                        String subnet = null;
+                        while(sI.hasNext()){
+                            JSONObject portSubnetIp = (JSONObject) sI.next();
+                            subnet = null;
+                            if(portSubnetIp.getString("portNo").equals(p.getNumber().toString())){
+                                subnet = portSubnetIp.getString("subnetIp");
+                                break;
+                            }
+                        }
+                        listPortInfo.add( new SegmentRouterPortInfo(subnet,p));
+                    }
+                    result.put(routerId, listPortInfo);
+                    return eval(toRepresentation(result,null));
+                }
+                else{
+                    Iterator pI = portList.iterator();
+                    while(pI.hasNext()){
+                        Port p = (Port) pI.next();
+                        String subnet = null;
+                        listPortInfo.add( new SegmentRouterPortInfo(subnet,p));
+                    }
+                    result.put(routerId, listPortInfo);
+                    return eval(toRepresentation(result,null));
+                }
             }
         } finally {
             mutableTopology.releaseReadLock();
         }
-      //  }
-        /*else if(routerId != null && statsType == "port"){
-            Long rId = HexString.toLong(routerId);
-            IFloodlightProviderService floodlightProvider =
-                    (IFloodlightProviderService) getContext().getAttributes().
-                    get(IFloodlightProviderService.class.getCanonicalName());
-            IOFSwitch sw = floodlightProvider.getSwitches().get(rId);
-            Future<List<OFStatsReply>> future;
-            List<OFStatsReply> values = null;
-            
-        }*/
+    //Should Never get to this point.
     return null;
     }
-    
-        
- 
-    
-
 }
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPortInfo.java b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPortInfo.java
new file mode 100644
index 0000000..a25d4de
--- /dev/null
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/web/SegmentRouterPortInfo.java
@@ -0,0 +1,31 @@
+package net.onrc.onos.apps.segmentrouting.web;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import net.onrc.onos.core.topology.Port;
+
+/**
+ * This class represent the the port info of the segmentRouter
+ * for rest output.
+ */
+
+public class SegmentRouterPortInfo {
+    //TODO set attributes to private and provide setter and getter.
+    public String subnetIp= null;
+    //private int portNo;
+    public Port  port = null;
+    
+    public SegmentRouterPortInfo(String ssubnets, Port pport){
+        this.port = pport;
+        //this.portNo = portNo;
+        this.subnetIp = ssubnets;
+    }
+
+    public void setInfo(String subnetIp, Port p) {
+        this.port = p;
+        this.subnetIp = subnetIp;
+        
+    }
+
+}