Updated experimenter model 55/9155/1
authorMichal Polkorab <michal.polkorab@pantheon.sk>
Wed, 16 Jul 2014 11:36:24 +0000 (13:36 +0200)
committerMichal Polkorab <michal.polkorab@pantheon.sk>
Fri, 18 Jul 2014 09:56:17 +0000 (11:56 +0200)
 - all extension-capable-messages have their augmentations (experimenter message is defined - so no augment needed here)
 - these augmentations will be used for vendor / experimenter differentiation

Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
openflow-protocol-api/src/main/yang/openflow-augments.yang
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/ErrorMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartReplyMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/OF10StatsReplyMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/action/OF13SetFieldActionSerializer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestInputFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/OF13MatchSerializer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/TypeKeyMakerFactory.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartReplyMessageFactoryTest.java

index 44986927df0393ebb05dbcff7d6ee2aa841af887..910dfa5fe0fd97eb049983fcc9b3a7f0fa5ec451 100644 (file)
          }\r
      }\r
      augment "/oxm:oxm-container/oxm:match-entries" {\r
-         ext:augment-identifier "experimenter-match-entry";\r
+         ext:augment-identifier "experimenter-id-match-entry";\r
          leaf experimenter {\r
-             type uint32;\r
+             type oft:experimenter-id;\r
          }\r
      }\r
      augment "/oxm:oxm-container/oxm:match-entries" {\r
          uses oxm:oxm-fields-grouping;\r
      }\r
      augment "/ofaction:actions-container/ofaction:action" {\r
-         ext:augment-identifier "experimenter-action";\r
+         ext:augment-identifier "experimenter-id-action";\r
          leaf experimenter {\r
-             type uint32;\r
-         }\r
-         leaf data {\r
-             type binary;\r
+             type oft:experimenter-id;\r
          }\r
      }\r
      // OF1.0 structures\r
          uses oxm:oxm-fields-grouping;\r
      }\r
      augment "/ofproto:table-features-properties-container/ofproto:table-feature-properties" {\r
-         ext:augment-identifier "experimenter-related-table-feature-property";\r
+         ext:augment-identifier "experimenter-id-table-feature-property";\r
          leaf experimenter {\r
-             type uint32;\r
+             type oft:experimenter-id;\r
          }\r
          leaf exp-type {\r
              type uint32;\r
          }\r
-         leaf data {\r
-             type binary;\r
-         }\r
      }\r
 \r
 // OFP_INSTRUCTION AUGMENTS\r
          }\r
      }\r
      augment "/ofinstruction:instruction-container/ofinstruction:instruction" {\r
-         ext:augment-identifier "experimenter-instruction";\r
+         ext:augment-identifier "experimenter-id-instruction";\r
          leaf experimenter {\r
-             type uint32;\r
-         }\r
-         leaf data {\r
-             type binary;\r
+             type oft:experimenter-id;\r
          }\r
      }\r
      \r
          }\r
      }\r
      augment "/ofproto:queue-prop-container/ofproto:queue-property" {\r
-         ext:augment-identifier "experimenter-queue-property";\r
+         ext:augment-identifier "experimenter-id-queue-property";\r
          leaf experimenter {\r
-             type uint32;\r
-         }\r
-         leaf data {\r
-             type binary;\r
+             type oft:experimenter-id;\r
          }\r
      }\r
      \r
 // OFP_ERROR_AUGMENTS (only experimenter till OpenFlow v1.3)\r
