Imporvement in Group/flow Stats (notComplete)
diff --git a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
index ead1aff..d9095d6 100644
--- a/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
+++ b/src/main/java/net/floodlightcontroller/core/web/OFFlowStatsEntryMod.java
@@ -1,10 +1,11 @@
package net.floodlightcontroller.core.web;
+import net.floodlightcontroller.core.web.serializers.OFFlowStatsEntryModSerializer;
+
import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-//@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+@JsonSerialize(using = OFFlowStatsEntryModSerializer.class)
public class OFFlowStatsEntryMod {
private OFFlowStatsEntry FlowStatsEntry = null;
@@ -15,7 +16,7 @@
this.FlowStatsEntry = FlowStatsEntry;
}
- public OFFlowStatsEntry getFlowStatsEntr() {
+ public OFFlowStatsEntry getFlowStatsEntry() {
return this.FlowStatsEntry;
}
diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
index def6a7d..8e4208c 100644
--- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
+++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java
@@ -27,6 +27,7 @@
import net.floodlightcontroller.core.annotations.LogMessageDoc;
import org.projectfloodlight.openflow.protocol.OFFeaturesReply;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
@@ -34,6 +35,7 @@
import org.projectfloodlight.openflow.protocol.OFMatchV3;
import org.projectfloodlight.openflow.protocol.OFOxmList;
import org.projectfloodlight.openflow.protocol.OFPortStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsReply;
import org.projectfloodlight.openflow.protocol.OFPortStatsReply;
import org.projectfloodlight.openflow.protocol.OFPortStatsRequest;
import org.projectfloodlight.openflow.protocol.OFStatsReply;
@@ -96,6 +98,21 @@
.setOutPort(OFPort.ANY)
.setTableId(TableId.ALL)
.setXid(sw.getNextTransactionId()).build();
+ List<OFFlowStatsEntryMod> flowStats = new ArrayList<OFFlowStatsEntryMod>();
+ try {
+ future = sw.getStatistics(req);
+ values = future.get(10, TimeUnit.SECONDS);
+ System.out.println("value\n\n\n"+ values);
+ for (OFFlowStatsEntry entry : ((OFFlowStatsReply)values.get(0)).getEntries()) {
+ OFFlowStatsEntryMod entryMod = new OFFlowStatsEntryMod(entry);
+ flowStats.add(entryMod);
+ }
+ log.debug("Switch flow Stats Entries from switch {} are {}",
+ sw.getStringId(), flowStats);
+ } catch (Exception e) {
+ log.error("Failure retrieving statistics from switch " + sw, e);
+ }
+ return flowStats;
}
else if (statType == OFStatsType.PORT){
log.debug("Switch Port Stats: req sent for all "
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 2cce2d8..f1936c2 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowStatsEntryModSerializer.java
@@ -1,6 +1,8 @@
package net.floodlightcontroller.core.web.serializers;
import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
import net.floodlightcontroller.core.web.OFFlowStatsEntryMod;
@@ -8,6 +10,13 @@
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.std.SerializerBase;
+import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
+import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
+import org.projectfloodlight.openflow.protocol.OFMatchV3;
+import org.projectfloodlight.openflow.protocol.OFOxmList;
+import org.projectfloodlight.openflow.protocol.match.MatchFields;
+import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
+import org.projectfloodlight.openflow.protocol.oxm.OFOxmIpv4DstMasked;
public class OFFlowStatsEntryModSerializer extends SerializerBase<OFFlowStatsEntryMod> {
@@ -19,7 +28,38 @@
public void serialize(OFFlowStatsEntryMod FlowStatsEntryMod, JsonGenerator jGen,
SerializerProvider sp) throws IOException,
JsonGenerationException {
+ OFFlowStatsEntry flowStatsEntry = FlowStatsEntryMod.getFlowStatsEntry();
+ OFOxmList matches = ((OFMatchV3)flowStatsEntry.getMatch()).getOxmList();
+ Set<OFFlowModFlags> flags = flowStatsEntry.getFlags();
+ jGen.writeStartObject();
+ jGen.writeNumberField("byteCount", flowStatsEntry.getByteCount().getValue());
+ jGen.writeNumberField("cookie", flowStatsEntry.getCookie().getValue());
+ jGen.writeNumberField("durationNsec", flowStatsEntry.getDurationNsec());
+ jGen.writeNumberField("durationSec", flowStatsEntry.getDurationSec());
+ jGen.writeArrayFieldStart("flags");
+ for (OFFlowModFlags flag: flags){
+ jGen.writeNullField(flag.name());;
+ }
+ jGen.writeEndArray();
+ jGen.writeNumberField("hardTimeout", flowStatsEntry.getHardTimeout());
+ jGen.writeNumberField("idleTimeout", flowStatsEntry.getIdleTimeout());
+ jGen.writeArrayFieldStart("match");
+ //jGen.writeStartObject();
+ Iterator<OFOxm<?>> match= matches.iterator();
+ while(match.hasNext()){
+ OFOxm<?> matchGeneric = match.next();
+ if (matchGeneric.getMatchField().id == MatchFields.IPV4_DST){
+
+ //jGen.writeObjectField("networkDestination", ((OFOxmIpv4DstVer13) matchGeneric).getValue());
+ }
+
+
+ }
+ jGen.writeEndArray();
+
+ jGen.writeEndObject();
}
+
}
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 918a12f..91f1262 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -312,6 +312,9 @@
IOF13Switch sw = (IOF13Switch) floodlightProvider.getMasterSwitch(
getSwId(port.getDpid().toString()));
+ if (sw == null){
+ return;
+ }
sw.addPortToGroups(port.getPortNumber());
log.debug("Add port {} to switch {}", port, dpid);