Minor model refactor
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / util / MatchDeserializer.java
index 640fc9f58ca8f8f6a7c32aa8e4243ce4b8c45d61..fe05bf92da45c72c1188dd51f637376120b1c5ab 100644 (file)
@@ -59,7 +59,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry.PseudoField;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;
@@ -68,6 +67,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.StandardMatchType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;
@@ -115,12 +115,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpD
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.MatchEntries;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.MatchEntriesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.MatchBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
 
 import com.google.common.base.Joiner;
 
@@ -131,8 +129,6 @@ import com.google.common.base.Joiner;
  */
 public abstract class MatchDeserializer {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(MatchDeserializer.class);
-
     /**
      * Creates match
      * @param in input ByteBuf
@@ -289,7 +285,6 @@ public abstract class MatchDeserializer {
                 break;
             case 11:
                 matchEntriesBuilder.setOxmMatchField(Ipv4Src.class);
-                LOGGER.warn("IPV4address(ipv4src): received but possible wrong deserialization");
                 addIpv4AddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
@@ -297,7 +292,6 @@ public abstract class MatchDeserializer {
                 break;
             case 12:
                 matchEntriesBuilder.setOxmMatchField(Ipv4Dst.class);
-                LOGGER.warn("IPV4address(ipv4dst): received but possible wrong deserialization");
                 addIpv4AddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
@@ -305,27 +299,27 @@ public abstract class MatchDeserializer {
                 break;
             case 13:
                 matchEntriesBuilder.setOxmMatchField(TcpSrc.class);
-                addPortAugmentation(null, in);
+                addPortAugmentation(matchEntriesBuilder, in);
                 break;
             case 14:
                 matchEntriesBuilder.setOxmMatchField(TcpDst.class);
-                addPortAugmentation(null, in);
+                addPortAugmentation(matchEntriesBuilder, in);
                 break;
             case 15:
                 matchEntriesBuilder.setOxmMatchField(UdpSrc.class);
-                addPortAugmentation(null, in);
+                addPortAugmentation(matchEntriesBuilder, in);
                 break;
             case 16:
                 matchEntriesBuilder.setOxmMatchField(UdpDst.class);
-                addPortAugmentation(null, in);
+                addPortAugmentation(matchEntriesBuilder, in);
                 break;
             case 17:
                 matchEntriesBuilder.setOxmMatchField(SctpSrc.class);
-                addPortAugmentation(null, in);
+                addPortAugmentation(matchEntriesBuilder, in);
                 break;
             case 18:
                 matchEntriesBuilder.setOxmMatchField(SctpDst.class);
-                addPortAugmentation(null, in);
+                addPortAugmentation(matchEntriesBuilder, in);
                 break;
             case 19:
                 matchEntriesBuilder.setOxmMatchField(Icmpv4Type.class);
@@ -347,7 +341,6 @@ public abstract class MatchDeserializer {
                 break;
             case 22:
                 matchEntriesBuilder.setOxmMatchField(ArpSpa.class);
-                LOGGER.warn("IPV4address(arpspa): received but possible wrong deserialization");
                 addIpv4AddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
@@ -355,7 +348,6 @@ public abstract class MatchDeserializer {
                 break;
             case 23:
                 matchEntriesBuilder.setOxmMatchField(ArpTpa.class);
-                LOGGER.warn("IPV4address(arptpa): received but possible wrong deserialization");
                 addIpv4AddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
@@ -377,8 +369,6 @@ public abstract class MatchDeserializer {
                 break;
             case 26:
                 matchEntriesBuilder.setOxmMatchField(Ipv6Src.class);
-                // TODO - ipv6address - check format with tests
-                LOGGER.warn("IPV6address(Ipv6Src): received but possible wrong deserialization");
                 addIpv6AddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);
@@ -386,8 +376,6 @@ public abstract class MatchDeserializer {
                 break;
             case 27:
                 matchEntriesBuilder.setOxmMatchField(Ipv6Dst.class);
-                // TODO - ipv6address - check format with tests
-                LOGGER.warn("IPV6address(Ipv6Dst): received but possible wrong deserialization");
                 addIpv6AddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);
@@ -416,8 +404,6 @@ public abstract class MatchDeserializer {
                 break;
             case 31:
                 matchEntriesBuilder.setOxmMatchField(Ipv6NdTarget.class);
-                // TODO - ipv6address - check format with tests
-                LOGGER.warn("IPV6address(Ipv6NdTarget): received but possible wrong deserialization");
                 addIpv6AddressAugmentation(matchEntriesBuilder, in);
                 break;
             case 32:
@@ -480,7 +466,7 @@ public abstract class MatchDeserializer {
                 final Boolean HOP = ((bitmap) & (1<<6)) != 0;
                 final Boolean UNREP = ((bitmap) & (1<<7)) != 0;
                 final Boolean UNSEQ = ((bitmap) & (1<<8)) != 0;
-                pseudoBuilder.setPseudoField(new PseudoField(AUTH, DEST, ESP, FRAG, HOP, NONEXT, ROUTER, UNREP, UNSEQ));
+                pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(AUTH, DEST, ESP, FRAG, HOP, NONEXT, ROUTER, UNREP, UNSEQ));
                 matchEntriesBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());
                 if (hasMask) {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
@@ -500,6 +486,15 @@ public abstract class MatchDeserializer {
         return matchEntriesList;
     }
 
+    /** Decodes oxm ids
+     * @param in input ByteBuf
+     * @param matchLength match entries length
+     * @return list of match ids
+     */
+    public static List<MatchEntries> createMatchIds(ByteBuf in, int matchLength) {
+        return MatchIdsDeserializer.createOxmIds(in, matchLength);
+    }
+
     private static void addMaskAugmentation(MatchEntriesBuilder builder, ByteBuf in, int matchEntryLength) {
         MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();
         byte[] mask = new byte[matchEntryLength];
@@ -512,7 +507,7 @@ public abstract class MatchDeserializer {
         Ipv6AddressMatchEntryBuilder ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();
         List<String> groups = new ArrayList<>();
         for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV6_ADDRESS; i++) {
-            groups.add(String.format("X", in.readUnsignedShort()));
+            groups.add(String.format("%04X", in.readUnsignedShort()));
         }
         Joiner joiner = Joiner.on(":");
         ipv6AddressBuilder.setIpv6Address(new Ipv6Address(joiner.join(groups)));
@@ -521,7 +516,7 @@ public abstract class MatchDeserializer {
 
     private static void addMetadataAugmentation(MatchEntriesBuilder builder, ByteBuf in) {
         MetadataMatchEntryBuilder metadata = new MetadataMatchEntryBuilder();
-        byte[] metadataBytes = new byte[Long.SIZE/Byte.SIZE];
+        byte[] metadataBytes = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
         in.readBytes(metadataBytes);
         metadata.setMetadata(metadataBytes);
         builder.addAugmentation(MetadataMatchEntry.class, metadata.build());