diff options
Diffstat (limited to 'mpls/impl/src/main/java/io/fd/hc2vpp/mpls/Ipv4LookupWriter.java')
-rw-r--r-- | mpls/impl/src/main/java/io/fd/hc2vpp/mpls/Ipv4LookupWriter.java | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/mpls/impl/src/main/java/io/fd/hc2vpp/mpls/Ipv4LookupWriter.java b/mpls/impl/src/main/java/io/fd/hc2vpp/mpls/Ipv4LookupWriter.java index 7ac164a96..94862c52b 100644 --- a/mpls/impl/src/main/java/io/fd/hc2vpp/mpls/Ipv4LookupWriter.java +++ b/mpls/impl/src/main/java/io/fd/hc2vpp/mpls/Ipv4LookupWriter.java @@ -25,8 +25,6 @@ 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.mpls._static.rev170310.StaticLspConfig; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310._static.lsp.Config; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310._static.lsp_config.InSegment; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310._static.lsp_config.in.segment.type.MplsLabel; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.mpls._static.rev170310.routing.mpls._static.lsps.StaticLsp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.mpls.rev171120.LookupType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.mpls.rev171120.StaticLspVppLookupAugmentation; @@ -38,7 +36,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; * * @see <a href="https://git.fd.io/vpp/tree/src/vnet/mpls/mpls.api">mpls_route_add_del</a> definition */ -final class Ipv4LookupWriter implements LspWriter { +final class Ipv4LookupWriter implements LspWriter, MplsInSegmentTranslator { private static final byte IPV4_PROTOCOL = (byte) LookupType.Ipv4.getIntValue(); private final FutureJVppCore vppApi; @@ -55,8 +53,8 @@ final class Ipv4LookupWriter implements LspWriter { request.mrIsAdd = booleanToByte(isAdd); - translate(request, config); - translate(request, config.getAugmentation(StaticLspVppLookupAugmentation.class)); + translate(config.getInSegment(), request); + translate(config.getAugmentation(StaticLspVppLookupAugmentation.class), request); // default values based on inspecting VPP's CLI and make test code request.mrClassifyTableIndex = -1; @@ -70,23 +68,12 @@ final class Ipv4LookupWriter implements LspWriter { getReplyForWrite(vppApi.mplsRouteAddDel(request).toCompletableFuture(), id); } - private void translate(@Nonnull final MplsRouteAddDel request, @Nonnull final Config config) { - final InSegment inSegment = config.getInSegment(); - checkArgument(inSegment != null, "Configuring ipv4 pop-and-lookup, but in-segment is missing."); - - checkArgument(inSegment.getType() instanceof MplsLabel, "Expecting mpls-label in-segment type, but %s given.", - inSegment.getType()); - final Long label = ((MplsLabel) inSegment.getType()).getIncomingLabel().getValue(); - request.mrLabel = label.intValue(); - } - - private void translate(@Nonnull final MplsRouteAddDel request, - @Nonnull final StaticLspVppLookupAugmentation vppLabelLookup) { + private void translate(@Nonnull final StaticLspVppLookupAugmentation vppLabelLookup, + @Nonnull final MplsRouteAddDel request) { // IPv4 lookup should only happen if there is no more labels to process, so setting the EOS bit: request.mrEos = 1; - final Long lookupInTable = vppLabelLookup.getLabelLookup().getIp4LookupInTable(); - checkArgument(lookupInTable != null, - "Configuring pop and ipv4 lookup, but ipv4 lookup table was not given"); - request.mrNextHopTableId = lookupInTable.intValue(); + final Long lookupTable = vppLabelLookup.getLabelLookup().getIp4LookupInTable(); + checkArgument(lookupTable != null, "Configuring pop and ipv4 lookup, but ipv4 lookup table was not given"); + request.mrNextHopTableId = lookupTable.intValue(); } } |