diff options
Diffstat (limited to 'lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read')
6 files changed, 54 insertions, 28 deletions
diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/AdjacencyCustomizer.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/AdjacencyCustomizer.java index 72ed941f5..afbe2f3bf 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/AdjacencyCustomizer.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/AdjacencyCustomizer.java @@ -145,9 +145,11 @@ public class AdjacencyCustomizer extends FutureJVppCustomizer builder.setId(currentAdjacencyId) .setKey(new AdjacencyKey(currentAdjacencyId)) .setLocalEid(getArrayAsLocalEid( - MappingsDumpParams.EidType.valueOf(currentAdjacency.eidType), currentAdjacency.leid, vni)) + MappingsDumpParams.EidType.valueOf(currentAdjacency.eidType), currentAdjacency.leid, + currentAdjacency.leidPrefixLen, vni)) .setRemoteEid(getArrayAsRemoteEid( - MappingsDumpParams.EidType.valueOf(currentAdjacency.eidType), currentAdjacency.reid, vni)); + MappingsDumpParams.EidType.valueOf(currentAdjacency.eidType), currentAdjacency.reid, + currentAdjacency.reidPrefixLen, vni)); } private EntityDumpExecutor<OneAdjacenciesGetReply, AdjacencyDumpParams> createExecutor() { @@ -199,9 +201,11 @@ public class AdjacencyCustomizer extends FutureJVppCustomizer final MappingContext mappingContext) { return new EidIdentificatorPairBuilder() .setLocalEidId(new MappingId(localMappingContext.getId(getArrayAsEidLocal( - MappingsDumpParams.EidType.valueOf(data.eidType), data.leid, vni), mappingContext))) + MappingsDumpParams.EidType.valueOf(data.eidType), data.leid, data.leidPrefixLen, vni), + mappingContext))) .setRemoteEidId(new MappingId(remoteMappingContext.getId(getArrayAsEidLocal( - MappingsDumpParams.EidType.valueOf(data.eidType), data.reid, vni), mappingContext))) + MappingsDumpParams.EidType.valueOf(data.eidType), data.reid, data.reidPrefixLen, vni), + mappingContext))) .build(); } } diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/LocalMappingCustomizer.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/LocalMappingCustomizer.java index ff71d9c00..81409296d 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/LocalMappingCustomizer.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/LocalMappingCustomizer.java @@ -105,7 +105,6 @@ public class LocalMappingCustomizer final long vni = id.firstKeyOf(VniTable.class).getVirtualNetworkIdentifier(); - final String localMappingId = id.firstKeyOf(LocalMapping.class).getId().getValue(); final Eid eid = localMappingContext.getEid(mappingId, ctx.getMappingContext()); //Requesting for specific mapping dump,only from local mappings with specified eid/vni/eid type @@ -135,7 +134,7 @@ public class LocalMappingCustomizer "No Locator Set name found for index %s", details.locatorSetIndex); builder.setLocatorSet(locatorSetContext.getName(details.locatorSetIndex, ctx.getMappingContext())); builder.setKey(new LocalMappingKey(new MappingId(id.firstKeyOf(LocalMapping.class).getId()))); - builder.setEid(getArrayAsEidLocal(valueOf(details.eidType), details.eid, details.vni)); + builder.setEid(getArrayAsEidLocal(valueOf(details.eidType), details.eid, details.eidPrefixLen, details.vni)); if (details.key != null) { builder.setHmacKey( @@ -149,7 +148,7 @@ public class LocalMappingCustomizer } private Address getAddressFromDumpDetail(final OneEidTableDetails detail) { - return getArrayAsEidLocal(valueOf(detail.eidType), detail.eid, detail.vni).getAddress(); + return getArrayAsEidLocal(valueOf(detail.eidType), detail.eid, detail.eidPrefixLen, detail.vni).getAddress(); } @Override @@ -184,7 +183,7 @@ public class LocalMappingCustomizer return replyOptional.get().oneEidTableDetails.stream() .filter(a -> a.vni == vni) .filter(subtableFilterForLocalMappings(id)) - .map(detail -> getArrayAsEidLocal(valueOf(detail.eidType), detail.eid, detail.vni)) + .map(detail -> getArrayAsEidLocal(valueOf(detail.eidType), detail.eid, detail.eidPrefixLen, detail.vni)) .map(localEid -> localMappingContext.getId(localEid, context.getMappingContext())) .map(MappingId::new) .map(LocalMappingKey::new) diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java index 2ba9eb831..04b89a59f 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/RemoteMappingCustomizer.java @@ -148,7 +148,6 @@ public class RemoteMappingCustomizer extends FutureJVppCustomizer "No mapping stored for id %s", mappingId); final long vni = id.firstKeyOf(VniTable.class).getVirtualNetworkIdentifier(); - final String remoteMappingId = id.firstKeyOf(RemoteMapping.class).getId().getValue(); final Eid eid = copyEid(remoteMappingContext.getEid(mappingId, ctx.getMappingContext())); final MappingsDumpParams dumpParams = new MappingsDumpParamsBuilder() .setVni(Long.valueOf(vni).intValue()) @@ -172,11 +171,11 @@ public class RemoteMappingCustomizer extends FutureJVppCustomizer OneEidTableDetails details = replyOptional.get().oneEidTableDetails.stream() .filter(subtableFilterForRemoteMappings(id)) .filter(a -> compareAddresses(eid.getAddress(), - getArrayAsEidLocal(valueOf(a.eidType), a.eid, a.vni).getAddress())) + getArrayAsEidLocal(valueOf(a.eidType), a.eid, a.eidPrefixLen, a.vni).getAddress())) .collect( RWUtils.singleItemCollector()); - builder.setEid(getArrayAsEidRemote(valueOf(details.eidType), details.eid, details.vni)); + builder.setEid(getArrayAsEidRemote(valueOf(details.eidType), details.eid, details.eidPrefixLen, details.vni)); builder.setKey(new RemoteMappingKey(new MappingId(id.firstKeyOf(RemoteMapping.class).getId()))); builder.setTtl(resolveTtl(details.ttl)); builder.setAuthoritative( @@ -217,7 +216,7 @@ public class RemoteMappingCustomizer extends FutureJVppCustomizer .stream() .filter(a -> a.vni == vni) .filter(subtableFilterForRemoteMappings(id)) - .map(detail -> getArrayAsEidRemote(valueOf(detail.eidType), detail.eid, detail.vni)) + .map(detail -> getArrayAsEidRemote(valueOf(detail.eidType), detail.eid, detail.eidPrefixLen, detail.vni)) .map(remoteEid -> remoteMappingContext.getId(remoteEid, context.getMappingContext())) .map(MappingId::new) .map(RemoteMappingKey::new) diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/dump/executor/params/MappingsDumpParams.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/dump/executor/params/MappingsDumpParams.java index 6b422f503..3c440668d 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/dump/executor/params/MappingsDumpParams.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/dump/executor/params/MappingsDumpParams.java @@ -16,7 +16,9 @@ package io.fd.hc2vpp.lisp.translate.read.dump.executor.params; +import com.google.common.collect.ImmutableMap; import java.util.Arrays; +import java.util.Map; /** * Parameters for executing dump of mappings @@ -82,15 +84,27 @@ public final class MappingsDumpParams { public enum EidType { IPV4(0), IPV6(1), - MAC(2); - + MAC(2), + IPV4_PREFIX(3), + IPV6_PREFIX(4); + + /** + * From vpp api perspective, ipv4 is the same as ipv4-prefix, it differs just in prefix value. + * Respectively for ipv6/ipv6-prefix + */ + private static final Map<EidType, Integer> VPP_EID_TYPE_REGISTER = ImmutableMap.of( + IPV4, 0, IPV6, 1, MAC, 2, IPV4_PREFIX, 0, IPV6_PREFIX, 1); + + /** + * This value should be use just for our logic, do not use it to bind vpp requests + */ private final int value; private EidType(final int value) { this.value = value; } - public static final EidType valueOf(int value) { + public static EidType valueOf(int value) { switch (value) { case 0: return IPV4; @@ -98,13 +112,17 @@ public final class MappingsDumpParams { return IPV6; case 2: return MAC; + case 3: + return IPV4_PREFIX; + case 4: + return IPV6_PREFIX; default: throw new IllegalArgumentException("Illegal value"); } } - public final int getValue() { - return this.value; + public final int getVppTypeBinding() { + return VPP_EID_TYPE_REGISTER.get(this); } } @@ -150,10 +168,6 @@ public final class MappingsDumpParams { private byte[] eid; private byte filter; - public static final MappingsDumpParamsBuilder newInstance() { - return new MappingsDumpParamsBuilder(); - } - public MappingsDumpParamsBuilder setEidSet(final QuantityType quantityType) { this.eidSet = (byte) quantityType.getValue(); return this; @@ -170,7 +184,7 @@ public final class MappingsDumpParams { } public MappingsDumpParamsBuilder setEidType(final EidType eidType) { - this.eidType = (byte) eidType.getValue(); + this.eidType = (byte) eidType.getVppTypeBinding(); return this; } diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingProducer.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingProducer.java index c9694c7a6..bceae832e 100644 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingProducer.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingProducer.java @@ -16,10 +16,14 @@ package io.fd.hc2vpp.lisp.translate.read.trait; +import com.google.common.collect.ImmutableSet; import io.fd.honeycomb.translate.write.WriteFailedException; +import java.util.Set; import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.LocalMapping; @@ -33,15 +37,21 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; */ public interface MappingProducer { + Set<Class<? extends LispAddressFamily>> VRF_ALLOWED_ADDRESS_TYPES = ImmutableSet.of( + Ipv4Afi.class, + Ipv6Afi.class, + Ipv4PrefixAfi.class, + Ipv6PrefixAfi.class); + /** - * Checks whether provided {@link LocalMapping} can be written under subtree idenfied by {@link InstanceIdentifier} + * Checks whether provided {@link LocalMapping} can be written under subtree identified by {@link InstanceIdentifier} */ default void checkAllowedCombination(@Nonnull final InstanceIdentifier<LocalMapping> identifier, @Nonnull final LocalMapping data) throws WriteFailedException { final Class<? extends LispAddressFamily> eidAddressType = data.getEid().getAddressType(); if (identifier.firstIdentifierOf(VrfSubtable.class) != null) { - if (Ipv4Afi.class != eidAddressType && Ipv6Afi.class != eidAddressType) { + if (!VRF_ALLOWED_ADDRESS_TYPES.contains(eidAddressType)) { throw new WriteFailedException.CreateFailedException(identifier, data, new IllegalArgumentException("Only Ipv4/Ipv6 eid's are allowed for Vrf Subtable")); } @@ -58,7 +68,7 @@ public interface MappingProducer { final Class<? extends LispAddressFamily> eidAddressType = data.getEid().getAddressType(); if (identifier.firstIdentifierOf(VrfSubtable.class) != null) { - if (Ipv4Afi.class != eidAddressType && Ipv6Afi.class != eidAddressType) { + if (!VRF_ALLOWED_ADDRESS_TYPES.contains(eidAddressType)) { throw new WriteFailedException.CreateFailedException(identifier, data, new IllegalArgumentException("Only Ipv4/Ipv6 eid's are allowed for Vrf Subtable")); } diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingReader.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingReader.java index bad719d01..993a6451c 100644 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingReader.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/read/trait/MappingReader.java @@ -37,15 +37,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** - * Trait providing predicates to filter mappings to respective subtables + * Trait providing predicates to filter mappings to respective sub-tables */ public interface MappingReader extends JvppReplyConsumer { Predicate<OneEidTableDetails> BRIDGE_DOMAIN_MAPPINGS_ONLY = - (OneEidTableDetails detail) -> detail.eidType == MAC.getValue(); + (OneEidTableDetails detail) -> detail.eidType == MAC.getVppTypeBinding(); Predicate<OneEidTableDetails> VRF_MAPPINGS_ONLY = - (OneEidTableDetails detail) -> detail.eidType == IPV4.getValue() || detail.eidType == IPV6.getValue(); + (OneEidTableDetails detail) -> detail.eidType == IPV4.getVppTypeBinding() || detail.eidType == IPV6.getVppTypeBinding(); default Predicate<OneEidTableDetails> subtableFilterForLocalMappings( @Nonnull final InstanceIdentifier<LocalMapping> identifier) { |