-    augment "/ofproto:error-message" {\r
-         ext:augment-identifier "experimenter-error";\r
-         leaf exp_type {\r
-             type uint16;\r
+     augment "/ofproto:error-message" {\r
+         ext:augment-identifier "experimenter-id-error";\r
+         leaf experimenter {\r
+             type oft:experimenter-id;\r
          }\r
+     }\r
+\r
+// OFP_MULTIPART AUGMENTS\r
+     augment "/ofproto:multipart-request/input/ofproto:multipart-request-body/ofproto:multipart-request-experimenter-case/ofproto:multipart-request-experimenter" {\r
+         ext:augment-identifier "experimenter-id-multipart-request";\r
          leaf experimenter {\r
+             type oft:experimenter-id;\r
+         }\r
+         leaf exp-type {\r
              type uint32;\r
          }\r
-         leaf exp-data {\r
-             type binary;\r
+     }\r
+     augment "/ofproto:multipart-reply-message/ofproto:multipart-reply-body/ofproto:multipart-reply-experimenter-case/ofproto:multipart-reply-experimenter" {\r
+         ext:augment-identifier "experimenter-id-multipart-reply";\r
+         leaf experimenter {\r
+             type oft:experimenter-id;\r
+         }\r
+         leaf exp-type {\r
+             type uint32;\r
          }\r
      }\r
 \r
+// OFP_METER_BAND AUGMENTS\r
+     augment "/ofproto:meter-band-container/ofproto:meter-band/ofproto:meter-band-experimenter-case/ofproto:meter-band-experimenter" {\r
+         ext:augment-identifier "experimenter-id-meter-band";\r
+         leaf experimenter {\r
+             type oft:experimenter-id;\r
+         }\r
+     }\r
 }
\ No newline at end of file
index 300dd7fef9ecd4cce5fd905cb566f9a27fa00cc7..32070d14cf900c973825c3fe47985df02d7e7e3a 100644 (file)
                 uses ofHeader;\r
                 \r
                 leaf experimenter {\r
-                    type uint32;\r
+                    type oft:experimenter-id;\r
                 }\r
                 leaf exp_type {\r
                     type uint32;\r
                 }\r
-                leaf data {\r
-                    type binary;\r
-                }\r
             }\r
         /* Switch configuration messages. */\r
             grouping features-request {\r
                     }\r
                     case multipart-request-experimenter-case {\r
                         container multipart-request-experimenter {\r
-                            leaf experimenter {\r
-                                type uint32;\r
-                            }\r
-                            leaf exp-type {\r
-                                type uint32;\r
-                            }\r
-                            leaf data {\r
-                                type binary;\r
-                            }\r
+                            // empty body - used for experimenter augmentation\r
                         }\r
                     }\r
                 }\r
                     }\r
                     case multipart-reply-experimenter-case {\r
                         container multipart-reply-experimenter {\r
-                            leaf experimenter {\r
-                                type uint32;\r
-                            }\r
-                            leaf exp-type {\r
-                                type uint32;\r
-                            }\r
-                            leaf data {\r
-                                type binary;\r
-                            }\r
+                            // empty body - used for experimenter augmentation\r
                         }\r
                     }\r
                 }\r
                 }\r
             }\r
             \r
