fix after changes in VPP API 35/17235/3
authorMichal Cmarada <[email protected]>
Wed, 6 Feb 2019 08:41:39 +0000 (09:41 +0100)
committerMichal Cmarada <[email protected]>
Wed, 6 Feb 2019 08:41:39 +0000 (09:41 +0100)
 - fixes for mac adress
 - fixes for ipaddress
 - fixes refactoring in ipsec

Change-Id: Idc3e3557b72a5f1ac5b32b9738d90ca23ed6ed9e
Signed-off-by: Michal Cmarada <[email protected]>
29 files changed:
ipsec/ipsec-impl/src/main/java/io/fd/hc2vpp/ipsec/read/IpsecStateSpdCustomizer.java
ipsec/ipsec-impl/src/main/java/io/fd/hc2vpp/ipsec/write/IpsecSadEntryCustomizer.java
ipsec/ipsec-impl/src/main/java/io/fd/hc2vpp/ipsec/write/IpsecSpdCustomizer.java
ipsec/ipsec-impl/src/test/java/io/fd/hc2vpp/ipsec/read/IpsecStateSpdCustomizerTest.java
ipsec/ipsec-impl/src/test/java/io/fd/hc2vpp/ipsec/write/IpsecSadEntryCustomizerTest.java
ipsec/ipsec-impl/src/test/java/io/fd/hc2vpp/ipsec/write/IpsecSpdCustomizerTest.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/read/ipv4/Ipv4NeighbourCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/read/ipv4/subinterface/SubInterfaceIpv4NeighbourCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/read/ipv6/Ipv6NeighbourCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/read/ipv6/nd/NdProxyCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/read/ipv6/subinterface/SubInterfaceIpv6NeighbourCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/Ipv4NeighbourCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/ProxyRangeCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv4/subinterface/SubInterfaceIpv4NeighbourCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv6/Ipv6NeighbourCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv6/nd/NdProxyCustomizer.java
l3/impl/src/main/java/io/fd/hc2vpp/l3/write/ipv6/subinterface/SubInterfaceIpv6NeighbourCustomizer.java
l3/impl/src/test/java/io/fd/hc2vpp/l3/read/InterfaceChildNodeTest.java
l3/impl/src/test/java/io/fd/hc2vpp/l3/read/ipv6/nd/NdProxyCustomizerTest.java
l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ProxyRangeCustomizerTest.java
l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ipv4/Ipv4NeighbourCustomizerTest.java
l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ipv6/Ipv6NeighbourCustomizerTest.java
l3/impl/src/test/java/io/fd/hc2vpp/l3/write/ipv6/nd/NdProxyCustomizerTest.java
l3/utils/src/main/java/io/fd/hc2vpp/l3/utils/ip/write/IpWriter.java
routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/PrefixCustomizer.java
routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/write/PrefixCustomizerTest.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/MacTranslator.java

index 45f54cd..a9a20cf 100644 (file)
@@ -17,7 +17,6 @@
 package io.fd.hc2vpp.ipsec.read;
 
 import com.google.common.base.Optional;
-import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
 import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer;
 import io.fd.hc2vpp.common.translate.util.Ipv4Translator;
 import io.fd.hc2vpp.common.translate.util.Ipv6Translator;
@@ -35,6 +34,7 @@ import io.fd.vpp.jvpp.core.dto.IpsecSpdsDetails;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdsDetailsReplyDump;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdsDump;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.AddressFamily;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -134,23 +134,22 @@ public class IpsecStateSpdCustomizer extends FutureJVppCustomizer
     private SpdEntries translateDetailToEntry(final IpsecSpdDetails details) {
 
         SpdEntriesBuilder builder = new SpdEntriesBuilder();
-        builder.setDirection(IpsecTrafficDirection.forValue(details.isOutbound))
-                .setIsIpv6(ByteDataTranslator.INSTANCE.byteToBoolean(details.isIpv6))
-                .setPriority(details.priority);
-        switch (details.policy) {
-            case 0:
+        builder.setDirection(IpsecTrafficDirection.forValue(details.entry.isOutbound))
+                .setPriority(details.entry.priority);
+        switch (details.entry.policy) {
+            case IPSEC_API_SPD_ACTION_BYPASS:
                 builder.setOperation(IpsecSpdOperation.Bypass);
                 break;
-            case 1:
+            case IPSEC_API_SPD_ACTION_DISCARD:
                 builder.setOperation(IpsecSpdOperation.Discard);
                 break;
-            case 3:
+            case IPSEC_API_SPD_ACTION_PROTECT:
                 builder.setOperation(IpsecSpdOperation.Protect);
-                builder.setProtectSaId(details.saId);
+                builder.setProtectSaId(details.entry.saId);
                 break;
         }
 
-        if (builder.isIsIpv6()) {
+        if (details.entry.localAddressStart != null && details.entry.localAddressStart.af.equals(AddressFamily.ADDRESS_IP6)) {
             processIpv6AddressRanges(builder, details);
         } else {
             processIpv4AddressRanges(builder, details);
@@ -160,40 +159,62 @@ public class IpsecStateSpdCustomizer extends FutureJVppCustomizer
     }
 
     private void processIpv4AddressRanges(final SpdEntriesBuilder builder, final IpsecSpdDetails details) {
-        if (details.localStartAddr != null && details.localStartAddr.length > 0) {
+        if (details.entry.localAddressStart != null &&
+                details.entry.localAddressStart.un.getIp4().ip4Address.length > 0) {
             builder.setLaddrStart(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv4AddressNoZone(details.localStartAddr)).stringValue()));
+                    new IpAddressNoZone(
+                            arrayToIpv4AddressNoZone(details.entry.localAddressStart.un.getIp4().ip4Address))
+                            .stringValue()));
         }
-        if (details.localStopAddr != null && details.localStopAddr.length > 0) {
+        if (details.entry.localAddressStop != null &&
+                details.entry.localAddressStop.un.getIp4().ip4Address.length > 0) {
             builder.setLaddrStop(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv4AddressNoZone(details.localStopAddr)).stringValue()));
+                    new IpAddressNoZone(arrayToIpv4AddressNoZone(details.entry.localAddressStop.un.getIp4().ip4Address))
+                            .stringValue()));
         }
-        if (details.remoteStartAddr != null && details.remoteStartAddr.length > 0) {
+        if (details.entry.remoteAddressStart != null &&
+                details.entry.remoteAddressStart.un.getIp4().ip4Address.length > 0) {
             builder.setRaddrStart(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv4AddressNoZone(details.remoteStartAddr)).stringValue()));
+                    new IpAddressNoZone(
+                            arrayToIpv4AddressNoZone(details.entry.remoteAddressStart.un.getIp4().ip4Address))
+                            .stringValue()));
         }
-        if (details.remoteStopAddr != null && details.remoteStopAddr.length > 0) {
+        if (details.entry.remoteAddressStop != null &&
+                details.entry.remoteAddressStop.un.getIp4().ip4Address.length > 0) {
             builder.setRaddrStop(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv4AddressNoZone(details.remoteStopAddr)).stringValue()));
+                    new IpAddressNoZone(
+                            arrayToIpv4AddressNoZone(details.entry.remoteAddressStop.un.getIp4().ip4Address))
+                            .stringValue()));
         }
     }
 
     private void processIpv6AddressRanges(final SpdEntriesBuilder builder, final IpsecSpdDetails details) {
-        if (details.localStartAddr != null && details.localStartAddr.length > 0) {
+        if (details.entry.localAddressStart != null &&
+                details.entry.localAddressStart.un.getIp6().ip6Address.length > 0) {
             builder.setLaddrStart(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv6AddressNoZone(details.localStartAddr)).stringValue()));
+                    new IpAddressNoZone(
+                            arrayToIpv6AddressNoZone(details.entry.localAddressStart.un.getIp6().ip6Address))
+                            .stringValue()));
         }
-        if (details.localStopAddr != null && details.localStopAddr.length > 0) {
+        if (details.entry.localAddressStop != null &&
+                details.entry.localAddressStop.un.getIp6().ip6Address.length > 0) {
             builder.setLaddrStop(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv6AddressNoZone(details.localStopAddr)).stringValue()));
+                    new IpAddressNoZone(arrayToIpv6AddressNoZone(details.entry.localAddressStop.un.getIp6().ip6Address))
+                            .stringValue()));
         }
-        if (details.remoteStartAddr != null && details.remoteStartAddr.length > 0) {
+        if (details.entry.remoteAddressStart != null &&
+                details.entry.remoteAddressStart.un.getIp6().ip6Address.length > 0) {
             builder.setRaddrStart(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv6AddressNoZone(details.remoteStartAddr)).stringValue()));
+                    new IpAddressNoZone(
+                            arrayToIpv6AddressNoZone(details.entry.remoteAddressStart.un.getIp6().ip6Address))
+                            .stringValue()));
         }
-        if (details.remoteStopAddr != null && details.remoteStopAddr.length > 0) {
+        if (details.entry.remoteAddressStop != null &&
+                details.entry.remoteAddressStop.un.getIp6().ip6Address.length > 0) {
             builder.setRaddrStop(IpAddressBuilder.getDefaultInstance(
-                    new IpAddressNoZone(arrayToIpv6AddressNoZone(details.remoteStopAddr)).stringValue()));
+                    new IpAddressNoZone(
+                            arrayToIpv6AddressNoZone(details.entry.remoteAddressStop.un.getIp6().ip6Address))
+                            .stringValue()));
         }
     }
 
index c29137d..1822b02 100644 (file)
@@ -25,12 +25,19 @@ import io.fd.hc2vpp.common.translate.util.MultiNamingContext;
 import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
 import io.fd.honeycomb.translate.write.WriteContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
-import io.fd.vpp.jvpp.core.dto.IpsecSadAddDelEntry;
-import io.fd.vpp.jvpp.core.dto.IpsecSadAddDelEntryReply;
+import io.fd.vpp.jvpp.core.dto.IpsecSadEntryAddDel;
+import io.fd.vpp.jvpp.core.dto.IpsecSadEntryAddDelReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.IpsecCryptoAlg;
+import io.fd.vpp.jvpp.core.types.IpsecIntegAlg;
+import io.fd.vpp.jvpp.core.types.IpsecProto;
+import io.fd.vpp.jvpp.core.types.IpsecSadEntry;
+import io.fd.vpp.jvpp.core.types.IpsecSadFlags;
+import io.fd.vpp.jvpp.core.types.Key;
 import java.util.concurrent.CompletionStage;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.ipsec.rev181213.IpsecSadEntriesAugmentation;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.IpsecMode;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ip.address.grouping.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ip.address.grouping.ip.address.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ip.address.grouping.ip.address.Ipv6Address;
