OpenFlow 1.0 support completed
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / OF10StatsReplyMessageFactory.java
index 00a245cfb103eb72bb42c0fe805efc61aabb01de..198f3ca6b5e239b674102d8238d06e8d219b4906 100644 (file)
@@ -8,6 +8,7 @@ import java.util.ArrayList;
 import java.util.List;\r
 \r
 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.OF10ActionsDeserializer;\r
 import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchDeserializer;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
@@ -66,25 +67,23 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
         int type = rawMessage.readUnsignedShort();\r
         builder.setType(MultipartType.forValue(type));\r
         builder.setFlags(new MultipartRequestFlags((rawMessage.readUnsignedShort() & 0x01) != 0));\r
-        while (rawMessage.readableBytes() > 0) {\r
-            switch (type) {\r
-            case 0:  builder.setMultipartReplyBody(setDesc(rawMessage));\r
+        switch (type) {\r
+        case 0:  builder.setMultipartReplyBody(setDesc(rawMessage));\r
             break;\r
-            case 1:  builder.setMultipartReplyBody(setFlow(rawMessage));\r
+        case 1:  builder.setMultipartReplyBody(setFlow(rawMessage));\r
             break;\r
-            case 2:  builder.setMultipartReplyBody(setAggregate(rawMessage));\r
+        case 2:  builder.setMultipartReplyBody(setAggregate(rawMessage));\r
             break;\r
-            case 3:  builder.setMultipartReplyBody(setTable(rawMessage));\r
+        case 3:  builder.setMultipartReplyBody(setTable(rawMessage));\r
             break;         \r
-            case 4:  builder.setMultipartReplyBody(setPortStats(rawMessage));\r
+        case 4:  builder.setMultipartReplyBody(setPortStats(rawMessage));\r
             break;\r
-            case 5:  builder.setMultipartReplyBody(setQueue(rawMessage));\r
+        case 5:  builder.setMultipartReplyBody(setQueue(rawMessage));\r
             break;         \r
-            case 0xFFFF: builder.setMultipartReplyBody(setExperimenter(rawMessage));\r
+        case 0xFFFF: builder.setMultipartReplyBody(setExperimenter(rawMessage));\r
+            break;\r
+        default: \r
             break;\r
-            default: \r
-                break;\r
-            }\r
         }\r
         return builder.build();\r
     }\r
