added groupAction in group stats and some other incomplete stuff
diff --git a/cli/cli/c_actions.py b/cli/cli/c_actions.py
index 01dbc50..a5aed26 100755
--- a/cli/cli/c_actions.py
+++ b/cli/cli/c_actions.py
@@ -2177,6 +2177,9 @@
outport = '*'
if 'OUTPPUT' in groupDescEntry['bucketsActions'][bucketId]:
outport = groupDescEntry['bucketsActions'][bucketId]['OUTPPUT']
+ goToGroup = '*'
+ if 'goToGroup' in groupDescEntry['bucketsActions'][bucketId]:
+ goToGroup = groupDescEntry['bucketsActions'][bucketId]['goToGroup']
combResult.append({
'groupid' : groupId,
'grouptype' : groupDescEntry['groupType'],
@@ -2189,6 +2192,7 @@
'pushmpls' : pushmpls,
'popmpls' : popmpls,
'outport' : outport,
+ 'goToGroup' : goToGroup,
})
entries = combResult
#
diff --git a/cli/cli/desc/version200/core.py b/cli/cli/desc/version200/core.py
index bb48a7c..20e888b 100755
--- a/cli/cli/desc/version200/core.py
+++ b/cli/cli/desc/version200/core.py
@@ -2336,12 +2336,12 @@
'bucketpktcnt', 'bucketbytecnt',
'setsrcmac', 'setdstmac',
'pushmpls', 'popmpls',
- 'outport' ],
+ 'outport','goToGroup'],
'scoped' : [ 'Idx', 'groupid', 'grouptype', 'totalpktcnt', 'totalbytecnt',
'bucketpktcnt', 'bucketbytecnt',
'setsrcmac', 'setdstmac',
'pushmpls', 'popmpls',
- 'outport' ],
+ 'outport','goToGroup' ],
},
'fields': {
'groupid' : { 'verbose-name' : 'Group Id',
@@ -2370,6 +2370,8 @@
},
'outport' : { 'verbose-name' : 'outport',
},
+ 'goToGroup' : { 'verbose-name' : 'goToGroup',
+ },
}
},
}
diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
index d4f214a..dadf82f 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFGroupDescStatsEntryModSerializer.java
@@ -59,7 +59,9 @@
else if(action.getType().compareTo(OFActionType.POP_MPLS) == 0){
jGen.writeStringField("POP_MPLS", "True");
}
-
+ else if(action.getType().compareTo(OFActionType.GROUP) == 0){
+ jGen.writeNumberField("goToGroup", ((OFActionGroup)action).getGroup().getGroupNumber());
+ }
}
jGen.writeEndObject();
}
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 8e79639..944bf1c 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,15 +1,23 @@
package net.onrc.onos.apps.segmentrouting.web;
-import java.util.HashMap;
-import net.floodlightcontroller.core.web.ControllerSwitchesResource;
+import java.util.List;
+import java.util.concurrent.Future;
+
+import net.floodlightcontroller.core.IFloodlightProviderService;
+import net.floodlightcontroller.core.IOFSwitch;
import net.onrc.onos.core.topology.ITopologyService;
import net.onrc.onos.core.topology.MutableTopology;
+import net.onrc.onos.core.util.Dpid;
-import org.restlet.resource.ResourceException;
+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
@@ -17,25 +25,50 @@
*/
public class RouterStatisticsResource extends ServerResource {
/**
- * Gets the switches and ports information from the network topology.
+ * Gets the switches/routers and ports information from the network topology.
*
- * @return a Representation of a Collection of switches from the network
+ * @return a Representation of a Collection of switches/routers from the network
* topology. Each switch contains the switch ports.
*/
@Get("json")
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()
+ (ITopologyService) getContext().getAttributes()
.get(ITopologyService.class.getCanonicalName());
MutableTopology mutableTopology = topologyService.getTopology();
mutableTopology.acquireReadLock();
try {
- return eval(toRepresentation(mutableTopology.getSwitches(), null));
+ 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));
+ }
} 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;
+
+ }*/
+ return null;
}
+
+
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 3e121d6..668a1ca 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
@@ -16,7 +16,9 @@
@Override
public Restlet getRestlet(Context context) {
Router router = new Router(context);
- router.attach("/routers", SwitchesResource.class);
+ //TODO: rewrite SwitchesResource for router specific info.
+ router.attach("/routers", RouterStatisticsResource.class);
+ router.attach("/router/{routerId}/{statsType}", RouterStatisticsResource.class);
return router;
}