@@ -87,44 +94,54 @@ public class IpsecSadEntryCustomizer extends FutureJVppCustomizer
     private void addDelEntry(final InstanceIdentifier<SadEntries> id,
                              final SadEntries dataAfter,
                              final WriteContext writeContext, boolean adding) throws WriteFailedException {
-        final IpsecSadAddDelEntry entry = new IpsecSadAddDelEntry();
+        final IpsecSadEntryAddDel request = new IpsecSadEntryAddDel();
+        request.entry = new IpsecSadEntry();
         IpsecSadEntriesAugmentation augment = dataAfter.augmentation(IpsecSadEntriesAugmentation.class);
         if (augment != null && augment.getSaId() != null) {
-            entry.sadId = augment.getSaId();
+            request.entry.sadId = augment.getSaId();
         }
         if (dataAfter.getSpi() != null) {
-            entry.spi = dataAfter.getSpi().intValue();
+            request.entry.spi = dataAfter.getSpi().intValue();
         }
-        if (dataAfter.getAntiReplayWindow() != null) {
-            entry.useAntiReplay = dataAfter.getAntiReplayWindow() > 0
-                    ? BYTE_TRUE
-                    : BYTE_FALSE;
+        request.entry.flags = IpsecSadFlags.IPSEC_API_SAD_FLAG_NONE;
+        if (dataAfter.getAntiReplayWindow() != null && dataAfter.getAntiReplayWindow() > 0) {
+            request.entry.flags = IpsecSadFlags.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY;
         }
 
-        if (dataAfter.getSaMode() != null) {
-            entry.isTunnel = Integer.valueOf(dataAfter.getSaMode().getIntValue()).byteValue();
+        if (dataAfter.getSaMode() != null && dataAfter.getSaMode().equals(IpsecMode.Tunnel)) {
+            //TODO check if flags can be set at once
+            if (dataAfter.getSourceAddress() != null &&
+                    dataAfter.getSourceAddress().getIpAddress() instanceof Ipv4Address) {
+                request.entry.flags = IpsecSadFlags
+                        .forValue((request.entry.flags.value + IpsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL.value));
+            } else if (dataAfter.getSourceAddress() != null &&
+                    dataAfter.getSourceAddress().getIpAddress() instanceof Ipv6Address) {
+                request.entry.flags = IpsecSadFlags
+                        .forValue((request.entry.flags.value + IpsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL_V6.value));
+            }
         }
-        entry.isAdd = adding
+        request.isAdd = adding
                 ? ByteDataTranslator.BYTE_TRUE
                 : ByteDataTranslator.BYTE_FALSE;
         if (dataAfter.getEsp() != null) {
-            entry.protocol = 1;
-            fillEspAuthentication(entry, dataAfter.getEsp());
-            fillEspEncryption(entry, dataAfter.getEsp());
+            request.entry.protocol = IpsecProto.IPSEC_API_PROTO_ESP;
+            fillEspAuthentication(request, dataAfter.getEsp());
+            fillEspEncryption(request, dataAfter.getEsp());
 
         } else if (dataAfter.getAh() != null) {
-            entry.protocol = 0;
-            fillAhAuthentication(entry, dataAfter.getAh());
+            request.entry.protocol = IpsecProto.IPSEC_API_PROTO_AH;
+            fillAhAuthentication(request, dataAfter.getAh());
+            fillAhEncryption(request, dataAfter.getAh());
         }
 
-        fillAddresses(entry, dataAfter);
+        fillAddresses(request, dataAfter);
 
-        LOG.debug("IPSec config change id={} request={}", id, entry);
-        final CompletionStage<IpsecSadAddDelEntryReply> ipsecSadEntryAddDellReplyFuture =
-                getFutureJVpp().ipsecSadAddDelEntry(entry);
+        LOG.debug("IPSec config change id={} request={}", id, request);
+        final CompletionStage<IpsecSadEntryAddDelReply> ipsecSadEntryAddDellReplyFuture =
+                getFutureJVpp().ipsecSadEntryAddDel(request);
         getReplyForWrite(ipsecSadEntryAddDellReplyFuture.toCompletableFuture(), id);
         if (adding) {
-            sadEntryMapping.addChild(dataAfter.key().getDirection().getName(), entry.sadId,
+            sadEntryMapping.addChild(dataAfter.key().getDirection().getName(), request.entry.sadId,
                     String.valueOf(dataAfter.key().getSpi()), writeContext.getMappingContext());
         } else {
             sadEntryMapping
@@ -133,7 +150,7 @@ public class IpsecSadEntryCustomizer extends FutureJVppCustomizer
         }
     }
 
-    private void fillAhAuthentication(IpsecSadAddDelEntry targetEntry, Ah data) {
+    private void fillAhAuthentication(IpsecSadEntryAddDel request, Ah data) {
         //0 = None, 1 = MD5-96, 2 = SHA1-96, 3 = SHA-256, 4 = SHA-384, 5=SHA-512
         AuthenticationAlgorithm authAlg = data.getAuthenticationAlgorithm();
         if (authAlg != null) {
@@ -142,22 +159,33 @@ public class IpsecSadEntryCustomizer extends FutureJVppCustomizer
                 integKey =
                         ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ipsec.sa.ah.grouping.ah.authentication.algorithm.HmacMd596) authAlg)
                                 .getHmacMd596().getKeyStr().stringValue();
-                targetEntry.integrityAlgorithm = 1;
+                request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_MD5_96;
             } else if (authAlg instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ipsec.sa.ah.grouping.ah.authentication.algorithm.HmacSha196) {
                 integKey =
                         ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ipsec.sa.ah.grouping.ah.authentication.algorithm.HmacSha196) authAlg)
                                 .getHmacSha196().getKeyStr().stringValue();
-                targetEntry.integrityAlgorithm = 2;
+                request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_SHA1_96;
             } else {
-                targetEntry.integrityAlgorithm = 0;
+                request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_NONE;
                 return;
             }
-            targetEntry.integrityKey = integKey.getBytes();
-            targetEntry.integrityKeyLength = (byte) integKey.getBytes().length;
+            request.entry.integrityKey = new Key();
+            request.entry.integrityKey.data = integKey.getBytes();
+            request.entry.integrityKey.length = (byte) integKey.getBytes().length;
+            request.entry.cryptoKey = new Key();
+            request.entry.cryptoKey.data = null;
+            request.entry.cryptoKey.length = 0 ;
         }
     }
 
-    private void fillEspAuthentication(IpsecSadAddDelEntry targetEntry, Esp data) {
+    private void fillAhEncryption(IpsecSadEntryAddDel request, Ah data) {
+        request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_NONE;
+        request.entry.cryptoKey = new Key();
+        request.entry.cryptoKey.data = null;
+        request.entry.cryptoKey.length = 0;
+    }
+
+    private void fillEspAuthentication(IpsecSadEntryAddDel request, Esp data) {
         //0 = None, 1 = MD5-96, 2 = SHA1-96, 3 = SHA-256, 4 = SHA-384, 5=SHA-512
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ipsec.sa.esp.grouping.esp.Authentication
                 authAlg = data.getAuthentication();
@@ -165,57 +193,58 @@ public class IpsecSadEntryCustomizer extends FutureJVppCustomizer
             String integKey;
             if (authAlg.getAuthenticationAlgorithm() instanceof HmacMd596) {
                 integKey = ((HmacMd596) authAlg.getAuthenticationAlgorithm()).getHmacMd596().getKeyStr().stringValue();
-                targetEntry.integrityAlgorithm = 1;
+                request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_MD5_96;
             } else if (authAlg.getAuthenticationAlgorithm() instanceof HmacSha196) {
                 integKey =
                         ((HmacSha196) authAlg.getAuthenticationAlgorithm()).getHmacSha196().getKeyStr().stringValue();
-                targetEntry.integrityAlgorithm = 2;
+                request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_SHA1_96;
             } else {
-                targetEntry.integrityAlgorithm = 0;
+                request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_NONE;
                 return;
             }
-            targetEntry.integrityKey = integKey.getBytes();
-            targetEntry.integrityKeyLength = (byte) integKey.getBytes().length;
+            request.entry.integrityKey = new Key();
+            request.entry.integrityKey.data = integKey.getBytes();
+            request.entry.integrityKey.length = (byte) integKey.getBytes().length;
         }
     }
 
