Avoid Non-VPN Interface Adj IP Learning 98/76298/1
authorKarthikeyan Krishnan <[email protected]>
Thu, 20 Sep 2018 05:08:11 +0000 (10:38 +0530)
committerKarthikeyan Krishnan <[email protected]>
Thu, 20 Sep 2018 08:35:58 +0000 (08:35 +0000)
This review is addresing the review comments
from the existing merged review[0]

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

Issue: NETVIRT-1171

Change-Id: I60bbcefd25b863305b28d81f0843ce29c655399f
Signed-off-by: Karthikeyan Krishnan <[email protected]>
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

index ab1b8d6bfd3f655bb85294e20070c2586f7dbd4b..a3de3ed233535d274807bc898d06297d45335ec2 100644 (file)
@@ -26,13 +26,11 @@ 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.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 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;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPort;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.vpn.config.rev161130.VpnConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -69,7 +67,7 @@ public abstract class AbstractIpLearnNotificationHandler {
             IpAddress targetIP, BigInteger metadata) {
         List<Adjacency> adjacencies = vpnUtil.getAdjacenciesForVpnInterfaceFromConfig(srcInterface);
         IpVersionChoice srcIpVersion = vpnUtil.getIpVersionFromString(srcIP.stringValue());
-        Uuid srcIpSubnetId = null;
+        boolean isSrcIpVersionPartOfVpn = false;
         if (adjacencies != null) {
             for (Adjacency adj : adjacencies) {
                 IpPrefix ipPrefix = IpPrefixBuilder.getDefaultInstance(adj.getIpAddress());
@@ -79,18 +77,22 @@ public abstract class AbstractIpLearnNotificationHandler {
                 }
                 IpVersionChoice currentAdjIpVersion = vpnUtil.getIpVersionFromString(adj.getIpAddress());
                 if (srcIpVersion.isIpVersionChosen(currentAdjIpVersion)) {
-                    srcIpSubnetId = adj.getSubnetId();
+                    isSrcIpVersionPartOfVpn = true;
                 }
             }
+            //If srcIP version is not part of the srcInterface VPN Adjacency, ignore IpLearning process
+            if (!isSrcIpVersionPartOfVpn) {
+                return;
+            }
         }
 
         LOG.trace("ARP/NA Notification Response Received from interface {} and IP {} having MAC {}, learning MAC",
                 srcInterface, srcIP.stringValue(), srcMac.getValue());
-        processIpLearning(srcInterface, srcIP, srcMac, metadata, targetIP, srcIpSubnetId);
+        processIpLearning(srcInterface, srcIP, srcMac, metadata, targetIP);
     }
 
     protected void processIpLearning(String srcInterface, IpAddress srcIP, MacAddress srcMac, BigInteger metadata,
-            IpAddress dstIP, Uuid srcIpSubnetId) {
+                                     IpAddress dstIP) {
         if (metadata != null && !Objects.equals(metadata, BigInteger.ZERO)) {
             Optional<List<String>> vpnList = vpnUtil.getVpnHandlingIpv4AssociatedWithInterface(srcInterface);
             if (vpnList.isPresent()) {
@@ -107,16 +109,6 @@ public abstract class AbstractIpLearnNotificationHandler {
                          */
                         continue;
                     }
-                    if (srcIpSubnetId != null) {
-                        Subnetmap snMap = vpnUtil.getSubnetmapFromItsUuid(srcIpSubnetId);
-                        if (snMap != null && snMap.getVpnId() == null) {
-                            /* If the subnet is not part of vpn then it should be ignored
-                             * from being discovered. This use case will come for dual stack
-                             * network. i.e V6 or V4 subnet only part of VPN.
-                             */
-                            continue;
-                        }
-                    }
                     LearntVpnVipToPort learntVpnVipToPort = vpnUtil.getLearntVpnVipToPort(vpnName, srcIpToQuery);
                     if (learntVpnVipToPort != null) {
                         String oldPortName = learntVpnVipToPort.getPortName();
index 610b116926b047c4505b039aad0e22dad94da99f..c36fad20be59da85a893409fc3bed15d24f6f8a7 100644 (file)
@@ -61,7 +61,7 @@ public class ArpNotificationHandler extends AbstractIpLearnNotificationHandler i
                         + "target destination {}, learning MAC",
                 srcInterface, srcIP.stringValue(), srcMac.getValue(), targetIP.stringValue());
 
-        processIpLearning(srcInterface, srcIP, srcMac, metadata, targetIP, null);
+        processIpLearning(srcInterface, srcIP, srcMac, metadata, targetIP);
     }
 
     @Override