@@ -117,14 +116,14 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
     }\r
     \r
     private static MultipartReplyFlow setFlow(ByteBuf input) {\r
-        final byte PADDING_IN_FLOW_STATS_HEADER_01 = 1;\r
+        final byte PADDING_IN_FLOW_STATS_HEADER = 1;\r
         final byte PADDING_IN_FLOW_STATS_HEADER_02 = 6;\r
         MultipartReplyFlowBuilder flowBuilder = new MultipartReplyFlowBuilder();\r
         List<FlowStats> flowStatsList = new ArrayList<>();\r
         FlowStatsBuilder flowStatsBuilder = new FlowStatsBuilder();\r
-        int length = input.readUnsignedShort();\r
+        input.skipBytes(Short.SIZE / Byte.SIZE);\r
         flowStatsBuilder.setTableId(input.readUnsignedByte());\r
-        input.skipBytes(PADDING_IN_FLOW_STATS_HEADER_01);\r
+        input.skipBytes(PADDING_IN_FLOW_STATS_HEADER);\r
         flowStatsBuilder.setMatchV10(OF10MatchDeserializer.createMatchV10(input));\r
         flowStatsBuilder.setDurationSec(input.readUnsignedInt());\r
         flowStatsBuilder.setDurationNsec(input.readUnsignedInt());\r
@@ -141,8 +140,7 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
         byte[] byteCount = new byte[Long.SIZE/Byte.SIZE];\r
         input.readBytes(byteCount);\r
         flowStatsBuilder.setByteCount(new BigInteger(byteCount));\r
-        //TODO - actions\r
-        //flowStatsBuilder.setActionsList(OF10ActionsDeserializer.)\r
+        flowStatsBuilder.setActionsList(OF10ActionsDeserializer.createActionsList(input));\r
         flowStatsList.add(flowStatsBuilder.build());\r
         flowBuilder.setFlowStats(new ArrayList<>(flowStatsList));\r
         flowStatsList.clear();\r
@@ -179,7 +177,6 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
         byte[] matchedCount = new byte[Long.SIZE/Byte.SIZE];\r
         input.readBytes(matchedCount);\r
         tableStatsBuilder.setMatchedCount(new BigInteger(matchedCount));\r
-        \r
         tableStatsList.add(tableStatsBuilder.build());\r
         builder.setTableStats(new ArrayList<>(tableStatsList));\r
         tableStatsList.clear();\r
@@ -187,12 +184,12 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
     }\r
     \r
     private static MultipartReplyPortStats setPortStats(ByteBuf input) {\r
-        final byte PADDING_IN_PORT_STATS_HEADER = 4;\r
+        final byte PADDING_IN_PORT_STATS_HEADER = 6;\r
         MultipartReplyPortStatsBuilder builder = new MultipartReplyPortStatsBuilder();\r
         PortStatsBuilder portStatsBuilder = new PortStatsBuilder();\r
         List<PortStats> portStatsList = new ArrayList<>();\r
         while (input.readableBytes() > 0) {\r
-            portStatsBuilder.setPortNo(input.readUnsignedInt());\r
+            portStatsBuilder.setPortNo(new Long(input.readUnsignedShort()));\r
             input.skipBytes(PADDING_IN_PORT_STATS_HEADER);\r
             \r
             byte[] rxPackets = new byte[Long.SIZE/Byte.SIZE];\r
@@ -243,9 +240,6 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
             input.readBytes(collisions);\r
             portStatsBuilder.setCollisions(new BigInteger(collisions));\r
             \r
-            portStatsBuilder.setDurationSec(input.readUnsignedInt());\r
-            portStatsBuilder.setDurationNsec(input.readUnsignedInt());\r
-            portStatsList.add(portStatsBuilder.build());\r
         }\r
         builder.setPortStats(new ArrayList<>(portStatsList));\r
         portStatsList.clear();\r
@@ -253,12 +247,14 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
     }\r
     \r
     private static MultipartReplyQueue setQueue(ByteBuf input) {\r
+        final byte PADDING_IN_QUEUE_HEADER = 2;\r
         MultipartReplyQueueBuilder builder = new MultipartReplyQueueBuilder();\r
         QueueStatsBuilder queueStatsBuilder = new QueueStatsBuilder();\r
         List<QueueStats> queueStatsList = new ArrayList<>();\r
         \r
         while (input.readableBytes() > 0) {\r
-            queueStatsBuilder.setPortNo(input.readUnsignedInt());\r
+            queueStatsBuilder.setPortNo(new Long(input.readUnsignedShort()));\r
+            input.skipBytes(PADDING_IN_QUEUE_HEADER);\r
             queueStatsBuilder.setQueueId(input.readUnsignedInt());\r
 \r
             byte[] txBytes = new byte[Long.SIZE/Byte.SIZE];\r
@@ -273,8 +269,6 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
             input.readBytes(txErrors);\r
             queueStatsBuilder.setTxErrors(new BigInteger(txErrors));\r
 \r
-            queueStatsBuilder.setDurationSec(input.readUnsignedInt());\r
-            queueStatsBuilder.setDurationNsec(input.readUnsignedInt());\r
             queueStatsList.add(queueStatsBuilder.build());\r
         }\r
         builder.setQueueStats(new ArrayList<>(queueStatsList));\r
@@ -285,7 +279,6 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
     private static MultipartReplyExperimenter setExperimenter(ByteBuf input) {\r
         MultipartReplyExperimenterBuilder builder = new MultipartReplyExperimenterBuilder();\r
         builder.setExperimenter(input.readUnsignedInt());\r
-        builder.setExpType(input.readUnsignedInt());\r
         byte[] data = new byte[Long.SIZE/Byte.SIZE];\r
         input.readBytes(data);\r
         builder.setData(data);\r