IPv6: Replace yang notifications 22/76222/5
authorSomashekar Byrappa <somashekar.b@altencalsoftlabs.com>
Tue, 18 Sep 2018 14:04:12 +0000 (19:34 +0530)
committerSridhar Gaddam <sgaddam@redhat.com>
Fri, 5 Oct 2018 09:54:49 +0000 (09:54 +0000)
+ Replaced yang notifications with direct API call for reliability.
+ Removed duplicate code by replacing with Ipv6NaDecoder.
+ In ipv6-nd-util.yang, instead of "notification na-received",
  neighbor-advertise-packet is augmented with packet-metadata. The
  corresponding code has been updated.
+ This patch is dependent on Genius patch [0], hence it needs to be
  merged along with [0].

JIRA: NETVIRT-1434

[0] https://git.opendaylight.org/gerrit/#/c/76221/

Change-Id: Ib29c36a4a80f920729f69facd67bd5e78b3b6329
Signed-off-by: Somashekar Byrappa <somashekar.b@altencalsoftlabs.com>
ipv6service/api/pom.xml
ipv6service/api/src/main/java/org/opendaylight/netvirt/ipv6service/api/IIpv6PacketListener.java [new file with mode: 0644]
ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/Ipv6PktHandler.java
ipv6service/impl/src/main/resources/org/opendaylight/blueprint/ipv6service.xml
ipv6service/impl/src/test/java/org/opendaylight/netvirt/ipv6service/Ipv6PktHandlerTest.java
vpnmanager/impl/pom.xml
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/AbstractIpLearnNotificationHandler.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv4/ArpNotificationHandler.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv6/Ipv6NaPacketListener.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv6/Ipv6NaNotificationHandler.java with 64% similarity]
vpnmanager/impl/src/main/resources/org/opendaylight/blueprint/vpnmanager.xml

index b9c3f46c7a13e6395fefff1124d46d3e5aa82842..4634645e935d2d1afec4b6a278383d8d2e4620be 100644 (file)
@@ -22,6 +22,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <modelVersion>4.0.0</modelVersion>
 
     <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.genius</groupId>