-    private void fillEspEncryption(IpsecSadAddDelEntry targetEntry, Esp data) {
+    private void fillEspEncryption(IpsecSadEntryAddDel request, Esp data) {
         //0 = Null, 1 = AES-CBC-128, 2 = AES-CBC-192, 3 = AES-CBC-256, 4 = 3DES-CBC
         if (data.getEncryption() != null && data.getEncryption().getEncryptionAlgorithm() != null) {
             String cryptoKey = "";
             EncryptionAlgorithm encrAlg = data.getEncryption().getEncryptionAlgorithm();
             if (encrAlg instanceof Aes128Cbc) {
                 cryptoKey = ((Aes128Cbc) encrAlg).getAes128Cbc().getKeyStr().stringValue();
-                targetEntry.cryptoAlgorithm = 1;
+                request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_AES_CBC_128;
             } else if (encrAlg instanceof Aes192Cbc) {
                 cryptoKey = ((Aes192Cbc) encrAlg).getAes192Cbc().getKeyStr().stringValue();
-                targetEntry.cryptoAlgorithm = 2;
+                request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_AES_CBC_192;
             } else if (encrAlg instanceof Aes256Cbc) {
                 cryptoKey = ((Aes256Cbc) encrAlg).getAes256Cbc().getKeyStr().stringValue();
-                targetEntry.cryptoAlgorithm = 3;
+                request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_AES_CBC_256;
             } else if (encrAlg instanceof DesCbc) {
                 cryptoKey = ((DesCbc) encrAlg).getDesCbc().getKeyStr().stringValue();
-                targetEntry.cryptoAlgorithm = 4;
+                // TODO verify before the value was "4" now the result is "10"
+                request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_DES_CBC;
             } else {
-                targetEntry.cryptoAlgorithm = 0;
+                request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_NONE;
                 return;
             }
-            targetEntry.cryptoKey = cryptoKey.getBytes();
-            targetEntry.cryptoKeyLength = (byte) cryptoKey.getBytes().length;
+            request.entry.cryptoKey = new Key();
+            request.entry.cryptoKey.data = cryptoKey.getBytes();
+            request.entry.cryptoKey.length = (byte) cryptoKey.getBytes().length;
         }
     }
 
-    private void fillAddresses(IpsecSadAddDelEntry targetEntry, SadEntries data) {
+    private void fillAddresses(IpsecSadEntryAddDel request, SadEntries data) {
         if (data.getSourceAddress() != null && data.getSourceAddress().getIpAddress() != null) {
             IpAddress sourceAddr = data.getSourceAddress().getIpAddress();
             if (sourceAddr instanceof Ipv4Address) {
                 Ipv4Address ipv4 = (Ipv4Address) sourceAddr;
-                targetEntry.isTunnelIpv6 = 0;
-                targetEntry.tunnelSrcAddress = ipv4AddressNoZoneToArray(ipv4.getIpv4Address().getValue());
+                request.entry.tunnelSrc = ipv4AddressToAddress(ipv4.getIpv4Address());
             } else if (sourceAddr instanceof Ipv6Address) {
                 Ipv6Address ipv6 = (Ipv6Address) sourceAddr;
-                targetEntry.isTunnelIpv6 = 1;
-                targetEntry.tunnelSrcAddress = ipv6AddressNoZoneToArray(ipv6.getIpv6Address());
+                request.entry.tunnelSrc = ipv6AddressToAddress(ipv6.getIpv6Address());
             }
         }
 
@@ -224,12 +253,10 @@ public class IpsecSadEntryCustomizer extends FutureJVppCustomizer
 
             if (destAddr instanceof Ipv4Address) {
                 Ipv4Address ipv4 = (Ipv4Address) destAddr;
-                targetEntry.isTunnelIpv6 = 0;
-                targetEntry.tunnelDstAddress = ipv4AddressNoZoneToArray(ipv4.getIpv4Address().getValue());
+                request.entry.tunnelDst = ipv4AddressToAddress(ipv4.getIpv4Address());
             } else if (destAddr instanceof Ipv6Address) {
                 Ipv6Address ipv6 = (Ipv6Address) destAddr;
-                targetEntry.isTunnelIpv6 = 1;
-                targetEntry.tunnelDstAddress = ipv6AddressNoZoneToArray(ipv6.getIpv6Address());
+                request.entry.tunnelDst = ipv6AddressToAddress(ipv6.getIpv6Address());
             }
         }
     }
index 771cf67..870eeb7 100644 (file)
@@ -25,8 +25,10 @@ import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
 import io.fd.honeycomb.translate.write.WriteContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdAddDel;
-import io.fd.vpp.jvpp.core.dto.IpsecSpdAddDelEntry;
+import io.fd.vpp.jvpp.core.dto.IpsecSpdEntryAddDel;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.IpsecSpdAction;
+import io.fd.vpp.jvpp.core.types.IpsecSpdEntry;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.ipsec.rev181213.IpsecSpdEntriesAugmentation;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.ipsec.Spd;
@@ -78,71 +80,65 @@ public class IpsecSpdCustomizer extends FutureJVppCustomizer
 
     private void addSpdEntry(final InstanceIdentifier<Spd> id, int spdId, final SpdEntries entry)
             throws WriteFailedException {
-        IpsecSpdAddDelEntry request = new IpsecSpdAddDelEntry();
-        request.spdId = spdId;
+        IpsecSpdEntryAddDel request = new IpsecSpdEntryAddDel();
+        request.entry = new IpsecSpdEntry();
+        request.entry.spdId = spdId;
         request.isAdd = ByteDataTranslator.BYTE_TRUE;
         IpsecSpdEntriesAugmentation entryAug = entry.augmentation(IpsecSpdEntriesAugmentation.class);
         if (entryAug == null) {
             return;
         }
 
-        if (entryAug.isIsIpv6() != null) {
-            request.isIpv6 = (byte) (entryAug.isIsIpv6()
-                    ? 1
-                    : 0);
-        }
         if (entryAug.getDirection() != null) {
-            request.isOutbound = (byte) entryAug.getDirection().getIntValue();
+            request.entry.isOutbound = (byte) entryAug.getDirection().getIntValue();
         }
 
         if (entryAug.getPriority() != null) {
-            request.priority = entryAug.getPriority();
+            request.entry.priority = entryAug.getPriority();
         }
 
         if (entryAug.getOperation() != null) {
             final String operation = entryAug.getOperation().getName();
             if (operation.equalsIgnoreCase("bypass")) {
-                request.policy = (byte) 0;
+                request.entry.policy = IpsecSpdAction.IPSEC_API_SPD_ACTION_BYPASS;
             } else if (operation.equalsIgnoreCase("discard")) {
-                request.policy = (byte) 1;
+                request.entry.policy = IpsecSpdAction.IPSEC_API_SPD_ACTION_DISCARD;
             } else if (operation.equalsIgnoreCase("protect")) {
-                request.policy = (byte) 3;
+                request.entry.policy = IpsecSpdAction.IPSEC_API_SPD_ACTION_PROTECT;
             }
         }
 
         if (entryAug.getLaddrStart() != null) {
             if (entryAug.getLaddrStart().getIpv4Address() != null) {
-                request.localAddressStart =
-                        ipv4AddressNoZoneToArray(entryAug.getLaddrStart().getIpv4Address().getValue());
+                request.entry.localAddressStart = ipv4AddressToAddress(entryAug.getLaddrStart().getIpv4Address());
             } else if (entryAug.getLaddrStart().getIpv6Address() != null) {
-                request.localAddressStart = ipv6AddressNoZoneToArray(entryAug.getLaddrStart().getIpv6Address());
+                request.entry.localAddressStart = ipv6AddressToAddress(entryAug.getLaddrStart().getIpv6Address());
             }
         }
         if (entryAug.getLaddrStop() != null) {
             if (entryAug.getLaddrStop().getIpv4Address() != null) {
-                request.localAddressStop =
-                        ipv4AddressNoZoneToArray(entryAug.getLaddrStop().getIpv4Address().getValue());
+                request.entry.localAddressStop = ipv4AddressToAddress(entryAug.getLaddrStop().getIpv4Address());
             } else if (entryAug.getLaddrStop().getIpv6Address() != null) {
-                request.localAddressStop = ipv6AddressNoZoneToArray(entryAug.getLaddrStop().getIpv6Address());
+                request.entry.localAddressStop = ipv6AddressToAddress(entryAug.getLaddrStop().getIpv6Address());
             }
         }
         if (entryAug.getRaddrStop() != null) {
             if (entryAug.getRaddrStop().getIpv4Address() != null) {
-                request.remoteAddressStop =
-                        ipv4AddressNoZoneToArray(entryAug.getRaddrStop().getIpv4Address().getValue());
+                request.entry.remoteAddressStop = ipv4AddressToAddress(entryAug.getRaddrStop().getIpv4Address());
             } else if (entryAug.getRaddrStop().getIpv6Address() != null) {
-                request.remoteAddressStop = ipv6AddressNoZoneToArray(entryAug.getRaddrStop().getIpv6Address());
+                request.entry.remoteAddressStop = ipv6AddressToAddress(entryAug.getRaddrStop().getIpv6Address());
             }
         }
 
         if (entryAug.getRaddrStart() != null) {
             if (entryAug.getRaddrStart().getIpv4Address() != null) {
-                request.remoteAddressStart =
-                        ipv4AddressNoZoneToArray(entryAug.getRaddrStart().getIpv4Address().getValue());
+                request.entry.remoteAddressStart = ipv4AddressToAddress(entryAug.getRaddrStart().getIpv4Address());
             } else if (entryAug.getRaddrStart().getIpv6Address() != null) {
-                request.remoteAddressStart = ipv6AddressNoZoneToArray(entryAug.getRaddrStart().getIpv6Address());
+                request.entry.remoteAddressStart = ipv6AddressToAddress(entryAug.getRaddrStart().getIpv6Address());
             }
         }
-        getReplyForWrite(getFutureJVpp().ipsecSpdAddDelEntry(request).toCompletableFuture(), id);
+
+        //TODO HC2VPP-403: missing local and remote port definitions
+        getReplyForWrite(getFutureJVpp().ipsecSpdEntryAddDel(request).toCompletableFuture(), id);
     }
 }
index bf08fa8..8c2ad09 100644 (file)
@@ -30,6 +30,8 @@ import io.fd.vpp.jvpp.core.dto.IpsecSpdDetails;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdDetailsReplyDump;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdsDetails;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdsDetailsReplyDump;
+import io.fd.vpp.jvpp.core.types.IpsecSpdAction;
+import io.fd.vpp.jvpp.core.types.IpsecSpdEntry;
 import java.util.LinkedList;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.ipsec.rev181213.IpsecStateSpdAugmentation;
@@ -38,6 +40,7 @@ import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.ipsec.rev181213.i
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.ipsec.rev181213.ipsec.state.SpdBuilder;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.ipsec.rev181213.ipsec.state.SpdKey;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.vpp.ipsec.rev181213.ipsec.state.spd.SpdEntries;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.IpsecState;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
@@ -47,11 +50,10 @@ public class IpsecStateSpdCustomizerTest extends ReaderCustomizerTest<Spd, SpdBu
     private static InstanceIdentifier<Spd> SPD_IID = InstanceIdentifier.create(IpsecState.class)
             .augmentation(IpsecStateSpdAugmentation.class).child(Spd.class, new SpdKey(10));
 
-    private static final String LOCAL_ADDR_START = "192.168.11.1";
-    private static final String LOCAL_ADDR_END = "192.168.11.255";
+    private static final Ipv4Address LOCAL_ADDR_START = new Ipv4Address("192.168.11.1");
+    private static final Ipv4Address LOCAL_ADDR_END = new Ipv4Address("192.168.11.255");
     private static final short PORT_START = 0;
     private static final short PORT_END = Short.MAX_VALUE;
-    private static final int POLICY_PROTECT = 3;
     private static final int SPD_ID = 10;
     private static final int SA_ID = 10;
     private static final int PROTOCOL = 1;
@@ -71,17 +73,17 @@ public class IpsecStateSpdCustomizerTest extends ReaderCustomizerTest<Spd, SpdBu
         final IpsecSpdDetailsReplyDump spdDetailsReply = new IpsecSpdDetailsReplyDump();
         LinkedList<IpsecSpdDetails> spdDetails = new LinkedList<>();
         IpsecSpdDetails spdDetail = new IpsecSpdDetails();
-        spdDetail.isIpv6 = BYTE_FALSE;
-        spdDetail.isOutbound = BYTE_TRUE;
-        spdDetail.spdId = SPD_ID;
-        spdDetail.protocol = PROTOCOL;
-        spdDetail.localStartAddr = ipv4AddressNoZoneToArray(LOCAL_ADDR_START);
-        spdDetail.localStopAddr = ipv4AddressNoZoneToArray(LOCAL_ADDR_END);
-        spdDetail.localStartPort = PORT_START;
-        spdDetail.localStopPort = PORT_END;
-        spdDetail.policy = POLICY_PROTECT;
-        spdDetail.saId = SA_ID;
-        spdDetail.priority = PRIORITY;
+        spdDetail.entry = new IpsecSpdEntry();
+        spdDetail.entry.isOutbound = BYTE_TRUE;
+        spdDetail.entry.spdId = SPD_ID;
+        spdDetail.entry.protocol = PROTOCOL;
+        spdDetail.entry.localAddressStart = ipv4AddressToAddress(LOCAL_ADDR_START);
+        spdDetail.entry.localAddressStop = ipv4AddressToAddress(LOCAL_ADDR_END);
+        spdDetail.entry.localPortStart = PORT_START;
+        spdDetail.entry.localPortStop = PORT_END;
+        spdDetail.entry.policy = IpsecSpdAction.IPSEC_API_SPD_ACTION_PROTECT;
+        spdDetail.entry.saId = SA_ID;
+        spdDetail.entry.priority = PRIORITY;
         spdDetails.add(spdDetail);
         spdDetailsReply.ipsecSpdDetails = spdDetails;
         when(api.ipsecSpdDump(any())).thenReturn(future(spdDetailsReply));
index e477467..81588fe 100644 (file)
@@ -16,6 +16,8 @@
 
 package io.fd.hc2vpp.ipsec.write;
 
+import static io.fd.vpp.jvpp.core.types.IpsecSadFlags.IPSEC_API_SAD_FLAG_NONE;
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -29,11 +31,19 @@ import io.fd.hc2vpp.ipsec.helpers.SchemaContextTestHelper;
 import io.fd.honeycomb.test.tools.HoneycombTestRunner;
 import io.fd.honeycomb.test.tools.annotations.InjectTestData;
 import io.fd.honeycomb.translate.write.WriteFailedException;
-import io.fd.vpp.jvpp.core.dto.IpsecSadAddDelEntry;
-import io.fd.vpp.jvpp.core.dto.IpsecSadAddDelEntryReply;
+import io.fd.vpp.jvpp.core.dto.IpsecSadEntryAddDel;
+import io.fd.vpp.jvpp.core.dto.IpsecSadEntryAddDelReply;
+import io.fd.vpp.jvpp.core.types.IpsecCryptoAlg;
+import io.fd.vpp.jvpp.core.types.IpsecIntegAlg;
+import io.fd.vpp.jvpp.core.types.IpsecProto;
+import io.fd.vpp.jvpp.core.types.IpsecSadEntry;
+import io.fd.vpp.jvpp.core.types.IpsecSadFlags;
+import io.fd.vpp.jvpp.core.types.IpsecSpdEntry;
+import io.fd.vpp.jvpp.core.types.Key;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.IkeEncryptionAlgorithmT;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipsec.rev181214.IkeIntegrityAlgorithmT;
@@ -68,8 +78,8 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
             InstanceIdentifier.create(Ipsec.class).child(Sad.class);
     private static final String INTEG_KEY = "0123456789012346";
     private static final String CRYPTO_KEY = "9876543210987654";
-    private static final String TNL_SRC_ADDR = "192.168.1.1";
-    private static final String TNL_DST_ADDR = "192.168.1.2";
+    private static final Ipv4Address TNL_SRC_ADDR = new Ipv4Address("192.168.1.1");
+    private static final Ipv4Address TNL_DST_ADDR = new Ipv4Address("192.168.1.2");
     private static final int SPI_1002 = 1002;
     private static final int SAD_ID = 10;
 