+            container meter-band-container {\r
+                uses meter-band-header;\r
+            }\r
             grouping meter-band-header {\r
                 choice meter-band {\r
                     case meter-band-drop-case {\r
                     case meter-band-experimenter-case {\r
                         container meter-band-experimenter {\r
                             uses meter-band-commons;\r
-                            leaf experimenter {\r
-                                type uint32;\r
-                            }\r
-                            leaf data {\r
-                               type binary;\r
-                            }\r
                         }\r
                     }\r
                 }\r
index 47dc4a35fa6f13c925abaee0765942dc4aa09621..1a0240896d57b0c12e9311a601fffb2a86c679d7 100644 (file)
     typedef ether-type {
         type uint16;
     }
-
+    typedef experimenter-id {
+        description "This type represents experimenter ID used in experimenter messages.
+                     It also represents vendor ID - as it is the same for OF version 1.3+.
+                     (VENDOR naming convention has been changed in OF v1.3 specification
+                      to EXPERIMENTER)";
+        type uint32;
+    }
     typedef error-type {
         type enumeration {
             enum HELLO_FAILED {
index 45b25abaae2017ec248cfa7178045b196261e331..4b18f2121c0da76ef306670aad05d10fb39b4a64 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegi
 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterError;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdError;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadActionCode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadInstructionCode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.BadMatchCode;
@@ -55,10 +55,10 @@ public class ErrorMessageFactory implements OFDeserializer<ErrorMessage>,
         ErrorType errorType = ErrorType.forValue(type);
         if (ErrorType.EXPERIMENTER.equals(errorType)) {
             builder.setType(errorType.getIntValue());
-            OFDeserializer<ExperimenterError> deserializer = registry.getDeserializer(new MessageCodeKey(
+            OFDeserializer<ExperimenterIdError> deserializer = registry.getDeserializer(new MessageCodeKey(
                     EncodeConstants.OF13_VERSION_ID, EncodeConstants.EXPERIMENTER_VALUE, ErrorMessage.class));
-            ExperimenterError error = deserializer.deserialize(rawMessage);
-            builder.addAugmentation(ExperimenterError.class, error);
+            ExperimenterIdError error = deserializer.deserialize(rawMessage);
+            builder.addAugmentation(ExperimenterIdError.class, error);
         } else {
             decodeType(builder, errorType, type);
             decodeCode(rawMessage, builder, errorType);
index 98192092cdb8497ef00ef2c5044b0c7f56d447e1..4074339a535908eb0daa07eebbaa9a19a48669c1 100644 (file)
@@ -673,14 +673,15 @@ public class MultipartReplyMessageFactory implements OFDeserializer<MultipartRep
                         bandsBuilder.setMeterBand(bandDscpRemarkCaseBuilder.build());
                         break;
                     case 0xFFFF:
-                       MeterBandExperimenterCaseBuilder bandExperimenterCaseBuilder = new MeterBandExperimenterCaseBuilder();
+                        MeterBandExperimenterCaseBuilder bandExperimenterCaseBuilder = new MeterBandExperimenterCaseBuilder();
                         MeterBandExperimenterBuilder bandExperimenterBuilder = new MeterBandExperimenterBuilder();
-                        bandExperimenterBuilder.setType(MeterBandType.forValue(bandType));
-                        actualLength += input.readUnsignedShort();
-                        bandExperimenterBuilder.setRate(input.readUnsignedInt());
-                        bandExperimenterBuilder.setBurstSize(input.readUnsignedInt());
-                        bandExperimenterBuilder.setExperimenter(input.readUnsignedInt());
-                        bandExperimenterCaseBuilder.setMeterBandExperimenter(bandExperimenterBuilder.build());
+                        // TODO - implement lookup into registry
+//                        bandExperimenterBuilder.setType(MeterBandType.forValue(bandType));
+//                        actualLength += input.readUnsignedShort();
+//                        bandExperimenterBuilder.setRate(input.readUnsignedInt());
+//                        bandExperimenterBuilder.setBurstSize(input.readUnsignedInt());
+//                        bandExperimenterBuilder.setExperimenter(input.readUnsignedInt());
+//                        bandExperimenterCaseBuilder.setMeterBandExperimenter(bandExperimenterBuilder.build());
                         bandsBuilder.setMeterBand(bandExperimenterCaseBuilder.build());
                         break;
                     default:
@@ -697,13 +698,14 @@ public class MultipartReplyMessageFactory implements OFDeserializer<MultipartRep
     }
     
     private static MultipartReplyExperimenterCase setExperimenter(ByteBuf input) {
+     // TODO - implement lookup into registry
        MultipartReplyExperimenterCaseBuilder caseBuilder = new MultipartReplyExperimenterCaseBuilder();
         MultipartReplyExperimenterBuilder builder = new MultipartReplyExperimenterBuilder();
-        builder.setExperimenter(input.readUnsignedInt());
-        builder.setExpType(input.readUnsignedInt());
-        byte[] data = new byte[input.readableBytes()];
-        input.readBytes(data);
-        builder.setData(data);
+//        builder.setExperimenter(input.readUnsignedInt());
+//        builder.setExpType(input.readUnsignedInt());
+//        byte[] data = new byte[input.readableBytes()];
+//        input.readBytes(data);
+//        builder.setData(data);
         caseBuilder.setMultipartReplyExperimenter(builder.build());
         return caseBuilder.build();
     }
index 94885a507759f1d63349106978de23286a66abb1..5d27bdf5336080deb6414057e329fb7daeefcfc5 100644 (file)
@@ -296,12 +296,13 @@ public class OF10StatsReplyMessageFactory implements OFDeserializer<MultipartRep
     }
     
     private static MultipartReplyExperimenterCase setExperimenter(ByteBuf input) {
-       MultipartReplyExperimenterCaseBuilder caseBuilder = new MultipartReplyExperimenterCaseBuilder();
+        // TODO - implement lookup into registry
+        MultipartReplyExperimenterCaseBuilder caseBuilder = new MultipartReplyExperimenterCaseBuilder();
         MultipartReplyExperimenterBuilder builder = new MultipartReplyExperimenterBuilder();
-        builder.setExperimenter(input.readUnsignedInt());
-        byte[] data = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
-        input.readBytes(data);
-        builder.setData(data);
+//        builder.setExperimenter(input.readUnsignedInt());
+//        byte[] data = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
+//        input.readBytes(data);
+//        builder.setData(data);
         caseBuilder.setMultipartReplyExperimenter(builder.build());
         return caseBuilder.build();
     }
index 94fd37367a34e4a15cf35f4aebdd04b3b43b4c6d..bd6b9d8e366bd96e4efdef10a913237903386943 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
 import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;\r
 import org.opendaylight.openflowjava.util.ByteBufUtils;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntry;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;\r
@@ -44,7 +44,8 @@ public class OF13SetFieldActionSerializer implements OFSerializer<Action>,
         MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(\r
                 EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField());\r
         if (entry.getOxmClass().equals(ExperimenterClass.class)) {\r
-            key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class).getExperimenter());\r
+            key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)\r
+                    .getExperimenter().getValue());\r
         } else {\r
             key.setExperimenterId(null);\r
         }\r
index 4c174c8fd337e14f18c551b3a478f55a33e0acdc..5a428c2fc60b5cd097f26648a06776892aea6f32 100644 (file)
@@ -24,7 +24,7 @@ import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMaker;
 import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;
 import org.opendaylight.openflowjava.util.ByteBufUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionRelatedTableFeatureProperty;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.InstructionRelatedTableFeatureProperty;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NextTableRelatedTableFeatureProperty;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmRelatedTableFeatureProperty;
@@ -442,7 +442,8 @@ public class MultipartRequestInputFactory implements OFSerializer<MultipartReque
                 MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
                         EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField());
                 if (entry.getOxmClass().equals(ExperimenterClass.class)) {
-                    key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class).getExperimenter());
+                    key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)
+                            .getExperimenter().getValue());
                 } else {
                     key.setExperimenterId(null);
                 }