+            <artifactId>ipv6util-api</artifactId>
+            <version>${genius.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.mdsal.model</groupId>
             <artifactId>ietf-inet-types-2013-07-15</artifactId>
diff --git a/ipv6service/api/src/main/java/org/opendaylight/netvirt/ipv6service/api/IIpv6PacketListener.java b/ipv6service/api/src/main/java/org/opendaylight/netvirt/ipv6service/api/IIpv6PacketListener.java
new file mode 100644 (file)
index 0000000..8ddf21b
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2018 Alten Calsoft Labs India Pvt Ltd. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.netvirt.ipv6service.api;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev160620.NeighborAdvertisePacket;
+
+public interface IIpv6PacketListener {
+
+    /**
+     * On IPv6 Neighbor Advertisement packet received.
+     *
+     * @param naPacket the IPv6 NA packet
+     */
+    void onNaReceived(NeighborAdvertisePacket naPacket);
+}
index 9642c3fd49654ebc168fc02f5123bf479423c453..7b6baa102335d77451167de1ac97aecc5f8ea9d9 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.netvirt.ipv6service;
 
-import com.google.common.util.concurrent.ListenableFuture;
 import java.math.BigInteger;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -19,15 +18,16 @@ import java.util.concurrent.atomic.AtomicLong;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
 import org.opendaylight.genius.ipv6util.api.Icmpv6Type;
 import org.opendaylight.genius.ipv6util.api.Ipv6Constants;
 import org.opendaylight.genius.ipv6util.api.Ipv6Constants.Ipv6RouterAdvertisementType;
 import org.opendaylight.genius.ipv6util.api.Ipv6Util;
+import org.opendaylight.genius.ipv6util.api.decoders.Ipv6NaDecoder;
 import org.opendaylight.genius.mdsalutil.MetaDataUtil;
 import org.opendaylight.genius.mdsalutil.NwConstants;
 import org.opendaylight.genius.mdsalutil.packet.IPProtocols;
 import org.opendaylight.infrautils.utils.concurrent.JdkFutures;
+import org.opendaylight.netvirt.ipv6service.api.IIpv6PacketListener;
 import org.opendaylight.netvirt.ipv6service.utils.Ipv6ServiceUtils;
 import org.opendaylight.openflowplugin.libraries.liblldp.BitBufferHelper;
 import org.opendaylight.openflowplugin.libraries.liblldp.BufferException;
@@ -41,7 +41,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev16
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev160620.NeighborSolicitationPacketBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev160620.RouterSolicitationPacket;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev160620.RouterSolicitationPacketBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.NaReceivedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.PacketMetadata;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.PacketMetadataBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingListener;
@@ -50,7 +51,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.Pa
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInputBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.Notification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,16 +60,15 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
     private final AtomicLong pktProccessedCounter = new AtomicLong(0);
     private final PacketProcessingService pktService;
     private final IfMgr ifMgr;
-    private final NotificationPublishService notificationPublishService;
+    private final IIpv6PacketListener ipv6PktListener;
 
     private final ExecutorService packetProcessor = Executors.newCachedThreadPool();
 
     @Inject
-    public Ipv6PktHandler(PacketProcessingService pktService, IfMgr ifMgr,
-            NotificationPublishService notificationPublishService) {
+    public Ipv6PktHandler(PacketProcessingService pktService, IfMgr ifMgr, IIpv6PacketListener ipv6PktListener) {
         this.pktService = pktService;
         this.ifMgr = ifMgr;
-        this.notificationPublishService = notificationPublishService;
+        this.ipv6PktListener = ipv6PktListener;
     }
 
     @Override
@@ -406,7 +405,7 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
             byte[] data = packet.getPayload();
             NeighborAdvertisePacket naPdu;
             try {
-                naPdu = deserializeNAPacket(data);
+                naPdu = new Ipv6NaDecoder(data).decode();
             } catch (UnknownHostException | BufferException e) {
                 LOG.warn("Exception occured during deserializing NA packet", e);
                 return;
@@ -424,75 +423,16 @@ public class Ipv6PktHandler implements AutoCloseable, PacketProcessingListener {
             long portTag = MetaDataUtil.getLportFromMetadata(metadata).intValue();
             String interfaceName = ifMgr.getInterfaceNameFromTag(portTag);
 
-            NaReceivedBuilder naReceivedBuilder = new NaReceivedBuilder().setSourceMac(naPdu.getSourceMac())
-                    .setDestinationMac(naPdu.getDestinationMac()).setSourceIpv6(naPdu.getSourceIpv6())
-                    .setDestinationIpv6(naPdu.getDestinationIpv6()).setTargetAddress(naPdu.getTargetAddress())
-                    .setTargetLlAddress(naPdu.getTargetLlAddress()).setOfTableId((long) tableId).setMetadata(metadata)
-                    .setInterface(interfaceName);
-            fireNotification(naReceivedBuilder.build());
-        }
-
-        private NeighborAdvertisePacket deserializeNAPacket(byte[] data) throws BufferException, UnknownHostException {
-            NeighborAdvertisePacketBuilder naPdu = new NeighborAdvertisePacketBuilder();
-            int bitOffset = 0;
-
-            naPdu.setDestinationMac(
-                    new MacAddress(Ipv6Util.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
-            bitOffset = bitOffset + 48;
-            naPdu.setSourceMac(
-                    new MacAddress(Ipv6Util.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
-            bitOffset = bitOffset + 48;
-            naPdu.setEthertype(BitBufferHelper.getInt(BitBufferHelper.getBits(data, bitOffset, 16)));
-
-            bitOffset = Ipv6Constants.IP_V6_HDR_START;
-            naPdu.setVersion(BitBufferHelper.getShort(BitBufferHelper.getBits(data, bitOffset, 4)));
-            bitOffset = bitOffset + 4;
-            naPdu.setFlowLabel(BitBufferHelper.getLong(BitBufferHelper.getBits(data, bitOffset, 28)));
-            bitOffset = bitOffset + 28;
-            naPdu.setIpv6Length(BitBufferHelper.getInt(BitBufferHelper.getBits(data, bitOffset, 16)));
-            bitOffset = bitOffset + 16;
-            naPdu.setNextHeader(BitBufferHelper.getShort(BitBufferHelper.getBits(data, bitOffset, 8)));
-            bitOffset = bitOffset + 8;
-            naPdu.setHopLimit(BitBufferHelper.getShort(BitBufferHelper.getBits(data, bitOffset, 8)));
-            bitOffset = bitOffset + 8;
-            naPdu.setSourceIpv6(Ipv6Address.getDefaultInstance(
-                    InetAddress.getByAddress(BitBufferHelper.getBits(data, bitOffset, 128)).getHostAddress()));
-            bitOffset = bitOffset + 128;
-            naPdu.setDestinationIpv6(Ipv6Address.getDefaultInstance(
-                    InetAddress.getByAddress(BitBufferHelper.getBits(data, bitOffset, 128)).getHostAddress()));
-            bitOffset = bitOffset + 128;
-
-            naPdu.setIcmp6Type(BitBufferHelper.getShort(BitBufferHelper.getBits(data, bitOffset, 8)));
-            bitOffset = bitOffset + 8;
-            naPdu.setIcmp6Code(BitBufferHelper.getShort(BitBufferHelper.getBits(data, bitOffset, 8)));
-            bitOffset = bitOffset + 8;
-            naPdu.setIcmp6Chksum(BitBufferHelper.getInt(BitBufferHelper.getBits(data, bitOffset, 16)));
-            bitOffset = bitOffset + 16;
-            naPdu.setFlags(BitBufferHelper.getLong(BitBufferHelper.getBits(data, bitOffset, 32)));
-            bitOffset = bitOffset + 32;
-            naPdu.setTargetAddress(Ipv6Address.getDefaultInstance(
-                    InetAddress.getByAddress(BitBufferHelper.getBits(data, bitOffset, 128)).getHostAddress()));
-
-            if (naPdu.getIpv6Length() > Ipv6Constants.ICMPV6_NA_LENGTH_WO_OPTIONS) {
-                bitOffset = bitOffset + 128;
-                naPdu.setOptionType(BitBufferHelper.getShort(BitBufferHelper.getBits(data, bitOffset, 8)));
-                bitOffset = bitOffset + 8;
-                naPdu.setTargetAddrLength(BitBufferHelper.getShort(BitBufferHelper.getBits(data, bitOffset, 8)));
-                bitOffset = bitOffset + 8;
-                if (naPdu.getOptionType() == Ipv6Constants.ICMP_V6_OPTION_TARGET_LLA) {
-                    naPdu.setTargetLlAddress(new MacAddress(
-                            Ipv6Util.bytesToHexString(BitBufferHelper.getBits(data, bitOffset, 48))));
-                }
-            }
-            return naPdu.build();
+            NeighborAdvertisePacket naPacket = new NeighborAdvertisePacketBuilder(naPdu)
+                    .addAugmentation(PacketMetadata.class, new PacketMetadataBuilder().setOfTableId((long) tableId)
+                            .setMetadata(metadata).setInterface(interfaceName).build())
+                    .build();
+            fireNaNotification(naPacket);
         }
     }
 
-    private void fireNotification(Notification notification) {
-        ListenableFuture<?> offerNotification = notificationPublishService.offerNotification(notification);
-        if (offerNotification != null && offerNotification.equals(NotificationPublishService.REJECTED)) {
-            LOG.warn("Offered Notification was rejected: {}", notification);
-        }
+    private void fireNaNotification(NeighborAdvertisePacket naPacket) {
+        ipv6PktListener.onNaReceived(naPacket);
     }
 
     @Override
index 8754ee27481af81ec3d0d805317405eb80fd4636..bf04ed2bf0ae72d3a7c21f26f5b174b84084c8e0 100644 (file)
@@ -14,8 +14,8 @@
              interface="org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService" />
   <reference id="jobCoordinator"
              interface="org.opendaylight.infrautils.jobcoordinator.JobCoordinator" />
-  <reference id="notificationPublishService"
-             interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService" />
+  <reference id="iIpv6PacketListener"
+             interface="org.opendaylight.netvirt.ipv6service.api.IIpv6PacketListener" />
 
   <odl:rpc-service id="odlInterfaceRpcService"
                    interface="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService" />
index a7d4593efaa76218415b9459a11d40d3594dfe45..10ded960f3d3568ebc0efac120bddd410fd3e7c1 100644 (file)
@@ -20,10 +20,11 @@ import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
 import org.opendaylight.genius.ipv6util.api.Ipv6Util;
+import org.opendaylight.genius.ipv6util.api.decoders.Ipv6NaDecoder;
 import org.opendaylight.genius.mdsalutil.NwConstants;
 import org.opendaylight.genius.mdsalutil.actions.ActionNxResubmit;
+import org.opendaylight.netvirt.ipv6service.api.IIpv6PacketListener;
 import org.opendaylight.netvirt.ipv6service.utils.Ipv6ServiceConstants;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
@@ -32,8 +33,10 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.NaReceived;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.NaReceivedBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev160620.NeighborAdvertisePacket;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev160620.NeighborAdvertisePacketBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.PacketMetadata;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.PacketMetadataBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
@@ -55,7 +58,7 @@ public class Ipv6PktHandlerTest {
     private PacketProcessingService pktProcessService;
     private Ipv6PktHandler pktHandler;
     private IfMgr ifMgrInstance;
-    private NotificationPublishService notificationPublishService;
+    private IIpv6PacketListener ipv6PktListener;
     private long counter;
     private static final int THREAD_WAIT_TIME = 100;
     private Ipv6TestUtils ipv6TestUtils;
@@ -64,8 +67,8 @@ public class Ipv6PktHandlerTest {
     public void initTest() {
         pktProcessService = Mockito.mock(PacketProcessingService.class);
         ifMgrInstance = Mockito.mock(IfMgr.class);
-        notificationPublishService = Mockito.mock(NotificationPublishService.class);
-        pktHandler = new Ipv6PktHandler(pktProcessService, ifMgrInstance, notificationPublishService);
+        ipv6PktListener = Mockito.mock(IIpv6PacketListener.class);
+        pktHandler = new Ipv6PktHandler(pktProcessService, ifMgrInstance, ipv6PktListener);
         counter = pktHandler.getPacketProcessedCounter();
         ipv6TestUtils = new Ipv6TestUtils();
     }
@@ -518,7 +521,7 @@ public class Ipv6PktHandlerTest {
         BigInteger mdata = new BigInteger(String.valueOf(0x1000000));
         Metadata metadata = new MetadataBuilder().setMetadata(mdata).build();
         MatchBuilder matchbuilder = new MatchBuilder().setMetadata(metadata);
-        pktHandler.onPacketReceived(new PacketReceivedBuilder().setPayload(ipv6TestUtils.buildPacket(
+        byte[] data = ipv6TestUtils.buildPacket(
                 "FA 16 3E F7 69 4E",                               // Destination MAC
                 "FA 16 3E A9 38 94",                               // Source MAC
                 "86 DD",                                           // IPv6
@@ -536,18 +539,19 @@ public class Ipv6PktHandlerTest {
                 "02",                                              // ICMPv6 Option: Target Link Layer Address
                 "01",                                              // Length
                 "FA 16 3E A9 38 94"                                // Link Layer Address
-        )).setIngress(ncRef).setMatch(matchbuilder.build()).setTableId(new TableId((short) 45)).build());
+        );
+        pktHandler.onPacketReceived(new PacketReceivedBuilder().setPayload(data).setIngress(ncRef)
+                .setMatch(matchbuilder.build()).setTableId(new TableId((short) 45)).build());
         //wait on this thread until the async job is completed in the packet handler.
         waitForPacketProcessing();
 
-        NaReceivedBuilder naReceivedBuilder = new NaReceivedBuilder().setSourceMac(new MacAddress("fa:16:3e:a9:38:94"))
-                .setDestinationMac(new MacAddress("fa:16:3e:f7:69:4e"))
-                .setSourceIpv6(Ipv6Address.getDefaultInstance("2001:db8:0:2:0:0:0:1111"))
-                .setDestinationIpv6(Ipv6Address.getDefaultInstance("1001:db8:0:2:f816:3eff:fef7:694e"))
-                .setTargetAddress(Ipv6Address.getDefaultInstance("2001:db8:0:2:0:0:0:1111"))
-                .setTargetLlAddress(new MacAddress("fa:16:3e:a9:38:94")).setOfTableId(45L).setMetadata(mdata)
-                .setInterface("ddec9dba-d831-4ad7-84b9-00d7f65f052f");
-        verify(notificationPublishService).offerNotification(naReceivedBuilder.build());
+        NeighborAdvertisePacket naPdu = new Ipv6NaDecoder(data).decode();
+        NeighborAdvertisePacket naPacket =
+                new NeighborAdvertisePacketBuilder(naPdu)
+                        .addAugmentation(PacketMetadata.class, new PacketMetadataBuilder().setOfTableId((long) 45)
+                                .setMetadata(mdata).setInterface("ddec9dba-d831-4ad7-84b9-00d7f65f052f").build())
+                        .build();
+        verify(ipv6PktListener).onNaReceived(naPacket);
     }
 
     @Test
@@ -579,7 +583,7 @@ public class Ipv6PktHandlerTest {
                 "10 01 0D B8 00 00 00 02 F8 16 3E FF FE F7 69 4E", // Destination IP
                 "88",                                              // ICMPv6 neighbor advertisement
                 "00",                                              // Code
-                "C9 9A",                                           // Checksum (valid)
+                "C9 9A",                                           // Checksum (invalid)
                 "00 00 00 00",                                     // ICMPv6 message body
                 "20 01 0D B8 00 00 00 02 00 00 00 00 00 00 11 11", // Target
                 "02",                                              // ICMPv6 Option: Target Link Layer Address
@@ -588,7 +592,7 @@ public class Ipv6PktHandlerTest {
         )).setIngress(ncRef).setMatch(matchbuilder.build()).setTableId(new TableId((short) 45)).build());
         //wait on this thread until the async job is completed in the packet handler.
         waitForPacketProcessing();
-        verify(notificationPublishService, times(0)).offerNotification(any(NaReceived.class));
+        verify(ipv6PktListener, times(0)).onNaReceived(any(NeighborAdvertisePacket.class));
 
         // incorrect ICMPv6 type
         pktHandler.onPacketReceived(new PacketReceivedBuilder().setPayload(ipv6TestUtils.buildPacket(
@@ -612,7 +616,7 @@ public class Ipv6PktHandlerTest {
         )).setIngress(ncRef).setMatch(matchbuilder.build()).setTableId(new TableId((short) 45)).build());
         //wait on this thread until the async job is completed in the packet handler.
         waitForPacketProcessing();
-        verify(notificationPublishService, times(0)).offerNotification(any(NaReceived.class));
+        verify(ipv6PktListener, times(0)).onNaReceived(any(NeighborAdvertisePacket.class));
     }
 
     private void waitForPacketProcessing() throws InterruptedException {
index 8c0d2815b13fea0c8190e0f62bd369322a965fba..59a0dc9cfe671ed731a5ef5af08f085e5647d203 100644 (file)
@@ -96,6 +96,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <artifactId>ipv6util-api</artifactId>
             <version>${genius.version}</version>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ipv6service-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.serviceutils</groupId>
             <artifactId>upgrade</artifactId>
index e2289d57acf51daee6be5a7c22b91557842560a0..f8de2ad7577e2e241e81c168589d354c37c8fbf3 100644 (file)
@@ -17,8 +17,6 @@ import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.mdsalutil.NWUtil;
 import org.opendaylight.netvirt.neutronvpn.api.enums.IpVersionChoice;
 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
@@ -27,7 +25,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortEventAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.learnt.vpn.vip.to.port.data.LearntVpnVipToPort;
@@ -44,19 +41,12 @@ public abstract class AbstractIpLearnNotificationHandler {
     // temp where Key is VPNInstance+IP and value is timestamp
     private final Cache<Pair<String, String>, BigInteger> migrateIpCache;
 
-    protected final DataBroker dataBroker;
-    protected final IdManagerService idManager;
-    protected final IInterfaceManager interfaceManager;
     protected final VpnConfig config;
     protected final VpnUtil vpnUtil;
     protected final INeutronVpnManager neutronVpnManager;
 
-    public AbstractIpLearnNotificationHandler(DataBroker dataBroker, IdManagerService idManager,
-                                              IInterfaceManager interfaceManager, VpnConfig vpnConfig,
-                                              VpnUtil vpnUtil, INeutronVpnManager neutronVpnManager) {
-        this.dataBroker = dataBroker;
-        this.idManager = idManager;
-        this.interfaceManager = interfaceManager;
+    public AbstractIpLearnNotificationHandler(VpnConfig vpnConfig, VpnUtil vpnUtil,
+            INeutronVpnManager neutronVpnManager) {
         this.config = vpnConfig;
         this.vpnUtil = vpnUtil;
         this.neutronVpnManager = neutronVpnManager;
index 0adbdf9f1be75bb8dc1aed4943b0f7c76dcbd821..9beb9f0d0ba66e79a419df0eaaab4526b760ab81 100644 (file)
@@ -10,8 +10,6 @@ package org.opendaylight.netvirt.vpnmanager.iplearn.ipv4;
 import java.math.BigInteger;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
 import org.opendaylight.netvirt.vpnmanager.VpnUtil;
 import org.opendaylight.netvirt.vpnmanager.iplearn.AbstractIpLearnNotificationHandler;
@@ -21,7 +19,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.Ar
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.ArpResponseReceived;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.MacChanged;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.OdlArputilListener;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.vpn.config.rev161130.VpnConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,10 +29,8 @@ public class ArpNotificationHandler extends AbstractIpLearnNotificationHandler i
     private static final Logger LOG = LoggerFactory.getLogger(ArpNotificationHandler.class);
 
     @Inject
-    public ArpNotificationHandler(DataBroker dataBroker, IdManagerService idManager,
-                                  IInterfaceManager interfaceManager, VpnConfig vpnConfig,
-                                  VpnUtil vpnUtil, INeutronVpnManager neutronVpnManager) {
-        super(dataBroker, idManager, interfaceManager, vpnConfig, vpnUtil, neutronVpnManager);
+    public ArpNotificationHandler(VpnConfig vpnConfig, VpnUtil vpnUtil, INeutronVpnManager neutronVpnManager) {
+        super(vpnConfig, vpnUtil, neutronVpnManager);
     }
 
     @Override
similarity index 64%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv6/Ipv6NaNotificationHandler.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv6/Ipv6NaPacketListener.java
index 61170631f276704161d8cbf21b04657709b596cb..59c228e48f168e684748335be8d8ce23e5906de4 100644 (file)
@@ -11,39 +11,39 @@ package org.opendaylight.netvirt.vpnmanager.iplearn.ipv6;
 import java.math.BigInteger;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
+import org.opendaylight.netvirt.ipv6service.api.IIpv6PacketListener;
 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
 import org.opendaylight.netvirt.vpnmanager.VpnUtil;
 import org.opendaylight.netvirt.vpnmanager.iplearn.AbstractIpLearnNotificationHandler;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.Ipv6NdUtilListener;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.NaReceived;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.packet.rev160620.NeighborAdvertisePacket;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.PacketMetadata;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.vpn.config.rev161130.VpnConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
-public class Ipv6NaNotificationHandler extends AbstractIpLearnNotificationHandler implements Ipv6NdUtilListener {
+public class Ipv6NaPacketListener extends AbstractIpLearnNotificationHandler implements IIpv6PacketListener {
 
-    private static final Logger LOG = LoggerFactory.getLogger(Ipv6NaNotificationHandler.class);
+    private static final Logger LOG = LoggerFactory.getLogger(Ipv6NaPacketListener.class);
 
     @Inject
-    public Ipv6NaNotificationHandler(DataBroker dataBroker, IdManagerService idManager,
-                                     IInterfaceManager interfaceManager, VpnConfig vpnConfig,
-                                     VpnUtil vpnUtil, INeutronVpnManager neutronVpnManager) {
-        super(dataBroker, idManager, interfaceManager, vpnConfig, vpnUtil, neutronVpnManager);
+    public Ipv6NaPacketListener(VpnConfig vpnConfig, VpnUtil vpnUtil, INeutronVpnManager neutronVpnManager) {
+        super(vpnConfig, vpnUtil, neutronVpnManager);
     }
 
     @Override
-    public void onNaReceived(NaReceived naPacket) {
-        String srcInterface = naPacket.getInterface();
+    public void onNaReceived(NeighborAdvertisePacket naPacket) {
+        PacketMetadata pktMetadata = naPacket.augmentation(PacketMetadata.class);
+        if (pktMetadata == null) {
+            return;
+        }
+        String srcInterface = pktMetadata.getInterface();
         IpAddress srcIP = new IpAddress(naPacket.getSourceIpv6());
         MacAddress srcMac = naPacket.getSourceMac();
         IpAddress targetIP = new IpAddress(naPacket.getTargetAddress());
-        BigInteger metadata = naPacket.getMetadata();
+        BigInteger metadata = pktMetadata.getMetadata();
         LOG.debug("NA notification received from interface {} and IP {} having MAC {}, targetIP={}", srcInterface,
                 srcIP.stringValue(), srcMac.getValue(), targetIP.stringValue());
 
index d6cd28002bea0f716049b5cf1e61c4ad84be8063..bda4ffa0e0d3ed8646eff475e8df9b5ffd14c61d 100644 (file)
@@ -74,9 +74,8 @@
            interface="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.OdlArputilListener" />
   <odl:notification-listener ref="arpNotificationHandler" />
 
-  <service ref="ipv6NaNotificationHandler" odl:type="default"
-           interface="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.ipv6.nd.util.rev170210.Ipv6NdUtilListener" />
-  <odl:notification-listener ref="ipv6NaNotificationHandler" />
+  <service ref="ipv6NaPacketListener"
+           interface="org.opendaylight.netvirt.ipv6service.api.IIpv6PacketListener" />
 
   <service ref="vpnManagerImpl"
            interface="org.opendaylight.netvirt.vpnmanager.api.IVpnManager" />