From 169b299824c47edc0c842b162bbd986ad50bf788 Mon Sep 17 00:00:00 2001 From: Ryan Izard <rizard@g.clemson.edu> Date: Sun, 21 Dec 2014 16:07:56 -0500 Subject: [PATCH] more --- .../core/web/SwitchResourceBase.java | 79 ++++++++++++------- .../web/serializers/OFFlowModSerializer.java | 4 +- .../web/serializers/StatsReplySerializer.java | 7 +- .../resources/web/js/models/switchmodel.js | 7 ++ 4 files changed, 62 insertions(+), 35 deletions(-) diff --git a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java index bd146a72b..358d73717 100644 --- a/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java +++ b/src/main/java/net/floodlightcontroller/core/web/SwitchResourceBase.java @@ -35,6 +35,7 @@ import org.projectfloodlight.openflow.protocol.OFFeaturesRequest; import org.projectfloodlight.openflow.protocol.OFStatsReply; import org.projectfloodlight.openflow.protocol.OFStatsRequest; import org.projectfloodlight.openflow.protocol.OFStatsType; +import org.projectfloodlight.openflow.protocol.OFVersion; import org.restlet.resource.ResourceException; import org.restlet.resource.ServerResource; import org.slf4j.Logger; @@ -119,50 +120,68 @@ public class SwitchResourceBase extends ServerResource { req = sw.getOFFactory().buildDescStatsRequest() .build(); break; - case GROUP: - req = sw.getOFFactory().buildGroupStatsRequest() - .build(); + case GROUP: + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_10) > 0) { + req = sw.getOFFactory().buildGroupStatsRequest() + .build(); + } break; - + case METER: - req = sw.getOFFactory().buildMeterStatsRequest() - .setMeterId(OFMeterSerializerVer13.ALL_VAL) - .build(); + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_13) >= 0) { + req = sw.getOFFactory().buildMeterStatsRequest() + .setMeterId(OFMeterSerializerVer13.ALL_VAL) + .build(); + } break; - - case GROUP_DESC: - req = sw.getOFFactory().buildGroupDescStatsRequest() - .build(); + + case GROUP_DESC: + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_10) > 0) { + req = sw.getOFFactory().buildGroupDescStatsRequest() + .build(); + } break; - + case GROUP_FEATURES: - req = sw.getOFFactory().buildGroupFeaturesStatsRequest() - .build(); + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_10) > 0) { + req = sw.getOFFactory().buildGroupFeaturesStatsRequest() + .build(); + } break; - + case METER_CONFIG: - req = sw.getOFFactory().buildMeterConfigStatsRequest() - .build(); + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_13) >= 0) { + req = sw.getOFFactory().buildMeterConfigStatsRequest() + .build(); + } break; - + case METER_FEATURES: - req = sw.getOFFactory().buildMeterFeaturesStatsRequest() - .build(); + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_13) >= 0) { + req = sw.getOFFactory().buildMeterFeaturesStatsRequest() + .build(); + } break; - + case TABLE: - req = sw.getOFFactory().buildTableStatsRequest() - .build(); + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_10) > 0) { + req = sw.getOFFactory().buildTableStatsRequest() + .build(); + } break; - - case TABLE_FEATURES: - req = sw.getOFFactory().buildTableFeaturesStatsRequest() - .build(); + + case TABLE_FEATURES: + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_10) > 0) { + req = sw.getOFFactory().buildTableFeaturesStatsRequest() + .build(); + } break; case PORT_DESC: - req = sw.getOFFactory().buildPortDescStatsRequest() - .build(); - break; + if (sw.getOFFactory().getVersion().compareTo(OFVersion.OF_13) >= 0) { + req = sw.getOFFactory().buildPortDescStatsRequest() + .build(); + } + break; case EXPERIMENTER: //TODO @Ryan support new OF1.1+ stats types default: log.error("Stats Request Type {} not implemented yet", statType.name()); diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowModSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowModSerializer.java index a0ebe5b00..42d9afa8f 100644 --- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowModSerializer.java +++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFFlowModSerializer.java @@ -27,7 +27,6 @@ import com.fasterxml.jackson.databind.SerializerProvider; import org.projectfloodlight.openflow.protocol.OFFlowMod; import org.projectfloodlight.openflow.protocol.OFVersion; -import org.projectfloodlight.openflow.protocol.ver10.OFFlowModFlagsSerializerVer10; import org.projectfloodlight.openflow.protocol.ver11.OFFlowModFlagsSerializerVer11; import org.projectfloodlight.openflow.protocol.ver12.OFFlowModFlagsSerializerVer12; import org.projectfloodlight.openflow.protocol.ver13.OFFlowModFlagsSerializerVer13; @@ -70,7 +69,6 @@ public class OFFlowModSerializer extends JsonSerializer<OFFlowMod> { switch (flowMod.getVersion()) { case OF_10: - jGen.writeNumberField("flags", OFFlowModFlagsSerializerVer10.toWireValue(flowMod.getFlags())); break; case OF_11: jGen.writeNumberField("flags", OFFlowModFlagsSerializerVer11.toWireValue(flowMod.getFlags())); @@ -93,7 +91,9 @@ public class OFFlowModSerializer extends JsonSerializer<OFFlowMod> { // handle OF1.1+ instructions with actions within if (flowMod.getVersion() == OFVersion.OF_10) { + jGen.writeObjectFieldStart("actions"); OFActionListSerializer.serializeActions(jGen, flowMod.getActions()); + jGen.writeEndObject(); } else { OFInstructionListSerializer.serializeInstructionList(jGen, flowMod.getInstructions()); } // end not-empty instructions (else) diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java index b7a34c277..9bc3bcb4b 100644 --- a/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java +++ b/src/main/java/net/floodlightcontroller/core/web/serializers/StatsReplySerializer.java @@ -85,7 +85,6 @@ import org.projectfloodlight.openflow.protocol.ver12.OFFlowModFlagsSerializerVer import org.projectfloodlight.openflow.protocol.ver12.OFPortFeaturesSerializerVer12; import org.projectfloodlight.openflow.protocol.ver11.OFFlowModFlagsSerializerVer11; import org.projectfloodlight.openflow.protocol.ver11.OFPortFeaturesSerializerVer11; -import org.projectfloodlight.openflow.protocol.ver10.OFFlowModFlagsSerializerVer10; import org.projectfloodlight.openflow.protocol.ver10.OFPortFeaturesSerializerVer10; import org.projectfloodlight.openflow.protocol.ver13.OFPortStateSerializerVer13; import org.projectfloodlight.openflow.protocol.ver12.OFPortStateSerializerVer12; @@ -741,7 +740,7 @@ public class StatsReplySerializer extends JsonSerializer<StatsReply> { jGen.writeNumberField("hardTimeoutSec", entry.getHardTimeout()); switch (entry.getVersion()) { case OF_10: - jGen.writeNumberField("flags", OFFlowModFlagsSerializerVer10.toWireValue(entry.getFlags())); + // flags not supported break; case OF_11: jGen.writeNumberField("flags", OFFlowModFlagsSerializerVer11.toWireValue(entry.getFlags())); @@ -764,7 +763,9 @@ public class StatsReplySerializer extends JsonSerializer<StatsReply> { // handle OF1.1+ instructions with actions within if (entry.getVersion() == OFVersion.OF_10) { + jGen.writeObjectFieldStart("actions"); OFActionListSerializer.serializeActions(jGen, entry.getActions()); + jGen.writeEndObject(); } else { OFInstructionListSerializer.serializeInstructionList(jGen, entry.getInstructions()); } @@ -776,7 +777,7 @@ public class StatsReplySerializer extends JsonSerializer<StatsReply> { } // end method public static void serializeDescReply(List<OFDescStatsReply> descReplies, JsonGenerator jGen) throws IOException, JsonProcessingException{ - OFDescStatsReply descReply = descReplies.get(0); // There are only one descReply from the switch + OFDescStatsReply descReply = descReplies.get(0); // There is only one descReply from the switch jGen.writeObjectFieldStart("desc"); jGen.writeStringField("version", descReply.getVersion().toString()); //return the enum name jGen.writeStringField("manufacturerDescription", descReply.getMfrDesc()); diff --git a/src/main/resources/web/js/models/switchmodel.js b/src/main/resources/web/js/models/switchmodel.js index cb1452064..bbeabf80d 100644 --- a/src/main/resources/web/js/models/switchmodel.js +++ b/src/main/resources/web/js/models/switchmodel.js @@ -21,6 +21,7 @@ window.Switch = Backbone.Model.extend({ hardwareDescription: '', manufacturerDescription: '', serialNumber: '', + version: '', softwareDescription: '', flowCount: ' ', packetCount: ' ', @@ -237,6 +238,12 @@ window.Switch = Backbone.Model.extend({ },f); } else { f.applyActionText = "----"; + f.writeActionText = "n/a "; // need extra space at end + f.clearActionText = "n/a"; + f.writeMetadataText = "n/a"; + f.gotoGroupText = "n/a"; + f.gotoMeterText = "n/a"; + f.experimenterText = "n/a"; } // build human-readable instrucions -- GitLab