index 8bc2632ebfeb397bd114d83992540cdd18da79f7..afa3e0dd0fabe175308490a45fb1079afd9bfb58 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegist
 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.util.ByteBufUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.StandardMatchType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
@@ -81,7 +81,8 @@ public class OF13MatchSerializer implements OFSerializer<Match>, SerializerRegis
             MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
                     EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField());
             if (entry.getOxmClass().equals(ExperimenterClass.class)) {
-                key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class).getExperimenter());
+                key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)
+                        .getExperimenter().getValue());
             } else {
                 key.setExperimenterId(null);
             }
index 4ba9294b64a69ece020b40279cf3466c8b28c594..80060e3384053b59d3255e35f17c501d94bfe68e 100644 (file)
@@ -11,9 +11,9 @@ package org.opendaylight.openflowjava.protocol.impl.util;
 import org.opendaylight.openflowjava.protocol.api.keys.ActionSerializerKey;\r
 import org.opendaylight.openflowjava.protocol.api.keys.InstructionSerializerKey;\r
 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterInstruction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterMatchEntry;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMatchEntry;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
@@ -39,8 +39,8 @@ public abstract class TypeKeyMakerFactory {
                 key = new MatchEntrySerializerKey<>(getVersion(), entry.getOxmClass(),\r
                         entry.getOxmMatchField());\r
                 if (entry.getOxmClass().equals(ExperimenterClass.class)) {\r
-                    key.setExperimenterId(entry.getAugmentation(ExperimenterMatchEntry.class)\r
-                            .getExperimenter());\r
+                    key.setExperimenterId(entry.getAugmentation(ExperimenterIdMatchEntry.class)\r
+                            .getExperimenter().getValue());\r
                     return key;\r
                 }\r
                 key.setExperimenterId(null);\r
@@ -59,7 +59,8 @@ public abstract class TypeKeyMakerFactory {
             @Override\r
             public ActionSerializerKey<?> make(Action entry) {\r
                 if (entry.getType().equals(Experimenter.class)) {\r
-                    return new ActionSerializerKey<>(getVersion(), entry.getType(), entry.getAugmentation(ExperimenterAction.class).getExperimenter());\r
+                    return new ActionSerializerKey<>(getVersion(), entry.getType(),\r
+                            entry.getAugmentation(ExperimenterIdAction.class).getExperimenter().getValue());\r
                 }\r
                 return new ActionSerializerKey<>(getVersion(), entry.getType(), null);\r
             }\r
@@ -77,7 +78,9 @@ public abstract class TypeKeyMakerFactory {
             public InstructionSerializerKey<?> make(Instruction entry) {\r
                 if (entry.getType().equals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common\r
                         .instruction.rev130731.Experimenter.class)) {\r
-                    return new InstructionSerializerKey<>(getVersion(), entry.getType(), entry.getAugmentation(ExperimenterInstruction.class).getExperimenter());\r
+                    return new InstructionSerializerKey<>(getVersion(), entry.getType(),\r
+                            entry.getAugmentation(ExperimenterIdInstruction.class)\r
+                            .getExperimenter().getValue());\r
                 }\r
                 return new InstructionSerializerKey<>(getVersion(), entry.getType(), null);\r
             }\r
index 5e6017a9c07e8e05a348cb55892238bf47178cf9..24985bb8a87e5811945655f5b4a88cb6fea04623 100644 (file)
@@ -60,13 +60,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmM
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCase;
@@ -79,7 +76,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregate;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.experimenter._case.MultipartReplyExperimenter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
@@ -702,7 +698,7 @@ public class MultipartReplyMessageFactoryTest {
     @Test
     public void testMultipartReplyMeterConfigBody(){
         ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
-                                              "00 38 "+//len
+                                              "00 28 "+//len
                                               "00 0A "+//flags
                                               "00 00 00 09 "+//meterId
                                               "00 01 "+//meterBandDrop.type
@@ -715,13 +711,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 11 "+//meterBandDscp.rate
                                               "00 00 00 20 "+//meterBandDscp.burstSize
                                               "04 "+//meterBandDscp.precLevel
-                                              "00 00 00 "+//meterBandDscp.pad
-                                              "FF FF "+//meterBandExperimenter.type
-                                              "00 10 "+//meterBandExperimenter.len
-                                              "00 00 00 11 "+//meterBandExperimenter.rate
-                                              "00 00 00 20 "+//meterBandExperimenter.burstSize
-                                              "00 00 00 04"//meterBandExperimenter.experimenter
-                                              );
+                                              "00 00 00");//meterBandDscp.pad
         
         MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
@@ -747,13 +737,6 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong meterBandDscp.rate", 17, meterBandDscp.getRate().intValue());
         Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
         Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
-        
-        MeterBandExperimenterCase experimenterCase = (MeterBandExperimenterCase) message.getMeterConfig().get(0).getBands().get(2).getMeterBand(); 
-        MeterBandExperimenter meterBandExperimenter = experimenterCase.getMeterBandExperimenter();
-        Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue()); 
-        Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());
     }
     
     /**
@@ -762,7 +745,7 @@ public class MultipartReplyMessageFactoryTest {
     @Test
     public void testMultipartReplyMeterConfigBodyMulti(){
         ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
-                                              "00 38 "+//len
+                                              "00 28 "+//len
                                               "00 06 "+//flags
                                               "00 00 00 09 "+//meterId
                                               "00 01 "+//meterBandDrop.type
@@ -776,11 +759,6 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 20 "+//meterBandDscp.burstSize
                                               "04 "+//meterBandDscp.precLevel
                                               "00 00 00 "+//meterBandDscp.pad
-                                              "FF FF "+//meterBandExperimenter.type
-                                              "00 10 "+//meterBandExperimenter.len
-                                              "00 00 00 11 "+//meterBandExperimenter.rate
-                                              "00 00 00 20 "+//meterBandExperimenter.burstSize
-                                              "00 00 00 04 "+//meterBandExperimenter.experimenter
                                               
                                               "00 18 "+//len01
                                               "00 03 "+//flags01
@@ -818,13 +796,6 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
         Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
         
-        MeterBandExperimenterCase experimenterCase = (MeterBandExperimenterCase) message.getMeterConfig().get(0).getBands().get(2).getMeterBand(); 
-        MeterBandExperimenter meterBandExperimenter = experimenterCase.getMeterBandExperimenter();
-        Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue()); 
-        Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());
-        
         LOGGER.info(message.getMeterConfig().get(0).getFlags().toString());
         Assert.assertEquals("Wrong flags01", new MeterFlags(false, true, true, false),
                              message.getMeterConfig().get(1).getFlags());
@@ -839,31 +810,7 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong meterBandDscp01.precLevel", 4, meterBandDscp01.getPrecLevel().intValue());
         
     }
-    
-    /**
-     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
-     */
-    @Test
-    public void testMultipartReplyExperimenterBody(){
-        ByteBuf bb = BufferHelper.buildBuffer("FF FF 00 01 00 00 00 00 "+
-                                              "00 00 00 0F "+//experimenterId
-                                              "00 00 00 FF "+//expType
-                                              "00 00 01 01 00 00 01 01"
-                                              );
-        
-        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
-        
-        BufferHelper.checkHeaderV13(builtByFactory);
-        Assert.assertEquals("Wrong type", 0xFFFF, builtByFactory.getType().getIntValue());
-        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
-        MultipartReplyExperimenterCase messageCase = (MultipartReplyExperimenterCase) builtByFactory.getMultipartReplyBody();
-        MultipartReplyExperimenter message = messageCase.getMultipartReplyExperimenter();        
-        Assert.assertEquals("Wrong experimenterId", 15, message.getExperimenter().intValue());
-        Assert.assertEquals("Wrong expType", 255, message.getExpType().intValue());
-        Assert.assertArrayEquals("Wrong data", new byte[]{0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01}, 
-                             message.getData());
-    }
-    
+
     /**
      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
      */