diff options
Diffstat (limited to 'srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect')
5 files changed, 136 insertions, 22 deletions
diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java index 63de40b9c..551a211dd 100644 --- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java +++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX2FunctionBinder.java @@ -19,15 +19,22 @@ package io.fd.hc2vpp.srv6.util.function.xconnect; import com.google.common.base.Preconditions; import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest; +import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.write.WriteContext; +import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails; import io.fd.vpp.jvpp.core.future.FutureJVppCore; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx2Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.end.dx2.PathsBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX2; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType; public class EndDX2FunctionBinder extends XConnectFunctionBinder { + private static final int END_DX2_FUNCTION_VALUE = 5; + public EndDX2FunctionBinder(@Nonnull final FutureJVppCore api, @Nonnull final NamingContext interfaceContext) { super(api, interfaceContext); } @@ -48,9 +55,21 @@ public class EndDX2FunctionBinder extends XConnectFunctionBinder { return request; } + @Override + public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx, + @Nonnull final SidBuilder builder) { + String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable); + builder.setEndDx2(new EndDx2Builder().setPaths(new PathsBuilder().setInterface(interfaceName).build()).build()); + } + @Nonnull @Override public Class<? extends Srv6EndpointType> getHandledFunctionType() { return EndDX2.class; } + + @Override + public int getBehaviourFunctionType() { + return END_DX2_FUNCTION_VALUE; + } } diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java index 51abc9876..cb8dbfeb1 100644 --- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java +++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX4FunctionBinder.java @@ -19,18 +19,30 @@ package io.fd.hc2vpp.srv6.util.function.xconnect; import com.google.common.base.Preconditions; import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest; +import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.write.WriteContext; +import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails; import io.fd.vpp.jvpp.core.future.FutureJVppCore; +import java.util.Collections; import java.util.Optional; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v4.PathsBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v4.paths.Path; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v4.paths.PathBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx4Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.PathAttrsCmn; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX4; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType; public class EndDX4FunctionBinder extends XConnectFunctionBinder { + private static final int END_DX4_FUNCTION_VALUE = 7; + public EndDX4FunctionBinder(@Nonnull FutureJVppCore api, @Nonnull NamingContext interfaceContext) { super(api, interfaceContext); } @@ -52,9 +64,31 @@ public class EndDX4FunctionBinder extends XConnectFunctionBinder { return request; } + @Override + public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx, + @Nonnull final SidBuilder builder) { + Ipv4AddressNoZone ipv4AddressNoZone = arrayToIpv4AddressNoZone(data.xconnectNhAddr4); + String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable); + EndDx4 endDx4 = new EndDx4Builder().setPaths(new PathsBuilder().setPath(Collections.singletonList( + // TODO(HC2VPP-335): currently vpp allows to configure only one next hop + // therefore setting path index, role and weight to constants + new PathBuilder().setNextHop(ipv4AddressNoZone) + .setInterface(interfaceName) + .setPathIndex(DEFAULT_PATH_INDEX) + .setWeight(DEFAULT_WEIGHT) + .setRole(PathAttrsCmn.Role.PRIMARY) + .build())).build()).build(); + builder.setEndDx4(endDx4); + } + @Nonnull @Override public Class<? extends Srv6EndpointType> getHandledFunctionType() { return EndDX4.class; } + + @Override + public int getBehaviourFunctionType() { + return END_DX4_FUNCTION_VALUE; + } } diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java index 71194fbd4..3c1218005 100644 --- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java +++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndDX6FunctionBinder.java @@ -19,18 +19,30 @@ package io.fd.hc2vpp.srv6.util.function.xconnect; import com.google.common.base.Preconditions; import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest; +import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.write.WriteContext; +import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails; import io.fd.vpp.jvpp.core.future.FutureJVppCore; +import java.util.Collections; import java.util.Optional; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.PathsBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.Path; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.PathBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndDx6Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.PathAttrsCmn; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX6; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType; public class EndDX6FunctionBinder extends XConnectFunctionBinder { + private static final int END_DX6_FUNCTION_VALUE = 6; + public EndDX6FunctionBinder(@Nonnull FutureJVppCore api, @Nonnull NamingContext interfaceContext) { super(api, interfaceContext); } @@ -52,9 +64,31 @@ public class EndDX6FunctionBinder extends XConnectFunctionBinder { return request; } + @Override + public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx, + @Nonnull final SidBuilder builder) { + Ipv6AddressNoZone ipv6AddressNoZone = arrayToIpv6AddressNoZone(data.xconnectNhAddr6); + String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable); + EndDx6 endDx6 = new EndDx6Builder().setPaths(new PathsBuilder().setPath(Collections.singletonList( + // TODO(HC2VPP-335): currently vpp allows to configure only one next hop + // therefore setting path index, role and weight to constants + new PathBuilder().setNextHop(ipv6AddressNoZone) + .setInterface(interfaceName) + .setPathIndex(DEFAULT_PATH_INDEX) + .setWeight(DEFAULT_WEIGHT) + .setRole(PathAttrsCmn.Role.PRIMARY) + .build())).build()).build(); + builder.setEndDx6(endDx6); + } + @Nonnull @Override public Class<? extends Srv6EndpointType> getHandledFunctionType() { return EndDX6.class; } + + @Override + public int getBehaviourFunctionType() { + return END_DX6_FUNCTION_VALUE; + } } diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java index 0b3af395c..e153bd5f8 100644 --- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java +++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/EndXFunctionBinder.java @@ -19,17 +19,29 @@ package io.fd.hc2vpp.srv6.util.function.xconnect; import com.google.common.base.Preconditions; import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest; +import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.write.WriteContext; +import io.fd.vpp.jvpp.core.dto.SrLocalsidsDetails; import io.fd.vpp.jvpp.core.future.FutureJVppCore; +import java.util.Collections; import java.util.Optional; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.PathsBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.Path; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.multi.paths.v6.paths.PathBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.Sid; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6._static.cfg.SidBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6._static.rev180301.srv6.sid.config.EndXBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.base.rev180301.PathAttrsCmn; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndX; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType; public class EndXFunctionBinder extends XConnectFunctionBinder { + private static final int END_X_FUNCTION_VALUE = 2; + public EndXFunctionBinder(@Nonnull FutureJVppCore api, @Nonnull NamingContext interfaceContext) { super(api, interfaceContext); } @@ -53,9 +65,33 @@ public class EndXFunctionBinder extends XConnectFunctionBinder { return request; } + @Override + public void translateFromDump(@Nonnull SrLocalsidsDetails data, @Nonnull ReadContext ctx, + @Nonnull final SidBuilder builder) { + Ipv6AddressNoZone ipv6AddressNoZone = arrayToIpv6AddressNoZone(data.xconnectNhAddr6); + String interfaceName = getInterfaceName(ctx.getMappingContext(), data.xconnectIfaceOrVrfTable); + EndXBuilder endX = new EndXBuilder() + // TODO(HC2VPP-335): currently vpp allows to configure only one next hop + // therefore setting path index, role and weight to constants + .setPaths(new PathsBuilder().setPath(Collections.singletonList( + new PathBuilder() + .setNextHop(ipv6AddressNoZone) + .setInterface(interfaceName) + .setPathIndex(DEFAULT_PATH_INDEX) + .setWeight(DEFAULT_WEIGHT) + .setRole(PathAttrsCmn.Role.PRIMARY) + .build())).build()); + builder.setEndX(endX.build()); + } + @Nonnull @Override public Class<? extends Srv6EndpointType> getHandledFunctionType() { - return org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndX.class; + return EndX.class; + } + + @Override + public int getBehaviourFunctionType() { + return END_X_FUNCTION_VALUE; } } diff --git a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java index 9f69c9041..eef5d9622 100644 --- a/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java +++ b/srv6/srv6-impl/src/main/java/io/fd/hc2vpp/srv6/util/function/xconnect/XConnectFunctionBinder.java @@ -16,46 +16,37 @@ package io.fd.hc2vpp.srv6.util.function.xconnect; -import static com.google.common.base.Preconditions.checkState; import static java.lang.String.format; -import com.google.common.collect.ImmutableMap; import io.fd.hc2vpp.common.translate.util.AddressTranslator; import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer; import io.fd.hc2vpp.common.translate.util.NamingContext; -import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionBinder; +import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionReadBinder; +import io.fd.hc2vpp.srv6.util.function.LocalSidFunctionWriteBinder; import io.fd.hc2vpp.srv6.write.sid.request.XConnectLocalSidRequest; import io.fd.honeycomb.translate.MappingContext; import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import java.util.Map; import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX2; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX4; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndDX6; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.EndX; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.srv6.types.rev180301.Srv6EndpointType; abstract class XConnectFunctionBinder extends FutureJVppCustomizer - implements LocalSidFunctionBinder<XConnectLocalSidRequest>, AddressTranslator { - - private static final Map<Class<? extends Srv6EndpointType>, Integer> - REGISTER = ImmutableMap.of(EndX.class, 2, - EndDX2.class, 5, - EndDX4.class, 7, - EndDX6.class, 6); + implements LocalSidFunctionWriteBinder<XConnectLocalSidRequest>, LocalSidFunctionReadBinder, AddressTranslator { private final NamingContext interfaceContext; + static final long DEFAULT_WEIGHT = 1L; + static final short DEFAULT_PATH_INDEX = 1; XConnectFunctionBinder(@Nonnull final FutureJVppCore api, @Nonnull final NamingContext interfaceContext) { super(api); this.interfaceContext = interfaceContext; - checkState(REGISTER.containsKey(getHandledFunctionType()), "Unsupported type of Local SID function %s", - getHandledFunctionType()); } - @Override - public int getBehaviourFunctionType() { - return REGISTER.get(getHandledFunctionType()); + String getInterfaceName(final MappingContext ctx, final int index) { + return interfaceContext.getName(index, ctx); + } + + protected int getVLanIndex(final MappingContext ctx, final String name) { + return interfaceContext.getIndex(name, ctx, () -> new IllegalArgumentException( + format("VLan with name %s not found", name))); } int getInterfaceIndex(final MappingContext ctx, final String name) { |