HC2VPP-314 - fix for IPV6 routes with 128 subnet prefix 50/12350/3
authorMichal Cmarada <[email protected]>
Thu, 3 May 2018 07:42:34 +0000 (09:42 +0200)
committerMichal Cmarada <[email protected]>
Thu, 3 May 2018 07:42:34 +0000 (09:42 +0200)
VPP uses byte in range of 0 to 255 but when jni is used
and this type is converted to java byte which has range
of -128 to 127 it will convert it to negative value.
It then fails to create Ip6Prefix from this value.

Change-Id: Ic18686959682c153da2e4ee4a7f7841c9b56e5d3
Signed-off-by: Michal Cmarada <[email protected]>
routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/naming/Ipv6RouteNamesFactory.java
routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/trait/RouteRequestProducer.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java

index a58051b..abb4861 100644 (file)
@@ -60,7 +60,7 @@ public final class Ipv6RouteNamesFactory implements RouteMapper {
     public String uniqueRouteName(@Nonnull final Ip6FibDetails details, @Nonnull final MappingContext mappingContext) {
         return bindName(routingProtocolContext.getName(details.tableId, mappingContext),
                 doubleDotlessAddress(details.address),
-                String.valueOf(details.addressLength));
+                String.valueOf(Byte.toUnsignedInt(details.addressLength)));
     }
 
     public String uniqueRouteHopName(
index 80b4b8f..97adb35 100644 (file)
@@ -63,7 +63,7 @@ public interface RouteRequestProducer extends ByteDataTranslator, AddressTransla
         checkArgument(
                 allowedPrefixPatterns.stream().anyMatch(pattern -> Pattern.compile(pattern).matcher(value).matches()),
                 "%s is not a valid Ip-prefix value");
-        return Byte.valueOf(value.substring(value.indexOf("/") + 1));
+        return Integer.valueOf(value.substring(value.indexOf("/") + 1)).byteValue();
     }
 
     default boolean classifyTablePresent(final String classifyTableName,
index 6d939af..dbfe81d 100644 (file)
@@ -60,7 +60,7 @@ public interface Ipv6Translator extends ByteDataTranslator {
     default byte extractPrefix(Ipv6Prefix data) {
         checkNotNull(data, "Cannot extract from null");
 
-        return Byte.valueOf(data.getValue().substring(data.getValue().indexOf('/') + 1));
+        return Integer.valueOf(data.getValue().substring(data.getValue().indexOf('/') + 1)).byteValue();
     }
 
     /**