diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-02-23 08:38:18 +0100 |
---|---|---|
committer | Jan Srnicek <jsrnicek@cisco.com> | 2017-02-23 08:39:34 +0100 |
commit | 210b21cf903da53b91cf8143be9a5be295139f17 (patch) | |
tree | 85c53470923f0f4eda9e9516ed1d353a079ee5f1 /routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory | |
parent | 27922cc77498479eabe58cf82647b31aa880a0cc (diff) |
HC2VPP-83 - table id setup for special routes
Added primary/secondary table id setup for special v4/v6 routes
Change-Id: Id3ef3d383b5ad7b5b905a04f7f594fdf4b7a4104
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory')
3 files changed, 53 insertions, 58 deletions
diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/SpecialNextHopRequestFactory.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/SpecialNextHopRequestFactory.java index 2a5ab9821..e9c9c63ee 100644 --- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/SpecialNextHopRequestFactory.java +++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/SpecialNextHopRequestFactory.java @@ -16,31 +16,41 @@ package io.fd.hc2vpp.routing.write.factory; -import static com.google.common.base.Preconditions.checkNotNull; - -import io.fd.hc2vpp.routing.write.factory.base.ClassifierContextHolder; +import io.fd.hc2vpp.common.translate.util.NamingContext; +import io.fd.hc2vpp.routing.write.factory.base.BasicHopRequestFactory; import io.fd.hc2vpp.routing.write.trait.RouteRequestProducer; import io.fd.hc2vpp.v3po.vppclassifier.VppClassifierContextManager; import io.fd.honeycomb.translate.MappingContext; import io.fd.vpp.jvpp.core.dto.IpAddDelRoute; -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.routing.rev140524.SpecialNextHopGrouping; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev161214.VniReference; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev161214.VppRouteAttributes; + +import javax.annotation.Nonnull; +import java.util.Optional; -public class SpecialNextHopRequestFactory extends ClassifierContextHolder +import static com.google.common.base.Preconditions.checkNotNull; + +public class SpecialNextHopRequestFactory extends BasicHopRequestFactory implements RouteRequestProducer { - private SpecialNextHopRequestFactory(final VppClassifierContextManager classifierContextManager) { - super(classifierContextManager); + private SpecialNextHopRequestFactory(final VppClassifierContextManager classifierContextManager, + final NamingContext interfaceContext, + final NamingContext routingProtocolContext) { + super(classifierContextManager,interfaceContext,routingProtocolContext); } - public static SpecialNextHopRequestFactory forClassifierContext( - @Nonnull final VppClassifierContextManager classifierContextManager) { - return new SpecialNextHopRequestFactory(classifierContextManager); + public static SpecialNextHopRequestFactory forContexts( + @Nonnull final VppClassifierContextManager classifierContextManager, + @Nonnull final NamingContext interfaceContext, + @Nonnull final NamingContext routingProtocolContext) { + return new SpecialNextHopRequestFactory(classifierContextManager, interfaceContext, routingProtocolContext); } public IpAddDelRoute createIpv4SpecialHopRequest(final boolean add, + @Nonnull final String parentProtocolName, @Nonnull final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev140524.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.Route route, @Nonnull final MappingContext mappingContext, @Nonnull final SpecialNextHopGrouping.SpecialNextHop flagsVariant) { @@ -48,10 +58,18 @@ public class SpecialNextHopRequestFactory extends ClassifierContextHolder checkNotNull(mappingContext, "Mapping Context cannot be null"); checkNotNull(flagsVariant, "Flags variant cannot be null"); - return resolveFlags(getSpecialHopRequest(add, route.getDestinationPrefix()), flagsVariant); + final int parentProtocolTableId = getRoutingProtocolContext().getIndex(parentProtocolName,mappingContext); + final byte secondaryTableId = Optional.ofNullable(route.getVppIpv4Route()) + .map(VppRouteAttributes::getSecondaryVrf) + .map(VniReference::getValue) + .map(Long::byteValue) + .orElse(DEFAULT_VNI); + + return resolveFlags(getSpecialHopRequest(add, route.getDestinationPrefix(), (byte) parentProtocolTableId, secondaryTableId), flagsVariant); } public IpAddDelRoute createIpv6SpecialHopRequest(final boolean add, + @Nonnull final String parentProtocolName, @Nonnull final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev140525.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.Route route, @Nonnull final MappingContext mappingContext, @Nonnull final SpecialNextHopGrouping.SpecialNextHop flagsVariant) { @@ -60,20 +78,29 @@ public class SpecialNextHopRequestFactory extends ClassifierContextHolder checkNotNull(mappingContext, "Mapping Context cannot be null"); checkNotNull(flagsVariant, "Flags variant cannot be null"); - return resolveFlags(getSpecialHopRequest(add, route.getDestinationPrefix()), flagsVariant); + final int parentProtocolTableId = getRoutingProtocolContext().getIndex(parentProtocolName,mappingContext); + final byte secondaryTableId = Optional.ofNullable(route.getVppIpv6Route()) + .map(VppRouteAttributes::getSecondaryVrf) + .map(VniReference::getValue) + .map(Long::byteValue) + .orElse(DEFAULT_VNI); + + return resolveFlags(getSpecialHopRequest(add, route.getDestinationPrefix(), (byte) parentProtocolTableId, secondaryTableId), flagsVariant); } - private IpAddDelRoute getSpecialHopRequest(final boolean isAdd, @Nonnull final Ipv6Prefix destinationAddress) { + private IpAddDelRoute getSpecialHopRequest(final boolean isAdd, @Nonnull final Ipv6Prefix destinationAddress, + final byte primaryTableId, final byte secondaryTableId) { return flaglessAddDelRouteRequest(booleanToByte(isAdd), 0, null, DEFAULT_HOP_WEIGHT, BYTE_TRUE, ipv6AddressPrefixToArray(destinationAddress), extractPrefix(destinationAddress.getValue()), BYTE_FALSE, - DEFAULT_VNI, DEFAULT_VNI, DEFAULT_CLASSIFY_TABLE_INDEX, BYTE_FALSE); + primaryTableId, secondaryTableId, DEFAULT_CLASSIFY_TABLE_INDEX, BYTE_FALSE); } - private IpAddDelRoute getSpecialHopRequest(final boolean isAdd, @Nonnull final Ipv4Prefix destinationAddress) { + private IpAddDelRoute getSpecialHopRequest(final boolean isAdd, @Nonnull final Ipv4Prefix destinationAddress, + final byte primaryTableId, final byte secondaryTableId) { return flaglessAddDelRouteRequest(booleanToByte(isAdd), 0, null, DEFAULT_HOP_WEIGHT, BYTE_FALSE, ipv4AddressPrefixToArray(destinationAddress), extractPrefix(destinationAddress.getValue()), BYTE_FALSE, - DEFAULT_VNI, DEFAULT_VNI, DEFAULT_CLASSIFY_TABLE_INDEX, BYTE_FALSE); + primaryTableId, secondaryTableId, DEFAULT_CLASSIFY_TABLE_INDEX, BYTE_FALSE); } private IpAddDelRoute resolveFlags(IpAddDelRoute request, diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/base/BasicHopRequestFactory.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/base/BasicHopRequestFactory.java index abaf0fa84..740c30c21 100644 --- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/base/BasicHopRequestFactory.java +++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/base/BasicHopRequestFactory.java @@ -16,17 +16,19 @@ package io.fd.hc2vpp.routing.write.factory.base; -import static com.google.common.base.Preconditions.checkNotNull; - import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.v3po.vppclassifier.VppClassifierContextManager; + import javax.annotation.Nonnull; +import static com.google.common.base.Preconditions.checkNotNull; + /** * Extension to {@code ClassifierContextHolder} to hold also {@code NamingContext} */ -public abstract class BasicHopRequestFactory extends ClassifierContextHolder { +public abstract class BasicHopRequestFactory { + private final VppClassifierContextManager classifierContextManager; private final NamingContext interfaceNamingContext; private final NamingContext routingProtocolContext; @@ -34,11 +36,15 @@ public abstract class BasicHopRequestFactory extends ClassifierContextHolder { @Nonnull final VppClassifierContextManager classifierContextManager, @Nonnull final NamingContext interfaceContext, @Nonnull final NamingContext routingProtocolContext) { - super(classifierContextManager); + this.classifierContextManager = checkNotNull(classifierContextManager, "Classifier context cannot be null"); this.interfaceNamingContext = checkNotNull(interfaceContext, "Interface context cannot be null"); this.routingProtocolContext = checkNotNull(routingProtocolContext, "Routing protocol context cannot be null"); } + protected VppClassifierContextManager getVppClassifierContextManager() { + return this.classifierContextManager; + } + protected NamingContext getInterfaceNamingContext() { return interfaceNamingContext; } diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/base/ClassifierContextHolder.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/base/ClassifierContextHolder.java deleted file mode 100644 index 0b11a9b3b..000000000 --- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/factory/base/ClassifierContextHolder.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.hc2vpp.routing.write.factory.base; - -import static com.google.common.base.Preconditions.checkNotNull; - -import io.fd.hc2vpp.v3po.vppclassifier.VppClassifierContextManager; -import javax.annotation.Nonnull; - -/** - * Holds reference for - */ -public abstract class ClassifierContextHolder { - - private final VppClassifierContextManager classifierContextManager; - - protected ClassifierContextHolder(@Nonnull final VppClassifierContextManager classifierContextManager) { - this.classifierContextManager = checkNotNull(classifierContextManager, "Classifier context cannot be null"); - } - - protected VppClassifierContextManager getVppClassifierContextManager() { - return this.classifierContextManager; - } -} |