Fixed MultipartReply MeterFeatures 91/3091/1
authorMichal Polkorab <michal.polkorab@pantheon.sk>
Tue, 26 Nov 2013 09:41:14 +0000 (10:41 +0100)
committerMichal Polkorab <michal.polkorab@pantheon.sk>
Tue, 26 Nov 2013 09:42:06 +0000 (10:42 +0100)
Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
openflow-protocol-api/src/main/yang/openflow-protocol.yang
openflow-protocol-api/src/main/yang/openflow-types.yang
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartReplyMessageFactory.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartReplyMessageFactoryTest.java

index 81f2f601332671b08e99531a16c09213bfaa63ed..cedb988d77c4a9bb18aa2fa9e4e3e750bc257adf 100644 (file)
@@ -945,7 +945,7 @@ module openflow-protocol {
                             type uint32;\r
                         }\r
                         leaf band-types {\r
-                            type oft:meter-band-type;\r
+                            type oft:meter-band-type-bitmap;\r
                         }\r
                         leaf capabilities {\r
                             type oft:meter-flags;\r
index 473966054d3d7d8fcc809c1d172a3587fe1b77e9..732933ed7d76a683d987bc3d1276036d9f160535 100644 (file)
@@ -797,6 +797,20 @@ module openflow-types {
             }
         }
     }
+    
+    typedef meter-band-type-bitmap {
+        /* ofp_meter_band_type */
+        type bits {
+            bit OFPMBT_DROP {
+              position 1;
+              description "Drop packet. ";
+            }
+            bit OFPMBT_DSCP_REMARK {
+              position 2;
+              description "Remark DSCP in the IP header. ";
+            }
+        }
+    }
 
        typedef meter {
                /* ofp_meter - Meter numbering. Flow meters can use any number up to OFPM_MAX*/
index beaf8eaf4fb5929a2896396b99511fa02b20a05d..86233fa90d2386daeb7ed98832da63da12d29dce 100644 (file)
@@ -31,6 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\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
@@ -496,7 +497,7 @@ public class MultipartReplyMessageFactory implements OFDeserializer<MultipartRep
         final byte PADDING_IN_METER_FEATURES_HEADER = 2;\r
         MultipartReplyMeterFeaturesBuilder builder = new MultipartReplyMeterFeaturesBuilder();\r
         builder.setMaxMeter(input.readUnsignedInt());\r
-        builder.setBandTypes(MeterBandType.forValue(input.readInt()));\r
+        builder.setBandTypes(createMeterBandsBitmap(input.readUnsignedInt()));\r
         builder.setCapabilities(createMeterFlags(input.readUnsignedInt()));\r
         builder.setMaxBands(input.readUnsignedByte());\r
         builder.setMaxColor(input.readUnsignedByte());\r
@@ -512,6 +513,12 @@ public class MultipartReplyMessageFactory implements OFDeserializer<MultipartRep
         return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);\r
     }\r
     \r
+    private static MeterBandTypeBitmap createMeterBandsBitmap(long input) {\r
+        final Boolean _oFPMBTDROP = (input & (1 << 0)) != 0;\r
+        final Boolean _oFPMBTDSCPREMARK = (input & (1 << 1)) != 0;\r
+        return new MeterBandTypeBitmap(_oFPMBTDROP, _oFPMBTDSCPREMARK);\r
+    }\r
+    \r
     private static MultipartReplyMeter setMeter(ByteBuf input) {\r
         final byte PADDING_IN_METER_STATS_HEADER = 6;\r
         final byte METER_BAND_STATS_LENGTH = 16;\r
index 0a2b44fa897814c2a8d29f6aaeb49fde082f0e4d..08f8903d8f8e1a0a7f6401a1c30c348bd6cff124 100644 (file)
@@ -36,6 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;\r
@@ -466,7 +467,7 @@ public class MultipartReplyMessageFactoryTest {
         MultipartReplyMeterFeatures message = (MultipartReplyMeterFeatures) builtByFactory.getMultipartReplyBody();\r
         \r
         Assert.assertEquals("Wrong maxMeter", 9, message.getMaxMeter().intValue());\r
-        Assert.assertEquals("Wrong bandTypes", 1, message.getBandTypes().getIntValue());\r
+        Assert.assertEquals("Wrong bandTypes", new MeterBandTypeBitmap(true, false), message.getBandTypes());\r
         Assert.assertEquals("Wrong capabilities", new MeterFlags(false, true, true, false), \r
                                                       message.getCapabilities());\r
         Assert.assertEquals("Wrong maxBands", 3, message.getMaxBands().intValue());\r