@@ -80,29 +90,30 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
     @Override
     protected void setUpTest() throws Exception {
         customizer = new IpsecSadEntryCustomizer(api, namingCntext);
-        when(api.ipsecSadAddDelEntry(any())).thenReturn(future(new IpsecSadAddDelEntryReply()));
+        when(api.ipsecSadEntryAddDel(any())).thenReturn(future(new IpsecSadEntryAddDelReply()));
     }
 
     @Test
     public void testWrite(@InjectTestData(resourcePath = "/sadEntries/addDelSadEntry.json", id = SAD_PATH) Sad sad)
             throws WriteFailedException {
         final SadEntries data = sad.getSadEntries().get(0);
-        final IpsecSadAddDelEntry request = new IpsecSadAddDelEntry();
+        final IpsecSadEntryAddDel request = new IpsecSadEntryAddDel();
         request.isAdd = BYTE_TRUE;
-        request.spi = SPI_1002;
-        request.sadId = SAD_ID;
-        request.isTunnel = BYTE_TRUE;
-        request.isTunnelIpv6 = BYTE_FALSE;
-        request.integrityKey = INTEG_KEY.getBytes();
-        request.integrityKeyLength = (byte) request.integrityKey.length;
-        request.cryptoKey = CRYPTO_KEY.getBytes();
-        request.cryptoKeyLength = (byte) request.cryptoKey.length;
-        request.useAntiReplay = 0;
-        request.tunnelSrcAddress = ipv4AddressNoZoneToArray(TNL_SRC_ADDR);
-        request.tunnelDstAddress = ipv4AddressNoZoneToArray(TNL_DST_ADDR);
+        request.entry = new io.fd.vpp.jvpp.core.types.IpsecSadEntry();
+        request.entry.spi = SPI_1002;
+        request.entry.sadId = SAD_ID;
+        request.entry.integrityKey = new Key();
+        request.entry.integrityKey.data = INTEG_KEY.getBytes();
+        request.entry.integrityKey.length = (byte) INTEG_KEY.getBytes().length;
+        request.entry.cryptoKey = new Key();
+        request.entry.cryptoKey.data = CRYPTO_KEY.getBytes();
+        request.entry.cryptoKey.length = (byte) CRYPTO_KEY.getBytes().length;
+        request.entry.flags = IpsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL;
+        request.entry.tunnelSrc = ipv4AddressToAddress(TNL_SRC_ADDR);
+        request.entry.tunnelDst = ipv4AddressToAddress(TNL_DST_ADDR);
 
         // ESP
-        request.protocol = BYTE_TRUE; //0 = AH, 1 = ESP
+        request.entry.protocol = IpsecProto.IPSEC_API_PROTO_ESP;
         // - auth MD5-96
         //  - crypto Aes-Cbc-128
         testEspAuthEncrCombination(data, IkeIntegrityAlgorithmT.AuthHmacMd596,
@@ -132,10 +143,11 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
                 IkeEncryptionAlgorithmT.EncrDes, request);
 
         // AH
-        request.protocol = BYTE_FALSE;
-        request.cryptoAlgorithm = 0;
-        request.cryptoKey = null;
-        request.cryptoKeyLength = 0;
+        request.entry.protocol = IpsecProto.IPSEC_API_PROTO_AH;
+        request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_NONE;
+        request.entry.cryptoKey = new Key();
+        request.entry.cryptoKey.data = null;
+        request.entry.cryptoKey.length = 0;
         // - auth SHA1-96
         testAhAuthorization(data, IkeIntegrityAlgorithmT.AuthHmacSha196, request);
         // - auth MD5-96
@@ -151,20 +163,24 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
         final SadEntries after = relayAfter.getSadEntries().get(0);
         final Long spi = after.getSpi();
         customizer.updateCurrentAttributes(getId(IpsecTrafficDirection.Outbound, spi), before, after, writeContext);
-        final IpsecSadAddDelEntry request = new IpsecSadAddDelEntry();
+        final IpsecSadEntryAddDel request = new IpsecSadEntryAddDel();
         request.isAdd = BYTE_TRUE;
-        request.spi = SPI_1002;
-        request.sadId = SAD_ID;
-        request.protocol = BYTE_FALSE;
-        request.isTunnel = BYTE_FALSE;
-        request.isTunnelIpv6 = BYTE_TRUE;
-        request.integrityAlgorithm = 1;
-        request.integrityKey = INTEG_KEY.getBytes();
-        request.integrityKeyLength = (byte) request.integrityKey.length;
-        request.useAntiReplay = BYTE_TRUE;
-        request.tunnelSrcAddress = ipv6AddressNoZoneToArray(Ipv6Address.getDefaultInstance("2001::11"));
-        request.tunnelDstAddress = ipv6AddressNoZoneToArray(Ipv6Address.getDefaultInstance("2001::12"));
-        verify(api).ipsecSadAddDelEntry(request);
+        request.entry = new IpsecSadEntry();
+        request.entry.spi = SPI_1002;
+        request.entry.sadId = SAD_ID;
+        request.entry.protocol = IpsecProto.IPSEC_API_PROTO_AH;
+        request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_MD5_96;
+        request.entry.integrityKey = new Key();
+        request.entry.integrityKey.data = INTEG_KEY.getBytes();
+        request.entry.integrityKey.length = (byte) INTEG_KEY.getBytes().length;
+        request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_NONE;
+        request.entry.cryptoKey = new Key();
+        request.entry.cryptoKey.data = null;
+        request.entry.cryptoKey.length = 0;
+        request.entry.flags = IpsecSadFlags.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY;
+        request.entry.tunnelSrc = ipv6AddressToAddress(Ipv6Address.getDefaultInstance("2001::11"));
+        request.entry.tunnelDst = ipv6AddressToAddress(Ipv6Address.getDefaultInstance("2001::12"));
+        verify(api).ipsecSadEntryAddDel(request);
     }
 
     @Test
@@ -173,11 +189,13 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
         final SadEntries data = sad.getSadEntries().get(0);
         final Long spi = data.getSpi();
         customizer.deleteCurrentAttributes(getId(IpsecTrafficDirection.Outbound, spi), data, writeContext);
-        final IpsecSadAddDelEntry request = new IpsecSadAddDelEntry();
+        final IpsecSadEntryAddDel request = new IpsecSadEntryAddDel();
         request.isAdd = BYTE_FALSE;
-        request.spi = SPI_1002;
-        request.sadId = SAD_ID;
-        verify(api).ipsecSadAddDelEntry(request);
+        request.entry = new IpsecSadEntry();
+        request.entry.spi = SPI_1002;
+        request.entry.sadId = SAD_ID;
+        request.entry.flags = IPSEC_API_SAD_FLAG_NONE;
+        verify(api).ipsecSadEntryAddDel(request);
     }
 
     private InstanceIdentifier<SadEntries> getId(final IpsecTrafficDirection direction, final Long spi) {
@@ -185,7 +203,7 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
     }
 
     private void testAhAuthorization(final SadEntries otherData, final IkeIntegrityAlgorithmT authAlg,
-                                     final IpsecSadAddDelEntry request) throws WriteFailedException {
+                                     final IpsecSadEntryAddDel request) throws WriteFailedException {
         SadEntriesBuilder builder = new SadEntriesBuilder(otherData);
         builder.setEsp(null);
         AhBuilder ahBuilder = new AhBuilder();
@@ -193,11 +211,11 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
         builder.setAh(ahBuilder.build());
         customizer.writeCurrentAttributes(getId(IpsecTrafficDirection.Outbound, Integer.toUnsignedLong(SPI_1002)),
                 builder.build(), writeContext);
-        verify(api).ipsecSadAddDelEntry(request);
+        verify(api).ipsecSadEntryAddDel(request);
     }
 
     private void testEspAuthEncrCombination(final SadEntries otherData, final IkeIntegrityAlgorithmT authAlg,
-                                            final IkeEncryptionAlgorithmT encrAlg, final IpsecSadAddDelEntry request)
+                                            final IkeEncryptionAlgorithmT encrAlg, final IpsecSadEntryAddDel request)
             throws WriteFailedException {
         SadEntriesBuilder builder = new SadEntriesBuilder(otherData);
         builder.setAh(null);
@@ -209,26 +227,26 @@ public class IpsecSadEntryCustomizerTest extends WriterCustomizerTest implements
                 builder.build(), writeContext);
 
         if (encrAlg == IkeEncryptionAlgorithmT.EncrAesCbc128) {
-            request.cryptoAlgorithm = 1;
+            request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_AES_CBC_128;
         } else if (encrAlg == IkeEncryptionAlgorithmT.EncrAesCbc192) {
-            request.cryptoAlgorithm = 2;
+            request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_AES_CBC_192;
         } else if (encrAlg == IkeEncryptionAlgorithmT.EncrAesCbc256) {
-            request.cryptoAlgorithm = 3;
+            request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_AES_CBC_256;
         } else if (encrAlg == IkeEncryptionAlgorithmT.EncrDes) {
-            request.cryptoAlgorithm = 4;
+            request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_DES_CBC;
         } else {
-            request.cryptoAlgorithm = 0;
+            request.entry.cryptoAlgorithm = IpsecCryptoAlg.IPSEC_API_CRYPTO_ALG_NONE;
         }
 
         if (authAlg == IkeIntegrityAlgorithmT.AuthHmacMd596) {
-            request.integrityAlgorithm = 1;
+            request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_MD5_96;
         } else if (authAlg == IkeIntegrityAlgorithmT.AuthHmacSha196) {
-            request.integrityAlgorithm = 2;
+            request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_SHA1_96;
         } else {
-            request.integrityAlgorithm = 0;
+            request.entry.integrityAlgorithm = IpsecIntegAlg.IPSEC_API_INTEG_ALG_NONE;
         }
 
-        verify(api).ipsecSadAddDelEntry(request);
+        verify(api).ipsecSadEntryAddDel(request);
     }
 
     private Encryption getEspEncryption(IkeEncryptionAlgorithmT alg) {
index a4b2940..da9b742 100644 (file)
@@ -29,9 +29,11 @@ import io.fd.honeycomb.test.tools.HoneycombTestRunner;
 import io.fd.honeycomb.test.tools.annotations.InjectTestData;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdAddDel;
-import io.fd.vpp.jvpp.core.dto.IpsecSpdAddDelEntry;
-import io.fd.vpp.jvpp.core.dto.IpsecSpdAddDelEntryReply;
 import io.fd.vpp.jvpp.core.dto.IpsecSpdAddDelReply;
+import io.fd.vpp.jvpp.core.dto.IpsecSpdEntryAddDel;
+import io.fd.vpp.jvpp.core.dto.IpsecSpdEntryAddDelReply;
+import io.fd.vpp.jvpp.core.types.IpsecSpdAction;
+import io.fd.vpp.jvpp.core.types.IpsecSpdEntry;
 import java.util.Collections;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -56,7 +58,7 @@ public class IpsecSpdCustomizerTest extends WriterCustomizerTest implements Sche
     protected void setUpTest() throws Exception {
         customizer = new IpsecSpdCustomizer(api);
         when(api.ipsecSpdAddDel(any())).thenReturn(future(new IpsecSpdAddDelReply()));
-        when(api.ipsecSpdAddDelEntry(any())).thenReturn(future(new IpsecSpdAddDelEntryReply()));
+        when(api.ipsecSpdEntryAddDel(any())).thenReturn(future(new IpsecSpdEntryAddDelReply()));
     }
 
     @Test
@@ -69,8 +71,8 @@ public class IpsecSpdCustomizerTest extends WriterCustomizerTest implements Sche
         createSpdRequest.spdId = SPD_ID;
 
         verify(api).ipsecSpdAddDel(createSpdRequest);
-        verify(api).ipsecSpdAddDelEntry(translateSpdEntry(spd.getSpdEntries().get(0), SPD_ID, true));
-        verify(api).ipsecSpdAddDelEntry(translateSpdEntry(spd.getSpdEntries().get(1), SPD_ID, true));
+        verify(api).ipsecSpdEntryAddDel(translateSpdEntry(spd.getSpdEntries().get(0), SPD_ID, true));
+        verify(api).ipsecSpdEntryAddDel(translateSpdEntry(spd.getSpdEntries().get(1), SPD_ID, true));
     }
 
     @Test
@@ -81,7 +83,7 @@ public class IpsecSpdCustomizerTest extends WriterCustomizerTest implements Sche
         Spd before = ipsecBefore.getSpd().get(0);
         Spd after = ipsecAfter.getSpd().get(0);
         customizer.updateCurrentAttributes(getSpdId(SPD_ID), before, after, writeContext);
