Fix ipv6 prefix serializer 18/25218/2
authorMilos Fabian <milfabia@cisco.com>
Thu, 13 Aug 2015 08:49:52 +0000 (10:49 +0200)
committerMilos Fabian <milfabia@cisco.com>
Thu, 13 Aug 2015 08:58:40 +0000 (10:58 +0200)
-java's genuine string to byte parser is limited to value of 127 max
-use unsigned string to byte parser to able to handle 128 prefix

Change-Id: Iacbb47fc90286e74c01737735f4b78f4d5c89c64
Signed-off-by: Milos Fabian <milfabia@cisco.com>
util/src/main/java/org/opendaylight/protocol/util/Ipv6Util.java
util/src/test/java/org/opendaylight/protocol/util/IPAddressesAndPrefixesTest.java

index c43883bb8d78762c2abc004a49272183afebaff0..74ad1ac44a0ddf60c7ab23682af2c3c39161d694 100644 (file)
@@ -92,7 +92,7 @@ public final class Ipv6Util {
         final InetAddress a = InetAddresses.forString(p.substring(0, sep));
         Preconditions.checkArgument(a instanceof Inet6Address);
         final byte[] bytes = a.getAddress();
-        return Bytes.concat(bytes, new byte[] { Byte.valueOf(p.substring(sep + 1, p.length())) });
+        return Bytes.concat(bytes, new byte[] { UnsignedBytes.parseUnsignedByte(p.substring(sep + 1, p.length())) });
     }
 
     /**
index 79d9d38d5057ed3264427eb1d021037fb0bbe715..4366d5862ea721a8bc4ba41c971d246ff815cde3 100644 (file)
@@ -125,6 +125,8 @@ public class IPAddressesAndPrefixesTest {
         assertEquals(new Ipv6Prefix("2001:db8:1:2::/64"), Ipv6Util.prefixForBytes(bytes, 64));
         assertArrayEquals(new byte[] { 0x20, (byte) 0x01, 0x0d, (byte) 0xb8, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
             0x00, 0x00, 0x40 }, Ipv6Util.bytesForPrefix(new Ipv6Prefix("2001:db8:1:2::/64")));
+        assertArrayEquals(new byte[] { 0x20, (byte) 0x01, 0x0d, (byte) 0xb8, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+            0x00, 0x00, (byte)0x80 }, Ipv6Util.bytesForPrefix(new Ipv6Prefix("2001:db8:1:2::/128")));
 
         try {
             Ipv6Util.prefixForBytes(bytes, 200);