summaryrefslogtreecommitdiffstats
path: root/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/TableLookupRequestFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/TableLookupRequestFactory.java')
-rw-r--r--routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/TableLookupRequestFactory.java61
1 files changed, 42 insertions, 19 deletions
diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/TableLookupRequestFactory.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/TableLookupRequestFactory.java
index 8a11adc8f..99b2b1f10 100644
--- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/TableLookupRequestFactory.java
+++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/TableLookupRequestFactory.java
@@ -17,24 +17,29 @@
package io.fd.hc2vpp.routing.write.factory;
import io.fd.hc2vpp.common.translate.util.NamingContext;
+import io.fd.hc2vpp.fib.management.FibManagementIIds;
import io.fd.hc2vpp.routing.write.factory.base.BasicHopRequestFactory;
import io.fd.hc2vpp.routing.write.trait.RouteRequestProducer;
import io.fd.hc2vpp.vpp.classifier.context.VppClassifierContextManager;
-import io.fd.honeycomb.translate.MappingContext;
+import io.fd.honeycomb.translate.write.WriteContext;
import io.fd.vpp.jvpp.core.dto.IpAddDelRoute;
import java.util.Optional;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv4.Route;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.NextHopOptions;
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.vpp.ipv4.unicast.routing.rev180319.VppIpv4RouteAttributesAugmentation;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.ipv4.unicast.routing.rev180319.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv4.route.VppIpv4Route;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.ipv6.unicast.routing.rev180319.VppIpv6RouteAttributesAugmentation;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.ipv6.unicast.routing.rev180319.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv6.route.VppIpv6Route;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev180319.VppRouteAttributes;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.types.rev180406.VniReference;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.Ipv6;
+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.Table;
+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.KeyedInstanceIdentifier;
public class TableLookupRequestFactory extends BasicHopRequestFactory implements RouteRequestProducer {
@@ -50,20 +55,27 @@ public class TableLookupRequestFactory extends BasicHopRequestFactory implements
public IpAddDelRoute createV4TableLookupRouteRequest(final boolean add,
@Nonnull final String parentProtocolName,
@Nonnull final Route route,
- @Nonnull final MappingContext mappingContext) {
+ @Nonnull final WriteContext writeContext) {
final Ipv4Prefix prefix = route.getDestinationPrefix();
final byte[] destinationAddress = ipv4AddressPrefixToArray(prefix);
final byte destinationPrefix = extractPrefix(prefix);
- final int primaryTableId = getRoutingProtocolContext().getIndex(parentProtocolName, mappingContext);
- final byte secondaryTableId = Optional.ofNullable(route.getNextHop().getNextHopOptions())
+ final int primaryTableId = getRoutingProtocolContext().getIndex(parentProtocolName,
+ writeContext.getMappingContext());
+ final Long secondaryTableId = Optional.ofNullable(route.getNextHop().getNextHopOptions())
.filter(nextHopOptions -> nextHopOptions instanceof TableLookupCase)
.map(TableLookupCase.class::cast)
.map(TableLookupCase::getSecondaryVrf)
.map(VniReference::getValue)
- .map(Long::byteValue)
.orElseThrow(() -> new IllegalArgumentException("Table lookup option not specified correctly"));
+ TableKey key = new TableKey(Ipv4.class, new VniReference(secondaryTableId));
+ KeyedInstanceIdentifier<Table, TableKey> fibIid = FibManagementIIds.FM_FIB_TABLES.child(Table.class, key);
+ if (!writeContext.readAfter(fibIid).isPresent()) {
+ throw new IllegalArgumentException(
+ String.format("Lookup table: %s not found for route: %s", secondaryTableId, route));
+ }
+
VppIpv4Route vppIpv4Route =
route.getAugmentation(VppIpv4RouteAttributesAugmentation.class) != null ? route.getAugmentation(
VppIpv4RouteAttributesAugmentation.class).getVppIpv4Route() : null;
@@ -71,42 +83,53 @@ public class TableLookupRequestFactory extends BasicHopRequestFactory implements
final Optional<String> optClassifyTable = Optional.ofNullable(vppIpv4Route)
.map(VppRouteAttributes::getClassifyTable);
final byte classifyTableSet = booleanToByte(optClassifyTable.isPresent());
- final byte classifyTableIndex = optClassifyTable.map(tableName -> classifyTableIndex(tableName, getVppClassifierContextManager(), mappingContext))
+ final byte classifyTableIndex = optClassifyTable
+ .map(tableName -> classifyTableIndex(tableName, getVppClassifierContextManager(),
+ writeContext.getMappingContext()))
.map(Integer::byteValue)
.orElse(DEFAULT_CLASSIFY_TABLE_INDEX);
- return flaglessAddDelRouteRequest(booleanToByte(add), ~0, DEAGRAGATION_ADDRESS, (byte) 0, (byte) 0, destinationAddress,
- destinationPrefix, (byte) 0, primaryTableId, secondaryTableId, classifyTableIndex, classifyTableSet);
+ return flaglessAddDelRouteRequest(booleanToByte(add), ~0, DEAGRAGATION_ADDRESS, (byte) 0, (byte) 0,
+ destinationAddress, destinationPrefix, (byte) 0, primaryTableId, secondaryTableId.intValue(),
+ classifyTableIndex, classifyTableSet);
}
public IpAddDelRoute createV6TableLookupRouteRequest(final boolean add,
@Nonnull final String parentProtocolName,
@Nonnull final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv6.Route route,
- @Nonnull final MappingContext mappingContext) {
+ @Nonnull final WriteContext writeContext) {
final Ipv6Prefix prefix = route.getDestinationPrefix();
final byte[] destinationAddress = ipv6AddressPrefixToArray(prefix);
final byte destinationPrefix = extractPrefix(prefix);
- final int primaryTableId = getRoutingProtocolContext().getIndex(parentProtocolName, mappingContext);
- final byte secondaryTableId = Optional.ofNullable(route.getNextHop().getNextHopOptions())
+ final int primaryTableId =
+ getRoutingProtocolContext().getIndex(parentProtocolName, writeContext.getMappingContext());
+ final Long secondaryTableId = Optional.ofNullable(route.getNextHop().getNextHopOptions())
.filter(nextHopOptions -> nextHopOptions instanceof TableLookupCase)
.map(TableLookupCase.class::cast)
.map(TableLookupCase::getSecondaryVrf)
.map(VniReference::getValue)
- .map(Long::byteValue)
.orElseThrow(() -> new IllegalArgumentException("Table lookup option not specified correctly"));
+ TableKey key = new TableKey(Ipv6.class, new VniReference(secondaryTableId));
+ KeyedInstanceIdentifier<Table, TableKey> fibIid = FibManagementIIds.FM_FIB_TABLES.child(Table.class, key);
+ if (!writeContext.readAfter(fibIid).isPresent()) {
+ throw new IllegalArgumentException(
+ String.format("Lookup table: %s not found for route: %s", secondaryTableId, route));
+ }
+
VppIpv6Route vppIpv6Route = route.getAugmentation(VppIpv6RouteAttributesAugmentation.class) != null
? route.getAugmentation(VppIpv6RouteAttributesAugmentation.class).getVppIpv6Route() : null;
final Optional<String> optClassifyTable = Optional.ofNullable(vppIpv6Route)
.map(VppRouteAttributes::getClassifyTable);
final byte classifyTableSet = booleanToByte(optClassifyTable.isPresent());
- final byte classifyTableIndex = optClassifyTable.map(tableName -> classifyTableIndex(tableName, getVppClassifierContextManager(), mappingContext))
- .map(Integer::byteValue)
- .orElse(DEFAULT_CLASSIFY_TABLE_INDEX);
+ final byte classifyTableIndex = optClassifyTable
+ .map(tableName -> classifyTableIndex(tableName, getVppClassifierContextManager(),
+ writeContext.getMappingContext())).map(Integer::byteValue).orElse(DEFAULT_CLASSIFY_TABLE_INDEX);
- return flaglessAddDelRouteRequest(booleanToByte(add), ~0, DEAGRAGATION_ADDRESS, (byte) 0, (byte) 1, destinationAddress,
- destinationPrefix, (byte) 0, primaryTableId, secondaryTableId, classifyTableIndex, classifyTableSet);
+ return flaglessAddDelRouteRequest(booleanToByte(add), ~0, DEAGRAGATION_ADDRESS, (byte) 0, (byte) 1,
+ destinationAddress, destinationPrefix, (byte) 0, primaryTableId, secondaryTableId.intValue(),
+ classifyTableIndex, classifyTableSet);
}
}