-        verify(api).ipsecSpdAddDelEntry(translateSpdEntry(after.getSpdEntries().get(0), SPD_ID, true));
+        verify(api).ipsecSpdEntryAddDel(translateSpdEntry(after.getSpdEntries().get(0), SPD_ID, true));
     }
 
     @Test
@@ -102,71 +104,64 @@ public class IpsecSpdCustomizerTest extends WriterCustomizerTest implements Sche
         return InstanceIdentifier.create(Ipsec.class).child(Spd.class, new SpdKey(spdId));
     }
 
-    private IpsecSpdAddDelEntry translateSpdEntry(final SpdEntries entry, int spdId, boolean isAdd) {
-        IpsecSpdAddDelEntry request = new IpsecSpdAddDelEntry();
-        request.spdId = spdId;
+    private IpsecSpdEntryAddDel translateSpdEntry(final SpdEntries entry, int spdId, boolean isAdd) {
+        IpsecSpdEntryAddDel request = new IpsecSpdEntryAddDel();
+        request.entry = new IpsecSpdEntry();
+        request.entry.spdId = spdId;
         request.isAdd = isAdd
                 ? BYTE_TRUE
                 : BYTE_FALSE;
         IpsecSpdEntriesAugmentation aug = entry.augmentation(IpsecSpdEntriesAugmentation.class);
         if (aug != null) {
-            if (aug.isIsIpv6() != null) {
-                request.isIpv6 = (byte) (aug.isIsIpv6()
-                        ? 1
-                        : 0);
-            }
 
             if (aug.getDirection() != null) {
-                request.isOutbound = (byte) aug.getDirection().getIntValue();
+                request.entry.isOutbound = (byte) aug.getDirection().getIntValue();
             }
 
             if (aug.getPriority() != null) {
-                request.priority = aug.getPriority();
+                request.entry.priority = aug.getPriority();
             }
 
             if (aug.getOperation() != null) {
                 final String operation = aug.getOperation().getName();
                 if (operation.equalsIgnoreCase("bypass")) {
-                    request.policy = (byte) 0;
+                    request.entry.policy = IpsecSpdAction.IPSEC_API_SPD_ACTION_BYPASS;
                 } else if (operation.equalsIgnoreCase("discard")) {
-                    request.policy = (byte) 1;
+                    request.entry.policy = IpsecSpdAction.IPSEC_API_SPD_ACTION_DISCARD;
                 } else if (operation.equalsIgnoreCase("protect")) {
-                    request.policy = (byte) 3;
+                    request.entry.policy = IpsecSpdAction.IPSEC_API_SPD_ACTION_PROTECT;
                 }
             }
 
             if (aug.getLaddrStart() != null) {
                 if (aug.getLaddrStart().getIpv4Address() != null) {
-                    request.localAddressStart =
-                            ipv4AddressNoZoneToArray(aug.getLaddrStart().getIpv4Address().getValue());
+                    request.entry.localAddressStart = ipv4AddressToAddress(aug.getLaddrStart().getIpv4Address());
                 } else if (aug.getLaddrStart().getIpv6Address() != null) {
-                    request.localAddressStart = ipv6AddressNoZoneToArray(aug.getLaddrStart().getIpv6Address());
+                    request.entry.localAddressStart = ipv6AddressToAddress(aug.getLaddrStart().getIpv6Address());
                 }
             }
 
             if (aug.getLaddrStop() != null) {
                 if (aug.getLaddrStop().getIpv4Address() != null) {
-                    request.localAddressStop = ipv4AddressNoZoneToArray(aug.getLaddrStop().getIpv4Address().getValue());
+                    request.entry.localAddressStop = ipv4AddressToAddress(aug.getLaddrStop().getIpv4Address());
                 } else if (aug.getLaddrStop().getIpv6Address() != null) {
-                    request.localAddressStop = ipv6AddressNoZoneToArray(aug.getLaddrStop().getIpv6Address());
+                    request.entry.localAddressStop = ipv6AddressToAddress(aug.getLaddrStop().getIpv6Address());
                 }
             }
 
             if (aug.getRaddrStop() != null) {
                 if (aug.getRaddrStop().getIpv4Address() != null) {
-                    request.remoteAddressStop =
-                            ipv4AddressNoZoneToArray(aug.getRaddrStop().getIpv4Address().getValue());
+                    request.entry.remoteAddressStop = ipv4AddressToAddress(aug.getRaddrStop().getIpv4Address());
                 } else if (aug.getRaddrStop().getIpv6Address() != null) {
-                    request.remoteAddressStop = ipv6AddressNoZoneToArray(aug.getRaddrStop().getIpv6Address());
+                    request.entry.remoteAddressStop = ipv6AddressToAddress(aug.getRaddrStop().getIpv6Address());
                 }
             }
 
             if (aug.getRaddrStart() != null) {
                 if (aug.getRaddrStart().getIpv4Address() != null) {
-                    request.remoteAddressStart =
-                            ipv4AddressNoZoneToArray(aug.getRaddrStart().getIpv4Address().getValue());
+                    request.entry.remoteAddressStart = ipv4AddressToAddress(aug.getRaddrStart().getIpv4Address());
                 } else if (aug.getRaddrStart().getIpv6Address() != null) {
-                    request.remoteAddressStart = ipv6AddressNoZoneToArray(aug.getRaddrStart().getIpv6Address());
+                    request.entry.remoteAddressStart = ipv6AddressToAddress(aug.getRaddrStart().getIpv6Address());
                 }
             }
         }
index 48a2d5a..1da148a 100644 (file)
@@ -30,6 +30,7 @@ import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager.DumpCacheManag
 import io.fd.vpp.jvpp.core.dto.IpNeighborDetails;
 import io.fd.vpp.jvpp.core.dto.IpNeighborDetailsReplyDump;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.IpNeighborFlags;
 import java.util.List;
 import java.util.function.Function;
 import javax.annotation.Nonnull;
@@ -74,12 +75,14 @@ public class Ipv4NeighbourCustomizer extends IpNeighbourReader
         if (dumpOpt.isPresent()) {
             dumpOpt.get().ipNeighborDetails
                     .stream()
-                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress)))
+                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv4AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp4().ip4Address)))
                     .findFirst()
-                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress))
+                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv4AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp4().ip4Address))
                             .withKey(keyMapper().apply(ipNeighborDetails))
-                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.macAddress))
-                            .setOrigin(ipNeighborDetails.isStatic == 0
+                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.neighbor.macAddress.macaddress))
+                            .setOrigin(ipNeighborDetails.neighbor.flags != IpNeighborFlags.IP_API_NEIGHBOR_FLAG_STATIC
                                     ? Dynamic
                                     : Static));
         }
@@ -97,6 +100,7 @@ public class Ipv4NeighbourCustomizer extends IpNeighbourReader
     }
 
     private Function<IpNeighborDetails, NeighborKey> keyMapper() {
-        return ipNeighborDetails -> new NeighborKey(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress));
+        return ipNeighborDetails -> new NeighborKey(
+                arrayToIpv4AddressNoZone(ipNeighborDetails.neighbor.ipAddress.un.getIp4().ip4Address));
     }
 }
\ No newline at end of file
index 8e0267a..c1c2f85 100644 (file)
@@ -67,11 +67,13 @@ public class SubInterfaceIpv4NeighbourCustomizer extends IpNeighbourReader
         if (dumpOpt.isPresent()) {
             dumpOpt.get().ipNeighborDetails
                     .stream()
-                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress)))
+                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv4AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp4().ip4Address)))
                     .findFirst()
-                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress))
+                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv4AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp4().ip4Address))
                             .withKey(keyMapper().apply(ipNeighborDetails))
-                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.macAddress)));
+                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.neighbor.macAddress.macaddress)));
         }
     }
 
@@ -87,6 +89,7 @@ public class SubInterfaceIpv4NeighbourCustomizer extends IpNeighbourReader
     }
 
     private Function<IpNeighborDetails, NeighborKey> keyMapper() {
-        return ipNeighborDetails -> new NeighborKey(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress));
+        return ipNeighborDetails -> new NeighborKey(
+                arrayToIpv4AddressNoZone(ipNeighborDetails.neighbor.ipAddress.un.getIp4().ip4Address));
     }
 }
index 7d75787..92f4962 100644 (file)
@@ -31,6 +31,7 @@ import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager;
 import io.fd.vpp.jvpp.core.dto.IpNeighborDetails;
 import io.fd.vpp.jvpp.core.dto.IpNeighborDetailsReplyDump;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.IpNeighborFlags;
 import java.util.List;
 import java.util.function.Function;
 import javax.annotation.Nonnull;
@@ -69,12 +70,14 @@ public class Ipv6NeighbourCustomizer extends IpNeighbourReader
         if (dumpOpt.isPresent()) {
             dumpOpt.get().ipNeighborDetails
                     .stream()
-                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv6AddressNoZone(ipNeighborDetails.ipAddress)))
+                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv6AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp6().ip6Address)))
                     .findFirst()
-                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv6AddressNoZone(ipNeighborDetails.ipAddress))
+                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv6AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp6().ip6Address))
                             .withKey(keyMapper().apply(ipNeighborDetails))
-                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.macAddress))
-                            .setOrigin(ipNeighborDetails.isStatic == 0
+                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.neighbor.macAddress.macaddress))
+                            .setOrigin(ipNeighborDetails.neighbor.flags != IpNeighborFlags.IP_API_NEIGHBOR_FLAG_STATIC
                                     ? Dynamic
                                     : Static));
         }
@@ -92,6 +95,7 @@ public class Ipv6NeighbourCustomizer extends IpNeighbourReader
     }
 
     private Function<IpNeighborDetails, NeighborKey> keyMapper() {
-        return ipNeighborDetails -> new NeighborKey(arrayToIpv6AddressNoZone(ipNeighborDetails.ipAddress));
+        return ipNeighborDetails -> new NeighborKey(
+                arrayToIpv6AddressNoZone(ipNeighborDetails.neighbor.ipAddress.un.getIp6().ip6Address));
     }
 }
\ No newline at end of file
index acdb209..93e6275 100644 (file)
@@ -88,7 +88,7 @@ public final class NdProxyCustomizer extends FutureJVppCustomizer
 
         return dump.get().ip6NdProxyDetails.stream()
             .filter(detail -> detail.swIfIndex == swIfIndex)
-            .map(detail -> new NdProxyKey(arrayToIpv6AddressNoZone(detail.address)))
+            .map(detail -> new NdProxyKey(arrayToIpv6AddressNoZone(detail.ip.ip6Address)))
             .collect(Collectors.toList());
     }
 
index 4a02861..1227abc 100644 (file)
@@ -67,11 +67,13 @@ public class SubInterfaceIpv6NeighbourCustomizer extends IpNeighbourReader
         if (dumpOpt.isPresent()) {
             dumpOpt.get().ipNeighborDetails
                     .stream()
-                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv6AddressNoZone(ipNeighborDetails.ipAddress)))
+                    .filter(ipNeighborDetails -> ip.equals(arrayToIpv6AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp6().ip6Address)))
                     .findFirst()
-                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv6AddressNoZone(ipNeighborDetails.ipAddress))
+                    .ifPresent(ipNeighborDetails -> builder.setIp(arrayToIpv6AddressNoZone(
+                            ipNeighborDetails.neighbor.ipAddress.un.getIp6().ip6Address))
                             .withKey(keyMapper().apply(ipNeighborDetails))
-                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.macAddress)));
+                            .setLinkLayerAddress(toPhysAddress(ipNeighborDetails.neighbor.macAddress.macaddress)));
         }
     }
 
