summaryrefslogtreecommitdiffstats
path: root/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java
diff options
context:
space:
mode:
Diffstat (limited to 'routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java')
-rw-r--r--routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java22
1 files changed, 19 insertions, 3 deletions
diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java
index e30c38fae..7c7e89f8f 100644
--- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java
+++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java
@@ -17,6 +17,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;
@@ -30,6 +32,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;
@@ -47,6 +50,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;
@@ -102,6 +107,18 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer
@Nonnull final WriteContext writeContext) throws WriteFailedException {
final String parentProtocolName = instanceIdentifier.firstKeyOf(ControlPlaneProtocol.class).getName();
final String routeName = namesFactory.uniqueRouteName(parentProtocolName, route);
+ Optional<ControlPlaneProtocol> 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.Ipv6.class,
+ new VniReference(ControlPlaneProtocolCustomizer.extractTableId(protocolOptional.get())));
+
+ if (!ControlPlaneProtocolCustomizer.isTablePresent(key, writeContext)) {
+ throw new WriteFailedException(instanceIdentifier, "Ipv6 FIB table does not exist!");
+ }
+
writeRoute(instanceIdentifier, parentProtocolName, routeName, route, writeContext, true);
// maps new route by next available index,
@@ -142,9 +159,8 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer
} else if (route.getNextHop().getNextHopOptions() instanceof SpecialNextHop) {
writeSpecialHopRoute(identifier, route, parentProtocolName, writeContext, isAdd);
} else if (route.getNextHop().getNextHopOptions() instanceof TableLookupCase) {
- writeRoute(tableLookupRequestFactory.createV6TableLookupRouteRequest(isAdd, parentProtocolName, route,
- writeContext.getMappingContext()),
- identifier);
+ writeRoute(tableLookupRequestFactory
+ .createV6TableLookupRouteRequest(isAdd, parentProtocolName, route, writeContext), identifier);
} else {
throw new IllegalArgumentException("Unsupported next-hop type");
}