summaryrefslogtreecommitdiffstats
path: root/routing
diff options
context:
space:
mode:
authorMichal Cmarada <michal.cmarada@pantheon.tech>2018-07-09 13:59:31 +0200
committerMichal Cmarada <michal.cmarada@pantheon.tech>2018-07-18 12:25:43 +0200
commit20529403b5f257298670f839ad630fbf0c215a7d (patch)
tree031e6d3f9a7968e7ccd35eaba3ca95a1009450c4 /routing
parent220404db4488c6562f50f4b45ba75c8c256c8121 (diff)
Fix binding name for route
In specific case when route uses 128 mask and this value is converted to byte value it is changed to -128, which breaks internal naming of routes. This needed to be fixed because routes with 128 mask are not being read from VPP to operational state. Change-Id: Ic3b6ded721e7996587982b6a2b3bc8c9ebe03b43 Signed-off-by: Michal Cmarada <michal.cmarada@pantheon.tech>
Diffstat (limited to 'routing')
-rw-r--r--routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/naming/Ipv6RouteNamesFactory.java5
-rw-r--r--routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/Ipv6RouteNamesFactoryTest.java17
-rw-r--r--routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java42
-rw-r--r--routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizerTest.java13
-rw-r--r--routing/routing-impl/src/test/resources/ipv6/simplehop/simpleHopRoute128.json18
5 files changed, 91 insertions, 4 deletions
diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/naming/Ipv6RouteNamesFactory.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/naming/Ipv6RouteNamesFactory.java
index da8affb7b..91370c7fd 100644
--- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/naming/Ipv6RouteNamesFactory.java
+++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/naming/Ipv6RouteNamesFactory.java
@@ -56,7 +56,7 @@ public final class Ipv6RouteNamesFactory implements RouteMapper, RouteRequestPro
return bindName(parentProtocolName,
// to have address in compressed form
doubleDotlessAddress(route.getDestinationPrefix()),
- String.valueOf(extractPrefix(route.getDestinationPrefix())));
+ route.getDestinationPrefix().getValue().substring(route.getDestinationPrefix().getValue().indexOf('/') + 1));
}
/**
@@ -72,7 +72,8 @@ public final class Ipv6RouteNamesFactory implements RouteMapper, RouteRequestPro
* Construct unique name from provided parentProtocolName and {@code Ipv6Prefix}
*/
public String uniqueRouteName(@Nonnull final String parentProtocolName, @Nonnull final Ipv6Prefix prefix) {
- return bindName(parentProtocolName, doubleDotlessAddress(prefix), String.valueOf(extractPrefix(prefix)));
+ return bindName(parentProtocolName, doubleDotlessAddress(prefix),
+ prefix.getValue().substring(prefix.getValue().indexOf('/') + 1));
}
diff --git a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/Ipv6RouteNamesFactoryTest.java b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/Ipv6RouteNamesFactoryTest.java
index 2acf9fe4f..76326bf04 100644
--- a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/Ipv6RouteNamesFactoryTest.java
+++ b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/Ipv6RouteNamesFactoryTest.java
@@ -53,6 +53,7 @@ public class Ipv6RouteNamesFactoryTest implements RoutingRequestTestHelper, Sche
private NamingContext interfaceContext;
private NamingContext routingProtocolContext;
private Ip6FibDetails vppRoute;
+ private Ip6FibDetails vppRoute128;
private FibPath vppPath;
private Ipv6RouteNamesFactory factory;
@@ -66,6 +67,11 @@ public class Ipv6RouteNamesFactoryTest implements RoutingRequestTestHelper, Sche
vppRoute.addressLength = 64;
vppRoute.tableId = 1;
+ vppRoute128 = new Ip6FibDetails();
+ vppRoute128.address = FIRST_ADDRESS_AS_ARRAY;
+ vppRoute128.addressLength = (byte) 128;
+ vppRoute128.tableId = 1;
+
vppPath = new FibPath();
vppPath.nextHop = FIRST_ADDRESS_AS_ARRAY;
vppPath.swIfIndex = 2;
@@ -87,6 +93,17 @@ public class Ipv6RouteNamesFactoryTest implements RoutingRequestTestHelper, Sche
}
@Test
+ public void testUniqueRouteName128(
+ @InjectTestData(resourcePath = "/ipv6/simplehop/simpleHopRoute128.json", id = STATIC_ROUTE_PATH)
+ StaticRoutes data) {
+ assertEquals("tst-protocol_2001-db8-a0b-12f0--1_128",
+ factory.uniqueRouteName(ROUTE_PROTOCOL_NAME,
+ getIpv6RouteWithId(data,
+ new Ipv6Prefix("2001:0db8:0a0b:12f0:0000:0000:0000:0001/128"))));
+ assertEquals("tst-protocol_2001-db8-a0b-12f0--1_128", factory.uniqueRouteName(vppRoute128, mappingContext));
+ }
+
+ @Test
public void testUniqueRouteHopName() {
assertEquals("iface_2001-db8-a0b-12f0--1_3", factory.uniqueRouteHopName(
new NextHopBuilder()
diff --git a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java
index 81dae7bfd..fd2844bd6 100644
--- a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java
+++ b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java
@@ -101,6 +101,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
private InstanceIdentifier<Route> routeIdSpecialHop;
private InstanceIdentifier<Route> routeIdSimpleHop;
+ private InstanceIdentifier<Route> routeIdSimpleHop128;
private InstanceIdentifier<Route> routeIdListHop;
private Ipv6RouteNamesFactory factory;
@@ -131,6 +132,8 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
ipv6InstanceIdentifier.child(Route.class, new RouteKey(new Ipv6Prefix("2001:db8:a0b:12f0::2/22")));
routeIdListHop =
ipv6InstanceIdentifier.child(Route.class, new RouteKey(new Ipv6Prefix("2001:db8:a0b:12f0::2/16")));
+ routeIdSimpleHop128 =
+ ipv6InstanceIdentifier.child(Route.class, new RouteKey(new Ipv6Prefix("2001:db8:a0b:12f0::2/128")));
factory = new Ipv6RouteNamesFactory(interfaceContext, routingProtocolContext);
@@ -138,6 +141,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
final Ip6FibDetailsReplyDump replyDump = replyDump();
when(executor.executeDump(routeIdSpecialHop, EntityDumpExecutor.NO_PARAMS)).thenReturn(replyDump);
when(executor.executeDump(routeIdSimpleHop, EntityDumpExecutor.NO_PARAMS)).thenReturn(replyDump);
+ when(executor.executeDump(routeIdSimpleHop128, EntityDumpExecutor.NO_PARAMS)).thenReturn(replyDump);
when(executor.executeDump(routeIdListHop, EntityDumpExecutor.NO_PARAMS)).thenReturn(replyDump);
defineMapping(mappingContext, "iface-1", 1, "interface-context");
@@ -150,6 +154,8 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
Ip6FibDetails listRoute = replyDump.ip6FibDetails.get(2);
String listRouteName = factory.uniqueRouteName(listRoute, mappingContext);
defineMapping(mappingContext, listRouteName, 3, "route-context");
+ defineMapping(mappingContext, factory.uniqueRouteName(replyDump.ip6FibDetails.get(3), mappingContext), 4,
+ "route-context");
addMapping(classifyManager, CLASSIFY_TABLE_NAME, CLASSIFY_TABLE_INDEX, mappingContext);
@@ -210,7 +216,21 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
detail3.path = new FibPath[]{path3, path4};
- replyDump.ip6FibDetails = Arrays.asList(detail1, detail2, detail3);
+ //second is simple
+ Ip6FibDetails detail4 = new Ip6FibDetails();
+ detail4.tableId = 1;
+ detail4.address = Ipv6RouteData.SECOND_ADDRESS_AS_ARRAY;
+ detail4.addressLength = (byte) 128;
+ detail4.path = new FibPath[]{};
+
+ FibPath path5 = new FibPath();
+ path5.weight = 3;
+ path5.nextHop = Ipv6RouteData.FIRST_ADDRESS_AS_ARRAY;
+ path5.afi = 0;
+ path5.swIfIndex = 1;
+ detail4.path = new FibPath[]{path5};
+
+ replyDump.ip6FibDetails = Arrays.asList(detail1, detail2, detail3, detail4);
return replyDump;
}
@@ -218,9 +238,10 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
public void getAllIds() throws Exception {
final List<RouteKey> keys = getCustomizer().getAllIds(routeIdSpecialHop, ctx);
- assertThat(keys, hasSize(3));
+ assertThat(keys, hasSize(4));
assertThat(keys, hasItems(new RouteKey(new Ipv6Prefix("2001:db8:a0b:12f0::1/24")),
new RouteKey(new Ipv6Prefix("2001:db8:a0b:12f0::2/22")),
+ new RouteKey(new Ipv6Prefix("2001:db8:a0b:12f0::2/128")),
new RouteKey(new Ipv6Prefix("2001:db8:a0b:12f0::2/16"))));
}
@@ -257,6 +278,23 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
}
@Test
+ public void readCurrentAttributesSimpleHop128() throws Exception {
+ final RouteBuilder builder = new RouteBuilder();
+ getCustomizer().readCurrentAttributes(routeIdSimpleHop128, builder, ctx);
+
+ assertEquals(new Ipv6Prefix("2001:db8:a0b:12f0::2/128"), builder.getDestinationPrefix());
+ assertEquals("2001:db8:a0b:12f0::2/128", builder.getDestinationPrefix().getValue());
+
+ NextHopOptions hopOptions = builder.getNextHop().getNextHopOptions();
+ assertTrue(hopOptions instanceof SimpleNextHop);
+
+ SimpleNextHop hop = SimpleNextHop.class.cast(hopOptions);
+ assertEquals("2001:db8:a0b:12f0::1", hop.getAugmentation(SimpleNextHop1.class)
+ .getNextHopAddress().getValue());
+ assertEquals("iface-1", hop.getOutgoingInterface());
+ }
+
+ @Test
public void readCurrentAttributesListHop() throws Exception {
diff --git a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizerTest.java b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizerTest.java
index 0d78ca536..0e724b874 100644
--- a/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizerTest.java
+++ b/routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizerTest.java
@@ -60,6 +60,7 @@ public class Ipv6RouteCustomizerTest extends RouteCustomizerTest {
.setKey(SEC_TABLE_KEY).setTableId(SEC_TABLE_KEY.getTableId())
.setAddressFamily(SEC_TABLE_KEY.getAddressFamily()).build();
private static final Ipv6Prefix IPV_6_PREFIX = new Ipv6Prefix("2001:0db8:0a0b:12f0:0000:0000:0000:0001/64");
+ private static final Ipv6Prefix IPV_6_PREFIX_128 = new Ipv6Prefix("2001:0db8:0a0b:12f0:0000:0000:0000:0001/128");
private static final InstanceIdentifier<Route> ROUTE_IID = CONTROL_PROTOCOL_IID
.child(StaticRoutes.class)
@@ -110,6 +111,18 @@ public class Ipv6RouteCustomizerTest extends RouteCustomizerTest {
0, CLASSIFY_TABLE_INDEX, 1)), api, requestCaptor);
}
+ @Test
+ public void testWriteSingleHop128(
+ @InjectTestData(resourcePath = "/ipv6/simplehop/simpleHopRoute128.json", id = STATIC_ROUTE_PATH) StaticRoutes route)
+ throws WriteFailedException {
+ whenAddRouteThenSuccess(api);
+ customizer.writeCurrentAttributes(ROUTE_IID, getIpv6RouteWithId(route, IPV_6_PREFIX_128), writeContext);
+ verifyInvocation(1, ImmutableList
+ .of(desiredFlaglessResult(1, 1, 0, Ipv6RouteData.FIRST_ADDRESS_AS_ARRAY, 128,
+ Ipv6RouteData.SECOND_ADDRESS_AS_ARRAY, INTERFACE_INDEX, 0, TABLE_ID.intValue(),
+ 0, CLASSIFY_TABLE_INDEX, 1)), api, requestCaptor);
+ }
+
//TODO - https://jira.fd.io/browse/HONEYCOMB-396
@Test
public void testWriteTableLookup() throws WriteFailedException {
diff --git a/routing/routing-impl/src/test/resources/ipv6/simplehop/simpleHopRoute128.json b/routing/routing-impl/src/test/resources/ipv6/simplehop/simpleHopRoute128.json
new file mode 100644
index 000000000..2e7510607
--- /dev/null
+++ b/routing/routing-impl/src/test/resources/ipv6/simplehop/simpleHopRoute128.json
@@ -0,0 +1,18 @@
+{
+ "static-routes": {
+ "ipv6": {
+ "route": [
+ {
+ "destination-prefix": "2001:0db8:0a0b:12f0:0000:0000:0000:0001/128",
+ "next-hop": {
+ "next-hop-address" : "2001:0db8:0a0b:12f0:0000:0000:0000:0002",
+ "outgoing-interface": "iface"
+ },
+ "vpp-ipv6-route" : {
+ "classify-table": "classify-table-one"
+ }
+ }
+ ]
+ }
+ }
+}