@@ -87,6 +89,7 @@ public class SubInterfaceIpv6NeighbourCustomizer extends IpNeighbourReader
     }
 
     private Function<IpNeighborDetails, NeighborKey> keyMapper() {
-        return ipNeighborDetails -> new NeighborKey(arrayToIpv6AddressNoZone(ipNeighborDetails.ipAddress));
+        return ipNeighborDetails -> new NeighborKey(
+                arrayToIpv6AddressNoZone(ipNeighborDetails.neighbor.ipAddress.un.getIp6().ip6Address));
     }
 }
index f8edcfb..d5988fa 100644 (file)
@@ -61,11 +61,11 @@ public class Ipv4NeighbourCustomizer extends FutureJVppCustomizer
         LOG.debug("Processing request for Neighbour {} write", id);
 
         addDelNeighbour(id, () -> {
-            IpNeighborAddDel request = preBindIpv4Request(true);
+            IpNeighborAddDel request = preBindRequest(true);
 
-            request.dstAddress = ipv4AddressNoZoneToArray(data.getIp());
-            request.macAddress = parseMac(data.getLinkLayerAddress().getValue());
-            request.swIfIndex = interfaceContext
+            request.neighbor.macAddress = parseMacAddress(data.getLinkLayerAddress().getValue());
+            request.neighbor.ipAddress = ipv4AddressNoZoneToAddress(data.getIp());
+            request.neighbor.swIfIndex = interfaceContext
                     .getIndex(id.firstKeyOf(Interface.class).getName(), writeContext.getMappingContext());
             return request;
         }, getFutureJVpp());
@@ -80,11 +80,11 @@ public class Ipv4NeighbourCustomizer extends FutureJVppCustomizer
         LOG.debug("Processing request for Neighbour {} delete", id);
 
         addDelNeighbour(id, () -> {
-            IpNeighborAddDel request = preBindIpv4Request(false);
+            IpNeighborAddDel request = preBindRequest(false);
 
-            request.dstAddress = ipv4AddressNoZoneToArray(data.getIp());
-            request.macAddress = parseMac(data.getLinkLayerAddress().getValue());
-            request.swIfIndex = interfaceContext
+            request.neighbor.macAddress = parseMacAddress(data.getLinkLayerAddress().getValue());
+            request.neighbor.ipAddress = ipv4AddressNoZoneToAddress(data.getIp());
+            request.neighbor.swIfIndex = interfaceContext
                     .getIndex(id.firstKeyOf(Interface.class).getName(), writeContext.getMappingContext());
             return request;
         }, getFutureJVpp());
index 79d0e55..461de46 100644 (file)
@@ -25,6 +25,7 @@ import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.ProxyArpAddDel;
 import io.fd.vpp.jvpp.core.dto.ProxyArpAddDelReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.Ip4Address;
 import io.fd.vpp.jvpp.core.types.ProxyArp;
 import java.util.concurrent.Future;
 import javax.annotation.Nonnull;
@@ -88,9 +89,11 @@ public class ProxyRangeCustomizer extends FutureJVppCustomizer
         final ProxyArpAddDel proxyArpAddDel = new ProxyArpAddDel();
         proxyArpAddDel.isAdd = isAdd;
         proxyArpAddDel.proxy = new ProxyArp();
-        proxyArpAddDel.proxy.lowAddress = Ipv4Translator.INSTANCE.ipv4AddressNoZoneToArray(lAddr);
-        proxyArpAddDel.proxy.hiAddress = Ipv4Translator.INSTANCE.ipv4AddressNoZoneToArray(hAddr);
-        proxyArpAddDel.proxy.vrfId = vrfId;
+        proxyArpAddDel.proxy.low = new Ip4Address();
+        proxyArpAddDel.proxy.low.ip4Address = Ipv4Translator.INSTANCE.ipv4AddressNoZoneToArray(lAddr);
+        proxyArpAddDel.proxy.hi = new Ip4Address();
+        proxyArpAddDel.proxy.hi.ip4Address = Ipv4Translator.INSTANCE.ipv4AddressNoZoneToArray(hAddr);
+        proxyArpAddDel.proxy.tableId = vrfId;
         return proxyArpAddDel;
     }
 }
index 61685af..89d6dbf 100644 (file)
@@ -55,11 +55,11 @@ public class SubInterfaceIpv4NeighbourCustomizer extends FutureJVppCustomizer
         LOG.debug("Processing request for Neighbour {} write", id);
 
         addDelNeighbour(id, () -> {
-            IpNeighborAddDel request = preBindIpv4Request(true);
+            IpNeighborAddDel request = preBindRequest(true);
 
-            request.dstAddress = ipv4AddressNoZoneToArray(data.getIp());
-            request.macAddress = parseMac(data.getLinkLayerAddress().getValue());
-            request.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
+            request.neighbor.macAddress = parseMacAddress(data.getLinkLayerAddress().getValue());
+            request.neighbor.ipAddress = ipv4AddressNoZoneToAddress(data.getIp());
+            request.neighbor.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
             // we don't have support for sub-interface routing, so not setting vrf
 
             return request;
@@ -75,11 +75,11 @@ public class SubInterfaceIpv4NeighbourCustomizer extends FutureJVppCustomizer
         LOG.debug("Processing request for Neighbour {} delete", id);
 
         addDelNeighbour(id, () -> {
-            IpNeighborAddDel request = preBindIpv4Request(false);
+            IpNeighborAddDel request = preBindRequest(false);
 
-            request.dstAddress = ipv4AddressNoZoneToArray(data.getIp());
-            request.macAddress = parseMac(data.getLinkLayerAddress().getValue());
-            request.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
+            request.neighbor.macAddress = parseMacAddress(data.getLinkLayerAddress().getValue());
+            request.neighbor.ipAddress = ipv4AddressNoZoneToAddress(data.getIp());
+            request.neighbor.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
 
             //TODO HONEYCOMB-182 if it is necessary for future use ,make adjustments to be able to set vrfid
             //request.vrfId
index ed06ab0..f710508 100644 (file)
@@ -25,12 +25,14 @@ import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
 import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer;
 import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
 import io.fd.hc2vpp.common.translate.util.NamingContext;
+import io.fd.hc2vpp.l3.utils.ip.write.IpWriter;
 import io.fd.honeycomb.translate.MappingContext;
 import io.fd.honeycomb.translate.spi.write.ListWriterCustomizer;
 import io.fd.honeycomb.translate.write.WriteContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.IpNeighborAddDel;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.IpNeighborFlags;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv6.Neighbor;
@@ -40,7 +42,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class Ipv6NeighbourCustomizer extends FutureJVppCustomizer
-        implements ListWriterCustomizer<Neighbor, NeighborKey>, ByteDataTranslator, AddressTranslator,
+        implements ListWriterCustomizer<Neighbor, NeighborKey>, ByteDataTranslator, AddressTranslator, IpWriter,
         JvppReplyConsumer {
 
     private static final Logger LOG = LoggerFactory.getLogger(Ipv6NeighbourCustomizer.class);
@@ -59,7 +61,7 @@ public class Ipv6NeighbourCustomizer extends FutureJVppCustomizer
         checkNotNull(dataAfter, "Cannot write null neighbour");
         checkArgument(id.firstKeyOf(Interface.class) != null, "No parent interface key found");
 
-        LOG.debug("Processing request for Neigbour write");
+        LOG.debug("Processing request for Neighbour write");
         String interfaceName = id.firstKeyOf(Interface.class).getName();
         MappingContext mappingContext = writeContext.getMappingContext();
 
@@ -79,7 +81,7 @@ public class Ipv6NeighbourCustomizer extends FutureJVppCustomizer
         checkNotNull(dataBefore, "Cannot delete null neighbour");
         checkArgument(id.firstKeyOf(Interface.class) != null, "No parent interface key found");
 
-        LOG.debug("Processing request for Neigbour delete");
+        LOG.debug("Processing request for Neighbour delete");
         String interfaceName = id.firstKeyOf(Interface.class).getName();
         MappingContext mappingContext = writeContext.getMappingContext();
 
@@ -94,15 +96,13 @@ public class Ipv6NeighbourCustomizer extends FutureJVppCustomizer
 
     private void addDelNeighbourAndReply(InstanceIdentifier<Neighbor> id, boolean add, int parentInterfaceIndex,
                                          Neighbor data) throws WriteFailedException {
-
-        IpNeighborAddDel request = new IpNeighborAddDel();
-
-        request.isAdd = booleanToByte(add);
-        request.isIpv6 = 1;
-        request.isStatic = 1;
-        request.dstAddress = ipv6AddressNoZoneToArray(data.getIp());
-        request.macAddress = parseMac(data.getLinkLayerAddress().getValue());
-        request.swIfIndex = parentInterfaceIndex;
-        getReplyForWrite(getFutureJVpp().ipNeighborAddDel(request).toCompletableFuture(), id);
+        addDelNeighbour(id, () -> {
+            IpNeighborAddDel request = preBindRequest(add);
+            request.neighbor.flags = IpNeighborFlags.IP_API_NEIGHBOR_FLAG_STATIC;
+            request.neighbor.macAddress = parseMacAddress(data.getLinkLayerAddress().getValue());
+            request.neighbor.ipAddress = ipv6AddressToAddress(data.getIp());
+            request.neighbor.swIfIndex = parentInterfaceIndex;
+            return request;
+        }, getFutureJVpp());
     }
 }
index ca6e2bf..23556a4 100644 (file)
@@ -27,6 +27,7 @@ import io.fd.honeycomb.translate.write.WriteContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.Ip6NdProxyAddDel;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.Ip6Address;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.nd.proxy.rev170315.interfaces._interface.ipv6.nd.proxies.NdProxy;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.nd.proxy.rev170315.interfaces._interface.ipv6.nd.proxies.NdProxyKey;
@@ -76,7 +77,8 @@ public final class NdProxyCustomizer extends FutureJVppCustomizer
 
         final Ip6NdProxyAddDel request = new Ip6NdProxyAddDel();
         request.swIfIndex = swIfIndex;
-        request.address = addressBytes;
+        request.ip = new Ip6Address();
+        request.ip.ip6Address = addressBytes;
         request.isDel = booleanToByte(!add);
 
         getReplyForWrite(getFutureJVpp().ip6NdProxyAddDel(request).toCompletableFuture(), id);
index 3fc43f7..00e499f 100644 (file)
@@ -55,11 +55,10 @@ public class SubInterfaceIpv6NeighbourCustomizer extends FutureJVppCustomizer
         LOG.debug("Processing request for Neighbour {} write", id);
 
         addDelNeighbour(id, () -> {
-            IpNeighborAddDel request = preBindIpv6Request(true);
-
-            request.dstAddress = ipv6AddressNoZoneToArray(data.getIp());
-            request.macAddress = parseMac(data.getLinkLayerAddress().getValue());
-            request.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
+            IpNeighborAddDel request = preBindRequest(true);
+            request.neighbor.macAddress = parseMacAddress(data.getLinkLayerAddress().getValue());
+            request.neighbor.ipAddress = ipv6AddressToAddress(data.getIp());
+            request.neighbor.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
             // we don't have support for sub-interface routing, so not setting vrf
 
             return request;
@@ -75,11 +74,10 @@ public class SubInterfaceIpv6NeighbourCustomizer extends FutureJVppCustomizer
         LOG.debug("Processing request for Neighbour {} delete", id);
 
         addDelNeighbour(id, () -> {
-            IpNeighborAddDel request = preBindIpv6Request(false);
-
-            request.dstAddress = ipv6AddressNoZoneToArray(data.getIp());
-            request.macAddress = parseMac(data.getLinkLayerAddress().getValue());
-            request.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
+            IpNeighborAddDel request = preBindRequest(false);
+            request.neighbor.macAddress = parseMacAddress(data.getLinkLayerAddress().getValue());
+            request.neighbor.ipAddress = ipv6AddressToAddress(data.getIp());
+            request.neighbor.swIfIndex = subInterfaceIndex(id, interfaceContext, writeContext.getMappingContext());
 
             //TODO HONEYCOMB-182 if it is necessary for future use ,make adjustments to be able to set vrfid
             //request.vrfId
index 48a1b73..9534ac9 100644 (file)
@@ -31,6 +31,13 @@ import io.fd.vpp.jvpp.core.dto.IpNeighborDetails;
 import io.fd.vpp.jvpp.core.dto.IpNeighborDetailsReplyDump;
 import io.fd.vpp.jvpp.core.dto.IpNeighborDump;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.Address;
+import io.fd.vpp.jvpp.core.types.AddressFamily;
+import io.fd.vpp.jvpp.core.types.AddressUnion;
+import io.fd.vpp.jvpp.core.types.Ip4Address;
+import io.fd.vpp.jvpp.core.types.Ip6Address;
+import io.fd.vpp.jvpp.core.types.IpNeighbor;
+import io.fd.vpp.jvpp.core.types.MacAddress;
 import java.util.Arrays;
 import java.util.List;
 import javax.annotation.Nonnull;
@@ -185,9 +192,23 @@ public interface InterfaceChildNodeTest extends NamingContextHelper, FutureProdu
 
     static IpNeighborDetails neighborDump(byte[] address, int isIpv6, byte[] mac) {
         IpNeighborDetails detail = new IpNeighborDetails();
-        detail.ipAddress = address;
-        detail.isIpv6 = (byte) isIpv6;
-        detail.macAddress = mac;
+        detail.neighbor = new IpNeighbor();
+        detail.neighbor.ipAddress = new Address();
+        AddressUnion addressUnion;
+        if (isIpv6 == 1) {
+            Ip6Address ip6Address = new Ip6Address();
+            ip6Address.ip6Address = address;
+            addressUnion =new AddressUnion(ip6Address);
+            detail.neighbor.ipAddress.af = AddressFamily.ADDRESS_IP6;
+        } else {
+            Ip4Address ip4Address = new Ip4Address();
+            ip4Address.ip4Address = address;
+            addressUnion =new AddressUnion(ip4Address);
+            detail.neighbor.ipAddress.af = AddressFamily.ADDRESS_IP4;
+        }
+        detail.neighbor.ipAddress.un = addressUnion;
+        detail.neighbor.macAddress = new MacAddress();
+        detail.neighbor.macAddress.macaddress = mac;
         return detail;
     }
 
index bc4cab5..a292507 100644 (file)
@@ -29,6 +29,7 @@ import io.fd.honeycomb.translate.read.ReadFailedException;
 import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
 import io.fd.vpp.jvpp.core.dto.Ip6NdProxyDetails;
 import io.fd.vpp.jvpp.core.dto.Ip6NdProxyDetailsReplyDump;
+import io.fd.vpp.jvpp.core.types.Ip6Address;
 import java.util.List;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.nd.proxy.rev170315.NdProxyIp6StateAugmentation;
@@ -63,13 +64,16 @@ public class NdProxyCustomizerTest extends InitializingListReaderCustomizerTest<
         final Ip6NdProxyDetailsReplyDump reply = new Ip6NdProxyDetailsReplyDump();
         final Ip6NdProxyDetails proxy1 = new Ip6NdProxyDetails();
         proxy1.swIfIndex = IF1_INDEX;
-        proxy1.address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01};
+        proxy1.ip = new Ip6Address();
+        proxy1.ip.ip6Address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01};
         final Ip6NdProxyDetails proxy2 = new Ip6NdProxyDetails();
         proxy2.swIfIndex = IF1_INDEX;
-        proxy2.address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02};
+        proxy2.ip = new Ip6Address();
+        proxy2.ip.ip6Address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02};
         final Ip6NdProxyDetails proxy3 = new Ip6NdProxyDetails();
         proxy3.swIfIndex = IF2_INDEX;
-        proxy3.address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03};
+        proxy3.ip = new Ip6Address();
+        proxy3.ip.ip6Address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03};
         reply.ip6NdProxyDetails.add(proxy1);
         reply.ip6NdProxyDetails.add(proxy2);
         reply.ip6NdProxyDetails.add(proxy3);
index 5a0de66..eda79fc 100644 (file)
@@ -26,6 +26,7 @@ import io.fd.hc2vpp.l3.write.ipv4.ProxyRangeCustomizer;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.ProxyArpAddDel;
 import io.fd.vpp.jvpp.core.dto.ProxyArpAddDelReply;
+import io.fd.vpp.jvpp.core.types.Ip4Address;
 import io.fd.vpp.jvpp.core.types.ProxyArp;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.proxy.arp.rev180703.ProxyRanges;
@@ -90,9 +91,11 @@ public class ProxyRangeCustomizerTest extends WriterCustomizerTest implements By
         final ProxyArpAddDel request = new ProxyArpAddDel();
         request.isAdd = booleanToByte(isAdd);
         request.proxy = new ProxyArp();
-        request.proxy.vrfId = 123;
-        request.proxy.lowAddress = new byte[] {10, 1, 1, 1};
-        request.proxy.hiAddress = new byte[] {10, 1, 1, 2};
+        request.proxy.tableId = 123;
+        request.proxy.low = new Ip4Address();
+        request.proxy.low.ip4Address = new byte[] {10, 1, 1, 1};
+        request.proxy.hi = new Ip4Address();
+        request.proxy.hi.ip4Address = new byte[] {10, 1, 1, 2};
         return request;
     }
 }
