1. Corrected Pbb-Isis match value length to 3 bytes as per OF 1.3 spec. 34/3734/2
authorDeepthi V V <deepthi.v.v@ericsson.com>
Sun, 15 Dec 2013 07:29:50 +0000 (12:59 +0530)
committerDeepthi V V <deepthi.v.v@ericsson.com>
Sun, 15 Dec 2013 13:38:00 +0000 (19:08 +0530)
2. Corrected mac address length in match deserializer.

Signed-off-by: Deepthi V V <deepthi.v.v@ericsson.com>
Change-Id: I5be0c8356d46191bf6430b7b8f855e419d5162f3

openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/EncodeConstants.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/MatchDeserializer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/MatchSerializer.java

index 098ba8d9fe506b7ccbbc3771bc6f68d97bcb91e7..c07ae1de4ed1c566d221f4c05598701149451b37 100644 (file)
@@ -20,7 +20,7 @@ public abstract class EncodeConstants {
     public static final byte OF10_VERSION_ID = 0x01;
     /** OpenFlow v1.0 wire protocol number */
     public static final byte OF13_VERSION_ID = 0x04;
-    
+
     /** Length of mac address */
     public static final byte MAC_ADDRESS_LENGTH = 6;
     /** Number of groups in ipv4 address */
@@ -29,7 +29,7 @@ public abstract class EncodeConstants {
     public static final byte GROUPS_IN_IPV6_ADDRESS = 8;
     /** Length of ipv6 address in bytes */
     public static final byte SIZE_OF_IPV6_ADDRESS_IN_BYTES = (8 * Short.SIZE) / Byte.SIZE;
-    
+
     /** Length of long in bytes */
     public static final byte SIZE_OF_LONG_IN_BYTES = Long.SIZE / Byte.SIZE;
     /** Length of int in bytes */
@@ -38,8 +38,10 @@ public abstract class EncodeConstants {
     public static final byte SIZE_OF_SHORT_IN_BYTES = Short.SIZE / Byte.SIZE;
     /** Length of byte in bytes */
     public static final byte SIZE_OF_BYTE_IN_BYTES = Byte.SIZE / Byte.SIZE;
+    /** Length of 3 bytes */
+    public static final byte SIZE_OF_3_BYTES = 3;
+
 
-    
     /** OF v1.0 maximal port name length */
     public static final byte MAX_PORT_NAME_LENGTH = 16;
 }
index 668d6e414208845e65c76fd768390363be5e5aa1..640fc9f58ca8f8f6a7c32aa8e4243ce4b8c45d61 100644 (file)
@@ -132,7 +132,7 @@ 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
@@ -162,7 +162,7 @@ public abstract class MatchDeserializer {
         }
         return null;
     }
-    
+
     /**
      * Deserializes single match entry (oxm_field)
      * @param in input ByteBuf
@@ -172,7 +172,7 @@ public abstract class MatchDeserializer {
     public static List<MatchEntries> createMatchEntry(ByteBuf in, int matchLength) {
         return createMatchEntriesInternal(in, matchLength, true);
     }
-    
+
     /**
      * @param in input ByteBuf
      * @param matchLength length of match entries
@@ -181,13 +181,13 @@ public abstract class MatchDeserializer {
     public static List<MatchEntries> createMatchEntries(ByteBuf in, int matchLength) {
         return createMatchEntriesInternal(in, matchLength, false);
     }
-    
+
     private static List<MatchEntries> createMatchEntriesInternal(ByteBuf in, int matchLength, boolean oneEntry) {
         List<MatchEntries> matchEntriesList = new ArrayList<>();
         int currLength = 0;
         while(currLength < matchLength) {
-            MatchEntriesBuilder matchEntriesBuilder = new MatchEntriesBuilder(); 
-            switch (in.readUnsignedShort()) { 
+            MatchEntriesBuilder matchEntriesBuilder = new MatchEntriesBuilder();
+            switch (in.readUnsignedShort()) {
             case 0x0000:
                         matchEntriesBuilder.setOxmClass(Nxm0Class.class);
                         break;
@@ -211,18 +211,18 @@ public abstract class MatchDeserializer {
             int matchEntryLength = in.readUnsignedByte();
             currLength += EncodeConstants.SIZE_OF_SHORT_IN_BYTES +
                     (2 * EncodeConstants.SIZE_OF_BYTE_IN_BYTES) + matchEntryLength;
-            
+
             switch(matchField) {
-            case 0: 
+            case 0:
                 matchEntriesBuilder.setOxmMatchField(InPort.class);
                 PortNumberMatchEntryBuilder port = new PortNumberMatchEntryBuilder();
-                port.setPortNumber(new PortNumber(in.readUnsignedInt())); 
+                port.setPortNumber(new PortNumber(in.readUnsignedInt()));
                 matchEntriesBuilder.addAugmentation(PortNumberMatchEntry.class, port.build());
                 break;
             case 1:
                 matchEntriesBuilder.setOxmMatchField(InPhyPort.class);
                 PortNumberMatchEntryBuilder phyPort = new PortNumberMatchEntryBuilder();
-                phyPort.setPortNumber(new PortNumber(in.readUnsignedInt())); 
+                phyPort.setPortNumber(new PortNumber(in.readUnsignedInt()));
                 matchEntriesBuilder.addAugmentation(PortNumberMatchEntry.class, phyPort.build());
                 break;
             case 2:
@@ -236,14 +236,14 @@ public abstract class MatchDeserializer {
                 matchEntriesBuilder.setOxmMatchField(EthDst.class);
                 addMacAddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
-                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
+                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
                 }
                 break;
             case 4:
                 matchEntriesBuilder.setOxmMatchField(EthSrc.class);
                 addMacAddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
-                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
+                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
                 }
                 break;
             case 5:
@@ -365,14 +365,14 @@ public abstract class MatchDeserializer {
                 matchEntriesBuilder.setOxmMatchField(ArpSha.class);
                 addMacAddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
-                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
+                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
                 }
                 break;
             case 25:
                 matchEntriesBuilder.setOxmMatchField(ArpTha.class);
                 addMacAddressAugmentation(matchEntriesBuilder, in);
                 if (hasMask) {
-                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
+                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.MAC_ADDRESS_LENGTH);
                 }
                 break;
             case 26:
@@ -453,10 +453,11 @@ public abstract class MatchDeserializer {
             case 37:
                 matchEntriesBuilder.setOxmMatchField(PbbIsid.class);
                 IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();
-                isidBuilder.setIsid(in.readUnsignedInt());
+                Integer isid = in.readUnsignedMedium();
+                isidBuilder.setIsid(isid.longValue());
                 matchEntriesBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());
                 if (hasMask) {
-                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_INT_IN_BYTES);
+                    addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_3_BYTES);
                 }
                 break;
             case 38:
@@ -485,7 +486,7 @@ public abstract class MatchDeserializer {
                     addMaskAugmentation(matchEntriesBuilder, in, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
                 }
                 break;
-            default: 
+            default:
                 break;
             }
           matchEntriesList.add(matchEntriesBuilder.build());
@@ -517,12 +518,12 @@ public abstract class MatchDeserializer {
         ipv6AddressBuilder.setIpv6Address(new Ipv6Address(joiner.join(groups)));
         builder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());
     }
-    
+
     private static void addMetadataAugmentation(MatchEntriesBuilder builder, ByteBuf in) {
         MetadataMatchEntryBuilder metadata = new MetadataMatchEntryBuilder();
         byte[] metadataBytes = new byte[Long.SIZE/Byte.SIZE];
         in.readBytes(metadataBytes);
-        metadata.setMetadata(metadataBytes); 
+        metadata.setMetadata(metadataBytes);
         builder.addAugmentation(MetadataMatchEntry.class, metadata.build());
     }
 
@@ -544,7 +545,7 @@ public abstract class MatchDeserializer {
         macAddress.setMacAddress(new MacAddress(ByteBufUtils.macAddressToString(address)));
         builder.addAugmentation(MacAddressMatchEntry.class, macAddress.build());
     }
-    
+
     private static void addPortAugmentation(MatchEntriesBuilder builder, ByteBuf in) {
         PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();
         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.
index 74ace299157e6877e38aac641b25161041eec032..b22ec0deef0157d007ddf63dba54565c47dc3de4 100644 (file)
@@ -198,8 +198,8 @@ public class MatchSerializer {
                 short cfi = 1 << 12; // 13-th bit
                 vlanVidValue = vlanVidValue | cfi;
             }
-            
-            writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(), 
+
+            writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),
                     EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
             out.writeShort(vlanVidValue);
             writeMask(entry, out, EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
@@ -281,7 +281,7 @@ public class MatchSerializer {
             writeIpv6AddressRelatedEntry(entry, out, fieldValue);
         } else if (field.isAssignableFrom(Ipv6Flabel.class)) {
             fieldValue = 28;
-            writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(), 
+            writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),
                     EncodeConstants.SIZE_OF_INT_IN_BYTES);
             out.writeInt(entry.getAugmentation(Ipv6FlabelMatchEntry.class).getIpv6Flabel().getValue().intValue());
             writeMask(entry, out, EncodeConstants.SIZE_OF_INT_IN_BYTES);
@@ -317,10 +317,9 @@ public class MatchSerializer {
             out.writeBoolean(entry.getAugmentation(BosMatchEntry.class).isBos().booleanValue());
         } else if (field.isAssignableFrom(PbbIsid.class)) {
             fieldValue = 37;
-            writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),
-                    EncodeConstants.SIZE_OF_LONG_IN_BYTES);
-            out.writeInt(entry.getAugmentation(IsidMatchEntry.class).getIsid().intValue());
-            writeMask(entry, out, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
+            writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(), EncodeConstants.SIZE_OF_3_BYTES);
+            out.writeMedium(entry.getAugmentation(IsidMatchEntry.class).getIsid().intValue());
+            writeMask(entry, out, EncodeConstants.SIZE_OF_3_BYTES);
         } else if (field.isAssignableFrom(TunnelId.class)) {
             fieldValue = 38;
             writeMetadataRelatedEntry(entry, out, fieldValue);
@@ -339,7 +338,7 @@ public class MatchSerializer {
             map.put(7, pseudoField.isUnrep());
             map.put(8, pseudoField.isUnseq());
             int bitmap = ByteBufUtils.fillBitMaskFromMap(map);
-            
+
             writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),
                     EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
             out.writeShort(bitmap);
@@ -370,10 +369,10 @@ public class MatchSerializer {
             fieldAndMask |= 1;
             length *= 2;
         }
-        
+
         out.writeByte(fieldAndMask);
         out.writeByte(length);
-        
+
     }
 
     private static void writeMetadataRelatedEntry(MatchEntries entry, ByteBuf out, int value) {
@@ -386,7 +385,7 @@ public class MatchSerializer {
 
     private static void writeMacAddressRelatedEntry(MatchEntries entry, ByteBuf out, int value) {
         int fieldValue = value;
-        
+
         writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),
                 EncodeConstants.MAC_ADDRESS_LENGTH);
         String macAddress = entry.getAugmentation(MacAddressMatchEntry.class).getMacAddress().getValue();
@@ -396,7 +395,7 @@ public class MatchSerializer {
 
     private static void writeIpv4AddressRelatedEntry(MatchEntries entry, ByteBuf out, int value) {
         int fieldValue = value;
-        
+
         writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),
                 EncodeConstants.SIZE_OF_INT_IN_BYTES);
         writeIpv4Address(entry, out);
@@ -420,7 +419,7 @@ public class MatchSerializer {
         } else {
             address = parseIpv6Address(textAddress.split(":"));
         }
-        
+
         writeOxmFieldAndLength(out, fieldValue, entry.isHasMask(),
                 EncodeConstants.SIZE_OF_IPV6_ADDRESS_IN_BYTES);
         for (int i = 0; i < address.length; i++) {
@@ -579,7 +578,7 @@ public class MatchSerializer {
                 } else if (field.isAssignableFrom(MplsBos.class)) {
                     length += EncodeConstants.SIZE_OF_BYTE_IN_BYTES;
                 } else if (field.isAssignableFrom(PbbIsid.class)) {
-                    length += computePossibleMaskEntryLength(entry, EncodeConstants.SIZE_OF_INT_IN_BYTES);
+                    length += computePossibleMaskEntryLength(entry, EncodeConstants.SIZE_OF_3_BYTES);
                 } else if (field.isAssignableFrom(TunnelId.class)) {
                     length += computePossibleMaskEntryLength(entry, EncodeConstants.SIZE_OF_LONG_IN_BYTES);
                 } else if (field.isAssignableFrom(Ipv6Exthdr.class)) {