From 4e8127d8f74726b2ffdf8af89ae879cfa79466f6 Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Fri, 22 Jun 2018 11:02:27 +0200 Subject: HC2VPP-344: Add FIB table management for routing - update models with FIB table management - fixes implementation for FIB table management Change-Id: I5cf397d6e827cb14df970e14ee268ef870931bd4 Signed-off-by: Michal Cmarada --- .../hc2vpp/routing/write/Ipv4RouteCustomizer.java | 24 +++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java') diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java index 1eb249f04..a9a058cb8 100644 --- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java +++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java @@ -16,6 +16,8 @@ package io.fd.hc2vpp.routing.write; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer; import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer; import io.fd.hc2vpp.common.translate.util.MultiNamingContext; @@ -29,6 +31,7 @@ import io.fd.hc2vpp.routing.write.factory.TableLookupRequestFactory; import io.fd.hc2vpp.vpp.classifier.context.VppClassifierContextManager; import io.fd.honeycomb.translate.MappingContext; import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer; +import io.fd.honeycomb.translate.util.RWUtils; import io.fd.honeycomb.translate.write.WriteContext; import io.fd.honeycomb.translate.write.WriteFailedException; import io.fd.vpp.jvpp.core.dto.IpAddDelRoute; @@ -46,6 +49,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.next.hop.options.TableLookupCase; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.next.hop.options.next.hop.list.next.hop.list.NextHop; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.routing.control.plane.protocols.ControlPlaneProtocol; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.VniReference; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.vpp.fib.table.management.fib.tables.TableKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -100,6 +105,18 @@ public class Ipv4RouteCustomizer extends FutureJVppCustomizer @Nonnull final WriteContext writeContext) throws WriteFailedException { final String parentProtocolName = instanceIdentifier.firstKeyOf(ControlPlaneProtocol.class).getName(); final String routeName = routeNamesFactory.uniqueRouteName(parentProtocolName, route); + Optional protocolOptional = + writeContext.readAfter(RWUtils.cutId(instanceIdentifier, ControlPlaneProtocol.class)); + Preconditions.checkArgument(protocolOptional.isPresent(), "Control protocol cannot be null for route: {}", + instanceIdentifier); + TableKey key = new TableKey( + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.Ipv4.class, + new VniReference(ControlPlaneProtocolCustomizer.extractTableId(protocolOptional.get()))); + + if (!ControlPlaneProtocolCustomizer.isTablePresent(key, writeContext)) { + throw new WriteFailedException(instanceIdentifier, "IPv4 FIB table does not exist!"); + } + writeRoute(instanceIdentifier, parentProtocolName, routeName, route, writeContext, true); // maps new route by next available index, @@ -149,11 +166,8 @@ public class Ipv4RouteCustomizer extends FutureJVppCustomizer } else if (route.getNextHop().getNextHopOptions() instanceof SpecialNextHop) { writeSpecialHopRoute(identifier, route, parentProtocolName, writeContext, isAdd); } else if (route.getNextHop().getNextHopOptions() instanceof TableLookupCase) { - writeRoute(tableLookupRequestFactory.createV4TableLookupRouteRequest(isAdd, - parentProtocolName, - route, - writeContext.getMappingContext()), - identifier); + writeRoute(tableLookupRequestFactory + .createV4TableLookupRouteRequest(isAdd, parentProtocolName, route, writeContext), identifier); } else { throw new IllegalArgumentException("Unsupported next-hop type"); } -- cgit 1.2.3-korg