index bab261a..7d2b647 100644 (file)
@@ -30,6 +30,13 @@ import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.VppBaseCallException;
 import io.fd.vpp.jvpp.core.dto.IpNeighborAddDel;
 import io.fd.vpp.jvpp.core.dto.IpNeighborAddDelReply;
+import io.fd.vpp.jvpp.core.types.Address;
+import io.fd.vpp.jvpp.core.types.AddressFamily;
+import io.fd.vpp.jvpp.core.types.AddressUnion;
+import io.fd.vpp.jvpp.core.types.Ip4Address;
+import io.fd.vpp.jvpp.core.types.IpNeighbor;
+import io.fd.vpp.jvpp.core.types.IpNeighborFlags;
+import io.fd.vpp.jvpp.core.types.MacAddress;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
@@ -120,12 +127,18 @@ public class Ipv4NeighbourCustomizerTest extends WriterCustomizerTest implements
     }
     private IpNeighborAddDel getExpectedRequest(final boolean isAdd) {
         final IpNeighborAddDel request = new IpNeighborAddDel();
-        request.isIpv6 = 0;
+        request.neighbor = new IpNeighbor();
+        request.neighbor.macAddress = new MacAddress();
+        request.neighbor.macAddress.macaddress =
+                new byte[]{(byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xee, 0x11, 0x22};
+        request.neighbor.ipAddress = new Address();
+        request.neighbor.ipAddress.af = AddressFamily.ADDRESS_IP4;
+        Ip4Address ip4Address = new Ip4Address();
+        ip4Address.ip4Address = new byte[]{(byte) 192, (byte) 168, 2, 1};
+        request.neighbor.ipAddress.un = new AddressUnion(ip4Address);
         request.isAdd = booleanToByte(isAdd);
-        request.isStatic = 1;
-        request.dstAddress = new byte[] {(byte) 192, (byte) 168, 2, 1};
-        request.macAddress = new byte[] {(byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xee, 0x11, 0x22};
-        request.swIfIndex = IFACE_ID;
+        request.neighbor.flags = IpNeighborFlags.IP_API_NEIGHBOR_FLAG_STATIC;
+        request.neighbor.swIfIndex = IFACE_ID;
         return request;
     }
 }
\ No newline at end of file
index 5f11a5d..ec8734c 100644 (file)
@@ -29,6 +29,13 @@ import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.VppBaseCallException;
 import io.fd.vpp.jvpp.core.dto.IpNeighborAddDel;
 import io.fd.vpp.jvpp.core.dto.IpNeighborAddDelReply;
+import io.fd.vpp.jvpp.core.types.Address;
+import io.fd.vpp.jvpp.core.types.AddressFamily;
+import io.fd.vpp.jvpp.core.types.AddressUnion;
+import io.fd.vpp.jvpp.core.types.Ip6Address;
+import io.fd.vpp.jvpp.core.types.IpNeighbor;
+import io.fd.vpp.jvpp.core.types.IpNeighborFlags;
+import io.fd.vpp.jvpp.core.types.MacAddress;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
@@ -121,12 +128,18 @@ public class Ipv6NeighbourCustomizerTest extends WriterCustomizerTest implements
 
     private IpNeighborAddDel getExpectedRequest(final boolean isAdd) {
         final IpNeighborAddDel request = new IpNeighborAddDel();
-        request.isIpv6 = 1;
         request.isAdd = booleanToByte(isAdd);
-        request.isStatic = 1;
-        request.dstAddress = new byte[]{32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1};
-        request.macAddress = new byte[]{(byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xee, 0x11, 0x22};
-        request.swIfIndex = IFACE_ID;
+        request.neighbor = new IpNeighbor();
+        request.neighbor.macAddress = new MacAddress();
+        request.neighbor.macAddress.macaddress =
+                new byte[]{(byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xee, 0x11, 0x22};
+        request.neighbor.ipAddress = new Address();
+        request.neighbor.ipAddress.af = AddressFamily.ADDRESS_IP6;
+        Ip6Address ip6Address = new Ip6Address();
+        ip6Address.ip6Address = new byte[]{32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1};
+        request.neighbor.ipAddress.un = new AddressUnion(ip6Address);
+        request.neighbor.flags = IpNeighborFlags.IP_API_NEIGHBOR_FLAG_STATIC;
+        request.neighbor.swIfIndex = IFACE_ID;
         return request;
     }
 
index 1bdad2e..582b8e9 100644 (file)
@@ -26,6 +26,7 @@ import io.fd.hc2vpp.common.translate.util.NamingContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.Ip6NdProxyAddDel;
 import io.fd.vpp.jvpp.core.dto.Ip6NdProxyAddDelReply;
+import io.fd.vpp.jvpp.core.types.Ip6Address;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.nd.proxy.rev170315.NdProxyIp6Augmentation;
 import org.opendaylight.yang.gen.v1.http.fd.io.hc2vpp.yang.nd.proxy.rev170315.interfaces._interface.ipv6.NdProxies;
@@ -66,7 +67,8 @@ public class NdProxyCustomizerTest extends WriterCustomizerTest {
         customizer.writeCurrentAttributes(getId(address), data, writeContext);
         final Ip6NdProxyAddDel request = new Ip6NdProxyAddDel();
         request.swIfIndex = IF_INDEX;
-        request.address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01};
+        request.ip = new Ip6Address();
+        request.ip.ip6Address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01};
         verify(api).ip6NdProxyAddDel(request);
     }
 
@@ -85,7 +87,8 @@ public class NdProxyCustomizerTest extends WriterCustomizerTest {
         final Ip6NdProxyAddDel request = new Ip6NdProxyAddDel();
         request.isDel = 1;
         request.swIfIndex = IF_INDEX;
-        request.address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03};
+        request.ip = new Ip6Address();
+        request.ip.ip6Address = new byte[] {0x20, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03};
         verify(api).ip6NdProxyAddDel(request);
     }
 
index d3b328c..00e34d3 100644 (file)
@@ -29,6 +29,8 @@ import io.fd.vpp.jvpp.core.dto.IpNeighborAddDel;
 import io.fd.vpp.jvpp.core.dto.SwInterfaceAddDelAddress;
 import io.fd.vpp.jvpp.core.dto.SwInterfaceAddDelAddressReply;
 import io.fd.vpp.jvpp.core.future.FutureJVppCore;
+import io.fd.vpp.jvpp.core.types.IpNeighbor;
+import io.fd.vpp.jvpp.core.types.IpNeighborFlags;
 import java.util.concurrent.CompletionStage;
 import java.util.function.Supplier;
 import javax.annotation.Nonnegative;
@@ -142,25 +144,11 @@ public interface IpWriter extends ByteDataTranslator, AddressTranslator, JvppRep
         getReplyForWrite(api.ipNeighborAddDel(requestSupplier.get()).toCompletableFuture(), id);
     }
 
-    default IpNeighborAddDel preBindIpv4Request(final boolean add) {
-        IpNeighborAddDel request = staticPreBindRequest(add);
-        request.isIpv6 = 0;
-
-        return request;
-    }
-
-    default IpNeighborAddDel preBindIpv6Request(final boolean add) {
-        IpNeighborAddDel request = staticPreBindRequest(add);
-        request.isIpv6 = 1;
-
-        return request;
-    }
-
-    static IpNeighborAddDel staticPreBindRequest(final boolean add) {
+    default IpNeighborAddDel preBindRequest(final boolean add) {
         IpNeighborAddDel request = new IpNeighborAddDel();
-
+        request.neighbor = new IpNeighbor();
         request.isAdd = ByteDataTranslator.INSTANCE.booleanToByte(add);
-        request.isStatic = 1;
+        request.neighbor.flags = IpNeighborFlags.IP_API_NEIGHBOR_FLAG_STATIC;
         return request;
     }
 }
index 51a43ca..e818be8 100644 (file)
@@ -82,8 +82,7 @@ final class PrefixCustomizer extends FutureJVppCustomizer
         final int ifcIndex = interfaceContext.getIndex(ifcName, writeContext.getMappingContext());
         final SwInterfaceIp6NdRaPrefix request = new SwInterfaceIp6NdRaPrefix();
         request.swIfIndex = ifcIndex;
-        request.address = ipv6AddressPrefixToArray(prefix.getPrefixSpec());
-        request.addressLength = extractPrefix(prefix.getPrefixSpec()); // prefix length (vpp api naming bug)
+        request.prefix = ipv6AddressPrefixToPrefix(prefix.getPrefixSpec());
 
         if (isDelete) {
             request.isNo = 1;
index 7321acd..3f99b79 100644 (file)
@@ -29,6 +29,10 @@ import io.fd.honeycomb.test.tools.annotations.InjectTestData;
 import io.fd.honeycomb.translate.write.WriteFailedException;
 import io.fd.vpp.jvpp.core.dto.SwInterfaceIp6NdRaPrefix;
 import io.fd.vpp.jvpp.core.dto.SwInterfaceIp6NdRaPrefixReply;
+import io.fd.vpp.jvpp.core.types.Address;
+import io.fd.vpp.jvpp.core.types.AddressFamily;
+import io.fd.vpp.jvpp.core.types.AddressUnion;
+import io.fd.vpp.jvpp.core.types.Ip6Address;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
@@ -82,14 +86,26 @@ public class PrefixCustomizerTest extends WriterCustomizerTest implements Schema
         request.swIfIndex = IFC_INDEX;
 
         // 2001:0db8:0a0b:12f0:0000:0000:0000:0002/64
-        request.address =
-            new byte[] {0x20, 0x01, 0x0d, (byte) 0xb8, 0x0a, 0x0b, 0x12, (byte) 0xf0, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0x02};
-        request.addressLength = 64;
+        request.prefix = getPrefix(
+                new byte[]{0x20, 0x01, 0x0d, (byte) 0xb8, 0x0a, 0x0b, 0x12, (byte) 0xf0, 0, 0, 0, 0, 0, 0, 0, 0x02},
+                (byte) 64);
         request.valLifetime = 2592000; // default value
         request.prefLifetime = 604800; // default value
         verify(api).swInterfaceIp6NdRaPrefix(request);
     }
 
+    public io.fd.vpp.jvpp.core.types.Prefix getPrefix(byte[] ip6address, byte length) {
+        io.fd.vpp.jvpp.core.types.Prefix prefix = new io.fd.vpp.jvpp.core.types.Prefix();
+        Address address = new Address();
+        address.af = AddressFamily.ADDRESS_IP6;
+        Ip6Address ip6Address = new Ip6Address();
+        ip6Address.ip6Address = ip6address;
+        address.un = new AddressUnion(ip6Address);
+        prefix.addressLength = length;
+        prefix.address = address;
+        return prefix;
+    }
+
     @Test
     public void testUpdate(@InjectTestData(resourcePath = "/ra/complexPrefix.json", id = RA_PATH) PrefixList prefixList)
         throws WriteFailedException {
@@ -99,9 +115,9 @@ public class PrefixCustomizerTest extends WriterCustomizerTest implements Schema
         request.swIfIndex = IFC_INDEX;
 
         // 2001:0db8:0a0b:12f0:0000:0000:0000:0002/64
-        request.address =
-            new byte[] {0x20, 0x01, 0x0d, (byte) 0xb8, 0x0a, 0x0b, 0x12, (byte) 0xf0, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0x02};
-        request.addressLength = 64;
+        request.prefix = getPrefix(
+                new byte[]{0x20, 0x01, 0x0d, (byte) 0xb8, 0x0a, 0x0b, 0x12, (byte) 0xf0, 0, 0, 0, 0, 0, 0, 0, 0x02},
+                (byte) 64);
         request.noAdvertise = 1;
         request.noAutoconfig = 1;
         request.valLifetime = -1;
@@ -117,9 +133,9 @@ public class PrefixCustomizerTest extends WriterCustomizerTest implements Schema
         final SwInterfaceIp6NdRaPrefix request = new SwInterfaceIp6NdRaPrefix();
         request.swIfIndex = IFC_INDEX;
         // 2001:0db8:0a0b:12f0:0000:0000:0000:0002/64
-        request.address =
-            new byte[] {0x20, 0x01, 0x0d, (byte) 0xb8, 0x0a, 0x0b, 0x12, (byte) 0xf0, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0x02};
-        request.addressLength = 64;
+        request.prefix = getPrefix(
+                new byte[]{0x20, 0x01, 0x0d, (byte) 0xb8, 0x0a, 0x0b, 0x12, (byte) 0xf0, 0, 0, 0, 0, 0, 0, 0, 0x02},
+                (byte) 64);
         request.isNo = 1;
         verify(api).swInterfaceIp6NdRaPrefix(request);
     }
index 24f4ae9..5f8a283 100644 (file)
@@ -18,9 +18,14 @@ package io.fd.hc2vpp.common.translate.util;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import io.fd.vpp.jvpp.core.types.Address;
+import io.fd.vpp.jvpp.core.types.AddressFamily;
+import io.fd.vpp.jvpp.core.types.AddressUnion;
+import io.fd.vpp.jvpp.core.types.Ip4Address;
 import java.util.Arrays;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 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.inet.types.rev130715.Ipv4Prefix;
 
@@ -83,6 +88,34 @@ public interface Ipv4Translator extends ByteDataTranslator {
         return ipv4AddressNoZoneToArray(ipv4Addr.getValue());
     }
 
+    /**
+     * Transform Ipv4 address to a Ip4Address acceptable by VPP.
+     *
+     * @return byte array with address bytes
+     */
+    default Address ipv4AddressNoZoneToAddress(final Ipv4AddressNoZone ipv4Addr) {
+        Address address = new Address();
+        address.af = AddressFamily.ADDRESS_IP4;
+        Ip4Address ip4Address = new Ip4Address();
+        ip4Address.ip4Address = ipv4AddressNoZoneToArray(ipv4Addr);
+        address.un = new AddressUnion(ip4Address);
+        return address;
+    }
+
+    /**
+     * Transform Ipv4 address to a Ip4Address acceptable by VPP.
+     *
+     * @return byte array with address bytes
+     */
+    default Address ipv4AddressToAddress(final Ipv4Address ipv4Addr) {
+        Address address = new Address();
+        address.af = AddressFamily.ADDRESS_IP4;
+        Ip4Address ip4Address = new Ip4Address();
+        ip4Address.ip4Address = ipv4AddressNoZoneToArray(ipv4Addr.getValue());
+        address.un = new AddressUnion(ip4Address);
+        return address;
+    }
+
     default byte[] ipv4AddressNoZoneToArray(final String ipv4Addr) {
         byte[] retval = new byte[4];
         String[] dots = ipv4Addr.split("\\.");
index b1199d7..d5c0ae2 100644 (file)
@@ -21,6 +21,11 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 import com.google.common.net.InetAddresses;
+import io.fd.vpp.jvpp.core.types.Address;
+import io.fd.vpp.jvpp.core.types.AddressFamily;
+import io.fd.vpp.jvpp.core.types.AddressUnion;
+import io.fd.vpp.jvpp.core.types.Ip6Address;
+import io.fd.vpp.jvpp.core.types.Prefix;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
@@ -45,8 +50,25 @@ public interface Ipv6Translator extends ByteDataTranslator {
         return InetAddresses.forString(address.getValue()).getAddress();
     }
 
+    /**
+     * Transform Ipv6 address to a Address acceptable by VPP.
+     *
+     * @param address {@link Ipv6Address} to be translated
+     * @return Vpp {@link Address} from Ipv6 address
+     */
+    default Address ipv6AddressToAddress(@Nonnull final Ipv6Address address) {
+        Address addr = new Address();
+        addr.af = AddressFamily.ADDRESS_IP6;
+        Ip6Address ip6Address = new Ip6Address();
+        ip6Address.ip6Address = ipv6AddressNoZoneToArray(address);
+        addr.un = new AddressUnion(ip6Address);
+        return addr;
+    }
+
     /**
      * Creates address array from address part of {@link Ipv6Prefix}
+     *
+     * @return Ipv6 address as byte array
      */
     default byte[] ipv6AddressPrefixToArray(@Nonnull final Ipv6Prefix ipv6Prefix) {
         checkNotNull(ipv6Prefix, "Cannot convert null prefix");
@@ -55,6 +77,23 @@ public interface Ipv6Translator extends ByteDataTranslator {
                 new Ipv6Address(ipv6Prefix.getValue().substring(0, ipv6Prefix.getValue().indexOf('/')))));
     }
 
+    /**
+     * Transforms {@link Prefix} from {@link Ipv6Prefix}
+     * @param ipv6Prefix prefix to be translated
+     * @return Vpp {@link Prefix} from {@link Ipv6Prefix}
+     */
+    default Prefix ipv6AddressPrefixToPrefix(@Nonnull final Ipv6Prefix ipv6Prefix) {
+        checkNotNull(ipv6Prefix, "Cannot convert null prefix");
+        Prefix prefix = new Prefix();
+        prefix.address = new Address();
+        prefix.address.af = AddressFamily.ADDRESS_IP6;
+        Ip6Address ip6Address = new Ip6Address();
+        ip6Address.ip6Address = ipv6AddressPrefixToArray(ipv6Prefix);
+        prefix.address.un = new AddressUnion(ip6Address);
+        prefix.addressLength = extractPrefix(ipv6Prefix);
+        return prefix;
+    }
+
     /**
      * Extracts {@link Ipv6Prefix} prefix
      */
index 71b8a15..657029e 100644 (file)
@@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import com.google.common.base.Splitter;
+import io.fd.vpp.jvpp.core.types.MacAddress;
 import java.util.Arrays;
 import java.util.List;
 import java.util.function.BiConsumer;
@@ -37,6 +38,9 @@ public interface MacTranslator {
 
     /**
      * Parse string represented mac address (using ":" as separator) into a byte array
+     *
+     * @param macAddress string representation of MAC address (using ":" as separator)
+     * @return byte array mac address
      */
     @Nonnull
     default byte[] parseMac(@Nonnull final String macAddress) {
@@ -45,6 +49,19 @@ public interface MacTranslator {
         return parseMacLikeString(parts);
     }
 
+    /**
+     * Parse string represented mac address (using ":" as separator) into a MacAddress in VPP
+     *
+     * @param macAddress string representation of MAC address (using ":" as separator)
+     * @return VPP MacAddress
+     */
+    @Nonnull
+    default MacAddress parseMacAddress(@Nonnull final String macAddress) {
+        MacAddress mac = new MacAddress();
+        mac.macaddress = parseMac(macAddress);
+        return mac;
+    }
+
     default byte[] parseMacLikeString(final List<String> strings) {
         return strings.stream().limit(6).map(this::parseHexByte).collect(
                 () -> new byte[strings.size()],