Refactor VpnManager module. 05/73005/13
authorSomashekar Byrappa <somashekar.b@altencalsoftlabs.com>
Thu, 14 Jun 2018 14:17:26 +0000 (19:47 +0530)
committerSam Hague <shague@redhat.com>
Mon, 23 Jul 2018 01:06:23 +0000 (01:06 +0000)
+ Refactoring VpnManager to support subnet routing for hidden IPv6
  addresses.
+ Moved all IP learning classes to package org.opendaylight.netvirt
  .vpnmanager.iplearn.
+ Renamed few classes to Ip*** instead of Arp*** to keep it common for
  both IPv4 and IPv6.
+ Refactored code in iplearn package to handle both IPv4 and IPv6.
+ Kept placeholders (TODO's) for supporting IPv6 subnet routing for
  hidden IPs.

JIRA: NETVIRT-1213

Change-Id: I7f2c7968d92d61b4d3e1d8a1d858df34368344e8
Signed-off-by: Somashekar Byrappa <somashekar.b@altencalsoftlabs.com>
16 files changed:
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpReplyOrRequest.java [deleted file]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnConstants.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/AbstractIpLearnNotificationHandler.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/AlivenessMonitorUtils.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/AlivenessMonitorUtils.java with 86% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorEventListener.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitorEventListener.java with 79% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorStartTask.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitorStartTask.java with 67% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorStopTask.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitorStopTask.java with 81% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitoringHandler.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitoringHandler.java with 73% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/LearntVpnVipToPortEventProcessor.java with 87% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv4/ArpNotificationHandler.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ArpNotificationHandler.java with 96% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv4/ArpUtils.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpUtils.java with 99% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv6/Ipv6NaNotificationHandler.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/Ipv6NaNotificationHandler.java with 94% similarity]
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/model/MacEntry.java [moved from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/MacEntry.java with 97% similarity]
vpnmanager/impl/src/main/resources/org/opendaylight/blueprint/vpnmanager.xml

diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpReplyOrRequest.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpReplyOrRequest.java
deleted file mode 100644 (file)
index ccfab53..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2016 Ericsson India Global Services 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.vpnmanager;
-
-import java.util.Objects;
-import org.opendaylight.genius.mdsalutil.NwConstants;
-
-public enum ArpReplyOrRequest {
-    REQUEST("ARP-REQUEST"), REPLY("ARP-REPLY");
-
-    private String name;
-
-    ArpReplyOrRequest(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public int getArpOperation() {
-        int arpOperation =
-            (Objects.equals(name, ArpReplyOrRequest.REQUEST.getName())
-                    ? NwConstants.ARP_REQUEST : NwConstants.ARP_REPLY);
-        return arpOperation;
-    }
-
-    public int calculateConsistentHashCode() {
-        if (this.name != null) {
-            return this.name.hashCode();
-        } else {
-            return 0;
-        }
-    }
-}
index 1346dd2f7108f4a8bd78827f7fa36a375969831b..a0317a0b8fa8b89da0c4a30e4d13304530e06d97 100644 (file)
@@ -29,6 +29,7 @@ import org.opendaylight.genius.mdsalutil.packet.IPv4;
 import org.opendaylight.infrautils.utils.concurrent.JdkFutures;
 import org.opendaylight.netvirt.vpnmanager.api.ICentralizedSwitchProvider;
 import org.opendaylight.netvirt.vpnmanager.api.VpnHelper;
+import org.opendaylight.netvirt.vpnmanager.iplearn.ipv4.ArpUtils;
 import org.opendaylight.netvirt.vpnmanager.utilities.VpnManagerCounters;
 import org.opendaylight.openflowplugin.libraries.liblldp.BitBufferHelper;
 import org.opendaylight.openflowplugin.libraries.liblldp.BufferException;
index c102c0c36e92754b708d4c48f9a09bb9195018d3..7fa769291183d200d35b7477784fd64419a0b128 100644 (file)
@@ -30,7 +30,9 @@ public interface VpnConstants {
     long PER_VPN_INSTANCE_OPDATA_MAX_WAIT_TIME_IN_MILLISECONDS = 180000;
     int ELAN_GID_MIN = 200000;
     int INVALID_LABEL = 0;
-    String ARP_MONITORING_ENTITY = "arpmonitoring";
+
+    String IP_MONITORING_ENTITY = "ipmonitoring";
+    String IP_MONITOR_JOB_PREFIX_KEY = "ip-monitor";
 
     // An IdPool for Pseudo LPort tags, that is, lportTags that are no related to an interface.
     // These lportTags must be higher than 170000 to avoid collision with interface LportTags and
index debf06b3bff423eca02119cc79094a6e751e4425..274c2cf1255a241edbe58bb0101e55df63b4d35f 100644 (file)
@@ -81,6 +81,7 @@ import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
 import org.opendaylight.netvirt.vpnmanager.api.InterfaceUtils;
 import org.opendaylight.netvirt.vpnmanager.api.VpnExtraRouteHelper;
 import org.opendaylight.netvirt.vpnmanager.api.VpnHelper;
+import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnAfConfig;
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances;
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces;
@@ -245,7 +246,7 @@ public final class VpnUtil {
 
     private static final Logger LOG = LoggerFactory.getLogger(VpnUtil.class);
 
-    static final int SINGLE_TRANSACTION_BROKER_NO_RETRY = 1;
+    public static final int SINGLE_TRANSACTION_BROKER_NO_RETRY = 1;
 
     private final DataBroker dataBroker;
     private final IdManagerService idManager;
@@ -904,8 +905,8 @@ public final class VpnUtil {
         }
     }
 
-    void createLearntVpnVipToPort(String vpnName, String fixedIp, String
-            portName, String macAddress, TypedWriteTransaction<Operational> writeOperTxn) {
+    public void createLearntVpnVipToPort(String vpnName, String fixedIp, String portName, String macAddress,
+            TypedWriteTransaction<Operational> writeOperTxn) {
         synchronized ((vpnName + fixedIp).intern()) {
             InstanceIdentifier<LearntVpnVipToPort> id = buildLearntVpnVipToPortIdentifier(vpnName, fixedIp);
             LearntVpnVipToPortBuilder builder =
@@ -982,7 +983,7 @@ public final class VpnUtil {
         return id;
     }
 
-    void removeLearntVpnVipToPortEvent(String eventId, TypedWriteTransaction<Operational> writeOperTxn) {
+    public void removeLearntVpnVipToPortEvent(String eventId, TypedWriteTransaction<Operational> writeOperTxn) {
         InstanceIdentifier<LearntVpnVipToPortEvent> id = buildLearntVpnVipToPortEventIdentifier(eventId);
         if (writeOperTxn != null) {
             writeOperTxn.delete(id);
@@ -993,7 +994,7 @@ public final class VpnUtil {
 
     }
 
-    void removeMipAdjAndLearntIp(String vpnName, String vpnInterface, String prefix) {
+    public void removeMipAdjAndLearntIp(String vpnName, String vpnInterface, String prefix) {
         synchronized ((vpnName + prefix).intern()) {
             InstanceIdentifier<LearntVpnVipToPort> id = buildLearntVpnVipToPortIdentifier(vpnName, prefix);
             MDSALUtil.syncDelete(dataBroker, LogicalDatastoreType.OPERATIONAL, id);
@@ -1115,7 +1116,7 @@ public final class VpnUtil {
         return extNetwork != null ? extNetwork.getVpnid() : null;
     }
 
-    List<Uuid> getExternalNetworkRouterIds(Uuid networkId) {
+    public List<Uuid> getExternalNetworkRouterIds(Uuid networkId) {
         Networks extNetwork = getExternalNetwork(networkId);
         return extNetwork != null ? extNetwork.getRouterIds() : Collections.emptyList();
     }
@@ -1200,7 +1201,7 @@ public final class VpnUtil {
         }
     }
 
-    Optional<IpAddress> getIpv4GatewayAddressFromInterface(String srcInterface) {
+    public Optional<IpAddress> getIpv4GatewayAddressFromInterface(String srcInterface) {
         Optional<IpAddress> gatewayIp = Optional.absent();
         if (neutronVpnService != null) {
             //TODO(Gobinath): Need to fix this as assuming port will belong to only one Subnet would be incorrect"
@@ -1222,7 +1223,7 @@ public final class VpnUtil {
         return gatewayIp;
     }
 
-    Optional<String> getGWMacAddressFromInterface(MacEntry macEntry, IpAddress gatewayIp) {
+    public Optional<String> getGWMacAddressFromInterface(MacEntry macEntry, IpAddress gatewayIp) {
         Optional<String> gatewayMac = Optional.absent();
         long vpnId = getVpnId(macEntry.getVpnName());
         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.id.to.vpn
@@ -1517,7 +1518,7 @@ public final class VpnUtil {
         return optionalSubnets.isPresent() ? optionalSubnets.get() : null;
     }
 
-    Uuid getSubnetFromExternalRouterByIp(Uuid routerId, String ip) {
+    public Uuid getSubnetFromExternalRouterByIp(Uuid routerId, String ip) {
         Routers externalRouter = getExternalRouter(routerId.getValue());
         if (externalRouter != null && externalRouter.getExternalIps() != null) {
             for (ExternalIps externalIp : externalRouter.getExternalIps()) {
@@ -2230,4 +2231,8 @@ public final class VpnUtil {
             return false;
         }
     }
+
+    public static String buildIpMonitorJobKey(String ip, String vpnName) {
+        return VpnConstants.IP_MONITOR_JOB_PREFIX_KEY + "-" + vpnName + "-" + ip;
+    }
 }
index 118f5310938b3f2976e8360e2aab709b56fd40dc..712ae0f582a235c4bc32a1608ad722223ef10c91 100644 (file)
@@ -33,7 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.vpn.config.rev16113
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AbstractIpLearnNotificationHandler {
+public abstract class AbstractIpLearnNotificationHandler {
 
     private static final Logger LOG = LoggerFactory.getLogger(AbstractIpLearnNotificationHandler.class);
 
similarity index 86%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/AlivenessMonitorUtils.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/AlivenessMonitorUtils.java
index d2d76c86bb7eee705c8603932b61712bb7cb1c52..71223acd4a2303e8eacbc05d9a06643cffca1157 100644 (file)
@@ -5,7 +5,7 @@
  * 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.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn;
 
 import com.google.common.base.Optional;
 import java.util.Map;
@@ -21,8 +21,9 @@ import org.opendaylight.genius.arputil.api.ArpConstants;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.infrautils.utils.concurrent.JdkFutures;
 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
+import org.opendaylight.netvirt.vpnmanager.VpnUtil;
+import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
 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.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.AlivenessMonitorService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.EtherTypes;
@@ -45,7 +46,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.profile.create.input.Profile;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.profile.create.input.ProfileBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.monitor.start.input.ConfigBuilder;
-
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -72,10 +72,10 @@ public final class AlivenessMonitorUtils {
         this.interfaceManager = interfaceManager;
     }
 
-    void startArpMonitoring(MacEntry macEntry, Long arpMonitorProfileId) {
+    void startIpMonitoring(MacEntry macEntry, Long ipMonitorProfileId) {
         if (interfaceManager.isExternalInterface(macEntry.getInterfaceName())) {
-            LOG.debug("ARP monitoring is currently not supported through external interfaces,"
-                    + "skipping ARP monitoring from interface {} for IP {} (last known MAC {})",
+            LOG.debug("IP monitoring is currently not supported through external interfaces,"
+                    + "skipping IP monitoring from interface {} for IP {} (last known MAC {})",
                 macEntry.getInterfaceName(), macEntry.getIpAddress().getHostAddress(), macEntry.getMacAddress());
             return;
         }
@@ -91,32 +91,32 @@ public final class AlivenessMonitorUtils {
             LOG.error("Error while retrieving GatewayMac for interface{}", macEntry.getInterfaceName());
             return;
         }
-        final PhysAddress gatewayMac = new PhysAddress(gatewayMacOptional.get());
-        if (arpMonitorProfileId == null || arpMonitorProfileId.equals(0L)) {
-            Optional<Long> profileIdOptional = allocateProfile(ArpConstants.FAILURE_THRESHOLD,
-                    ArpConstants.ARP_CACHE_TIMEOUT_MILLIS, ArpConstants.MONITORING_WINDOW, EtherTypes.Arp);
+
+        final IpAddress targetIp = new IpAddress(macEntry.getIpAddress().getHostAddress().toCharArray());
+        if (ipMonitorProfileId == null || ipMonitorProfileId.equals(0L)) {
+            Optional<Long> profileIdOptional = allocateIpMonitorProfile(targetIp);
             if (!profileIdOptional.isPresent()) {
-                LOG.error("Error while allocating Profile Id for alivenessMonitorService");
+                LOG.error("startIpMonitoring: Error while allocating Profile Id for IP={}", targetIp);
                 return;
             }
-            arpMonitorProfileId = profileIdOptional.get();
+            ipMonitorProfileId = profileIdOptional.get();
         }
 
-        IpAddress targetIp = new IpAddress(new Ipv4Address(macEntry.getIpAddress().getHostAddress()));
-        MonitorStartInput arpMonitorInput = new MonitorStartInputBuilder().setConfig(new ConfigBuilder()
+        final PhysAddress gatewayMac = new PhysAddress(gatewayMacOptional.get());
+        MonitorStartInput ipMonitorInput = new MonitorStartInputBuilder().setConfig(new ConfigBuilder()
             .setSource(new SourceBuilder().setEndpointType(getSourceEndPointType(macEntry.getInterfaceName(),
                 gatewayIp, gatewayMac)).build())
             .setDestination(new DestinationBuilder().setEndpointType(getEndPointIpAddress(targetIp)).build())
             .setMode(MonitoringMode.OneOne)
-            .setProfileId(arpMonitorProfileId).build()).build();
+            .setProfileId(ipMonitorProfileId).build()).build();
         try {
-            Future<RpcResult<MonitorStartOutput>> result = alivenessManager.monitorStart(arpMonitorInput);
+            Future<RpcResult<MonitorStartOutput>> result = alivenessManager.monitorStart(ipMonitorInput);
             RpcResult<MonitorStartOutput> rpcResult = result.get();
             long monitorId;
             if (rpcResult.isSuccessful()) {
                 monitorId = rpcResult.getResult().getMonitorId();
                 createOrUpdateInterfaceMonitorIdMap(monitorId, macEntry);
-                LOG.trace("Started ARP monitoring with id {}", monitorId);
+                LOG.trace("Started IP monitoring with id {}", monitorId);
             } else {
                 LOG.warn("RPC Call to start monitoring returned with Errors {}", rpcResult.getErrors());
             }
@@ -125,7 +125,7 @@ public final class AlivenessMonitorUtils {
         }
     }
 
-    void stopArpMonitoring(Long monitorId) {
+    void stopIpMonitoring(Long monitorId) {
         MonitorStopInput input = new MonitorStopInputBuilder().setMonitorId(monitorId).build();
 
         JdkFutures.addErrorLogging(alivenessManager.monitorStop(input), LOG, "Stop monitoring");
@@ -146,8 +146,20 @@ public final class AlivenessMonitorUtils {
             .build();
     }
 
+    private Optional<Long> allocateIpMonitorProfile(IpAddress targetIp) {
+        Optional<Long> profileIdOptional = Optional.absent();
+        if (targetIp.getIpv4Address() != null) {
+            profileIdOptional = allocateProfile(ArpConstants.FAILURE_THRESHOLD,
+                    ArpConstants.ARP_CACHE_TIMEOUT_MILLIS, ArpConstants.MONITORING_WINDOW, EtherTypes.Arp);
+        } else if (targetIp.getIpv6Address() != null) {
+            // TODO: handle IPv6 case
+            LOG.warn("allocateIpMonitorProfile: IPv6 address monitoring is not yet supported. targetIp={}", targetIp);
+        }
+        return profileIdOptional;
+    }
+
     public Optional<Long> allocateProfile(long failureThreshold, long monitoringInterval, long monitoringWindow,
-                                          EtherTypes etherTypes) {
+            EtherTypes etherTypes) {
         MonitorProfileCreateInput input = new MonitorProfileCreateInputBuilder()
             .setProfile(new ProfileBuilder().setFailureThreshold(failureThreshold)
                 .setMonitorInterval(monitoringInterval).setMonitorWindow(monitoringWindow)
similarity index 79%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitorEventListener.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorEventListener.java
index a8752a085c9b6931b63f2b70430dea55c0cda2a4..5fcaf391862111699ecd8aa3b28cad77e04c4b59 100644 (file)
@@ -6,12 +6,14 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.netvirt.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
+import org.opendaylight.netvirt.vpnmanager.VpnUtil;
+import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.AlivenessMonitorListener;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.LivenessState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorEvent;
@@ -24,15 +26,15 @@ import org.slf4j.LoggerFactory;
  * This is used to handle interfaces for base of-ports.
  */
 @Singleton
-public class ArpMonitorEventListener implements AlivenessMonitorListener {
-    private static final Logger LOG = LoggerFactory.getLogger(ArpMonitorEventListener.class);
+public class IpMonitorEventListener implements AlivenessMonitorListener {
+    private static final Logger LOG = LoggerFactory.getLogger(IpMonitorEventListener.class);
     private final DataBroker dataBroker;
     private final JobCoordinator jobCoordinator;
     private final AlivenessMonitorUtils alivenessMonitorUtils;
     private final VpnUtil vpnUtil;
 
     @Inject
-    public ArpMonitorEventListener(DataBroker dataBroker, JobCoordinator jobCoordinator,
+    public IpMonitorEventListener(DataBroker dataBroker, JobCoordinator jobCoordinator,
                                    AlivenessMonitorUtils alivenessMonitorUtils, VpnUtil vpnUtil) {
         this.dataBroker = dataBroker;
         this.jobCoordinator = jobCoordinator;
@@ -54,8 +56,9 @@ public class ArpMonitorEventListener implements AlivenessMonitorListener {
             String learntIp = macEntry.getIpAddress().getHostAddress();
             LearntVpnVipToPort vpnVipToPort = vpnUtil.getLearntVpnVipToPort(vpnName, learntIp);
             if (vpnVipToPort != null && macEntry.getCreatedTime().equals(vpnVipToPort.getCreationTime())) {
-                jobCoordinator.enqueueJob(ArpMonitoringHandler.buildJobKey(macEntry.getIpAddress().getHostAddress(),
-                        macEntry.getVpnName()), new ArpMonitorStopTask(macEntry, Boolean.TRUE, vpnUtil,
+                String jobKey = VpnUtil.buildIpMonitorJobKey(macEntry.getIpAddress().getHostAddress(),
+                        macEntry.getVpnName());
+                jobCoordinator.enqueueJob(jobKey, new IpMonitorStopTask(macEntry, Boolean.TRUE, vpnUtil,
                         alivenessMonitorUtils));
             }
 
similarity index 67%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitorStartTask.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorStartTask.java
index bb36359772aca115473730395fa9dee37e990f5f..b47cfd07391efe001e267ecc876e5607d1e097a1 100644 (file)
@@ -5,19 +5,19 @@
  * 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.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.List;
 import java.util.concurrent.Callable;
+import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
 
-public class ArpMonitorStartTask implements Callable<List<ListenableFuture<Void>>> {
+public class IpMonitorStartTask implements Callable<List<ListenableFuture<Void>>> {
     private final MacEntry macEntry;
     private final Long arpMonitorProfileId;
     private final AlivenessMonitorUtils alivenessMonitorUtils;
 
-
-    public ArpMonitorStartTask(MacEntry macEntry, Long profileId, AlivenessMonitorUtils alivenessMonitorUtils) {
+    public IpMonitorStartTask(MacEntry macEntry, Long profileId, AlivenessMonitorUtils alivenessMonitorUtils) {
         this.macEntry = macEntry;
         this.arpMonitorProfileId = profileId;
         this.alivenessMonitorUtils = alivenessMonitorUtils;
@@ -25,7 +25,7 @@ public class ArpMonitorStartTask implements Callable<List<ListenableFuture<Void>
 
     @Override
     public List<ListenableFuture<Void>> call() {
-        alivenessMonitorUtils.startArpMonitoring(macEntry, arpMonitorProfileId);
+        alivenessMonitorUtils.startIpMonitoring(macEntry, arpMonitorProfileId);
         return null;
     }
 }
similarity index 81%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitorStopTask.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorStopTask.java
index 8192c22cd2be06482a8a1cb6a70cd2f92738abe6..05081b79136db148957f76d13f7b8c4fcb8003f1 100644 (file)
@@ -5,25 +5,26 @@
  * 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.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
-
+import org.opendaylight.netvirt.vpnmanager.VpnUtil;
+import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.learnt.vpn.vip.to.port.data.LearntVpnVipToPort;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ArpMonitorStopTask implements Callable<List<ListenableFuture<Void>>> {
+public class IpMonitorStopTask implements Callable<List<ListenableFuture<Void>>> {
+    private static final Logger LOG = LoggerFactory.getLogger(IpMonitorStopTask.class);
     private MacEntry macEntry;
     private final AlivenessMonitorUtils alivenessMonitorUtils;
-    private static final Logger LOG = LoggerFactory.getLogger(ArpMonitorStopTask.class);
     private boolean isRemoveMipAdjAndLearntIp;
     private final VpnUtil vpnUtil;
 
-    public ArpMonitorStopTask(MacEntry macEntry, boolean removeMipAdjAndLearntIp, VpnUtil vpnUtil,
+    public IpMonitorStopTask(MacEntry macEntry, boolean removeMipAdjAndLearntIp, VpnUtil vpnUtil,
                               AlivenessMonitorUtils alivenessMonitorUtils) {
         this.macEntry = macEntry;
         this.alivenessMonitorUtils = alivenessMonitorUtils;
@@ -36,7 +37,7 @@ public class ArpMonitorStopTask implements Callable<List<ListenableFuture<Void>>
         final List<ListenableFuture<Void>> futures = new ArrayList<>();
         java.util.Optional<Long> monitorIdOptional = AlivenessMonitorUtils.getMonitorIdFromInterface(macEntry);
         monitorIdOptional.ifPresent(monitorId -> {
-            alivenessMonitorUtils.stopArpMonitoring(monitorId);
+            alivenessMonitorUtils.stopIpMonitoring(monitorId);
         });
 
         if (this.isRemoveMipAdjAndLearntIp) {
similarity index 73%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpMonitoringHandler.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitoringHandler.java
index 5c358a03b18aff69a0ca89191ca5881c2e064e41..ec316ef837489b6bf60eb3fefd364609c99547e4 100644 (file)
@@ -5,7 +5,7 @@
  * 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.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn;
 
 import com.google.common.base.Optional;
 import java.net.InetAddress;
@@ -20,7 +20,6 @@ import org.opendaylight.genius.arputil.api.ArpConstants;
 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataTreeChangeListenerBase;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.mdsalutil.NWUtil;
-import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils;
 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
@@ -28,10 +27,12 @@ import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistrati
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
+import org.opendaylight.netvirt.vpnmanager.VpnConstants;
+import org.opendaylight.netvirt.vpnmanager.VpnUtil;
+import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
 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.alivenessmonitor.rev160411.AlivenessMonitorService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.EtherTypes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.learnt.vpn.vip.to.port.data.LearntVpnVipToPort;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -39,12 +40,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
-public class ArpMonitoringHandler
-        extends AsyncClusteredDataTreeChangeListenerBase<LearntVpnVipToPort, ArpMonitoringHandler> {
-    private static final Logger LOG = LoggerFactory.getLogger(ArpMonitoringHandler.class);
+public class IpMonitoringHandler
+        extends AsyncClusteredDataTreeChangeListenerBase<LearntVpnVipToPort, IpMonitoringHandler> {
+    private static final Logger LOG = LoggerFactory.getLogger(IpMonitoringHandler.class);
     private final DataBroker dataBroker;
-    private final OdlInterfaceRpcService interfaceRpc;
-    private final IMdsalApiManager mdsalManager;
     private final AlivenessMonitorService alivenessManager;
     private final AlivenessMonitorUtils alivenessMonitorUtils;
     private final INeutronVpnManager neutronVpnService;
@@ -53,19 +52,16 @@ public class ArpMonitoringHandler
     private final JobCoordinator jobCoordinator;
     private final VpnUtil vpnUtil;
 
-    private Long arpMonitorProfileId = 0L;
+    private Optional<Long> arpMonitorProfileId = Optional.absent();
     private EntityOwnershipCandidateRegistration candidateRegistration;
 
     @Inject
-    public ArpMonitoringHandler(final DataBroker dataBroker, final OdlInterfaceRpcService interfaceRpc,
-            IMdsalApiManager mdsalManager, AlivenessMonitorService alivenessManager,
+    public IpMonitoringHandler(final DataBroker dataBroker, AlivenessMonitorService alivenessManager,
             INeutronVpnManager neutronVpnService, IInterfaceManager interfaceManager,
             EntityOwnershipService entityOwnershipService, JobCoordinator jobCoordinator,
-                                AlivenessMonitorUtils alivenessMonitorUtils, VpnUtil vpnUtil) {
-        super(LearntVpnVipToPort.class, ArpMonitoringHandler.class);
+            AlivenessMonitorUtils alivenessMonitorUtils, VpnUtil vpnUtil) {
+        super(LearntVpnVipToPort.class, IpMonitoringHandler.class);
         this.dataBroker = dataBroker;
-        this.interfaceRpc = interfaceRpc;
-        this.mdsalManager = mdsalManager;
         this.alivenessManager = alivenessManager;
         this.neutronVpnService = neutronVpnService;
         this.interfaceManager = interfaceManager;
@@ -80,7 +76,7 @@ public class ArpMonitoringHandler
         Optional<Long> profileIdOptional = alivenessMonitorUtils.allocateProfile(ArpConstants.FAILURE_THRESHOLD,
                 ArpConstants.ARP_CACHE_TIMEOUT_MILLIS, ArpConstants.MONITORING_WINDOW, EtherTypes.Arp);
         if (profileIdOptional.isPresent()) {
-            arpMonitorProfileId = profileIdOptional.get();
+            arpMonitorProfileId = profileIdOptional;
         } else {
             LOG.error("Error while allocating Profile Id {}", profileIdOptional);
         }
@@ -88,9 +84,9 @@ public class ArpMonitoringHandler
 
         try {
             candidateRegistration = entityOwnershipUtils.getEntityOwnershipService().registerCandidate(
-                    new Entity(VpnConstants.ARP_MONITORING_ENTITY, VpnConstants.ARP_MONITORING_ENTITY));
+                    new Entity(VpnConstants.IP_MONITORING_ENTITY, VpnConstants.IP_MONITORING_ENTITY));
         } catch (CandidateAlreadyRegisteredException e) {
-            LOG.error("failed to register the entity {}", VpnConstants.ARP_MONITORING_ENTITY);
+            LOG.error("failed to register the entity {}", VpnConstants.IP_MONITORING_ENTITY);
         }
     }
 
@@ -110,7 +106,7 @@ public class ArpMonitoringHandler
     }
 
     @Override
-    protected ArpMonitoringHandler getDataTreeChangeListener() {
+    protected IpMonitoringHandler getDataTreeChangeListener() {
         return this;
     }
 
@@ -119,7 +115,7 @@ public class ArpMonitoringHandler
     @Override
     protected void update(InstanceIdentifier<LearntVpnVipToPort> id, LearntVpnVipToPort value,
             LearntVpnVipToPort dataObjectModificationAfter) {
-        runOnlyInOwnerNode("ArpMonitoringHandler: update event", () -> {
+        runOnlyInOwnerNode("IpMonitoringHandler: update event", () -> {
             try {
                 if (value.getMacAddress() == null || dataObjectModificationAfter.getMacAddress() == null) {
                     LOG.warn("The mac address received is null for LearntVpnVipIpToPort {}, ignoring the DTCN",
@@ -137,7 +133,7 @@ public class ArpMonitoringHandler
 
     @Override
     protected void add(InstanceIdentifier<LearntVpnVipToPort> identifier, LearntVpnVipToPort value) {
-        runOnlyInOwnerNode("ArpMonitoringHandler: add event", () -> {
+        runOnlyInOwnerNode("IpMonitoringHandler: add event", () -> {
             try {
                 InetAddress srcInetAddr = InetAddress.getByName(value.getPortFixedip());
                 if (value.getMacAddress() == null) {
@@ -148,12 +144,11 @@ public class ArpMonitoringHandler
                 String vpnName =  value.getVpnName();
                 MacEntry macEntry = new MacEntry(vpnName, srcMacAddress, srcInetAddr, value.getPortName(),
                         value.getCreationTime());
-                if (NWUtil.isIpv4Address(value.getPortFixedip())) {
-                    jobCoordinator.enqueueJob(buildJobKey(srcInetAddr.toString(), vpnName),
-                            new ArpMonitorStartTask(macEntry, arpMonitorProfileId, alivenessMonitorUtils));
-                } else {
-                    // TODO: Handle for IPv6 case
-                    LOG.warn("IPv6 address monitoring is not yet supported - add(). LearntVpnVipToPort={}", value);
+
+                Optional<Long> monitorProfileId = getMonitorProfileId(value.getPortFixedip());
+                if (monitorProfileId.isPresent()) {
+                    jobCoordinator.enqueueJob(VpnUtil.buildIpMonitorJobKey(srcInetAddr.toString(), vpnName),
+                            new IpMonitorStartTask(macEntry, monitorProfileId.get(), alivenessMonitorUtils));
                 }
             } catch (UnknownHostException e) {
                 LOG.error("Error in deserializing packet {} with exception", value, e);
@@ -163,7 +158,7 @@ public class ArpMonitoringHandler
 
     @Override
     protected void remove(InstanceIdentifier<LearntVpnVipToPort> key, LearntVpnVipToPort value) {
-        runOnlyInOwnerNode("ArpMonitoringHandler: remove event", () -> {
+        runOnlyInOwnerNode("IpMonitoringHandler: remove event", () -> {
             try {
                 InetAddress srcInetAddr = InetAddress.getByName(value.getPortFixedip());
                 if (value.getMacAddress() == null) {
@@ -175,13 +170,9 @@ public class ArpMonitoringHandler
                 String interfaceName =  value.getPortName();
                 MacEntry macEntry = new MacEntry(vpnName, srcMacAddress, srcInetAddr, interfaceName,
                         value.getCreationTime());
-                if (NWUtil.isIpv4Address(value.getPortFixedip())) {
-                    jobCoordinator.enqueueJob(buildJobKey(srcInetAddr.toString(), vpnName),
-                            new ArpMonitorStopTask(macEntry, Boolean.FALSE, vpnUtil, alivenessMonitorUtils));
-                } else {
-                    // TODO: Handle for IPv6 case
-                    LOG.warn("IPv6 address monitoring is not yet supported - remove(). LearntVpnVipToPort={}", value);
-                }
+
+                jobCoordinator.enqueueJob(VpnUtil.buildIpMonitorJobKey(srcInetAddr.toString(), vpnName),
+                        new IpMonitorStopTask(macEntry, Boolean.FALSE, vpnUtil, alivenessMonitorUtils));
             } catch (UnknownHostException e) {
                 LOG.error("Error in deserializing packet {} with exception", value, e);
             }
@@ -189,13 +180,18 @@ public class ArpMonitoringHandler
     }
 
     private void runOnlyInOwnerNode(String jobDesc, final Runnable job) {
-        entityOwnershipUtils.runOnlyInOwnerNode(VpnConstants.ARP_MONITORING_ENTITY, VpnConstants.ARP_MONITORING_ENTITY,
+        entityOwnershipUtils.runOnlyInOwnerNode(VpnConstants.IP_MONITORING_ENTITY, VpnConstants.IP_MONITORING_ENTITY,
                 jobCoordinator, jobDesc, job);
     }
 
-    static String buildJobKey(String ip, String vpnName) {
-        return new StringBuilder(ArpConstants.ARPJOB).append('-').append(vpnName).append('-').append(ip).toString();
+    private Optional<Long> getMonitorProfileId(String ipAddress) {
+        if (NWUtil.isIpv4Address(ipAddress)) {
+            return this.arpMonitorProfileId;
+        } else {
+            // TODO: Handle for IPv6 case
+            LOG.warn("IPv6 address monitoring is not yet supported - getMonitorProfileId(). ipAddress={}", ipAddress);
+            return Optional.absent();
+        }
     }
-
 }
 
similarity index 87%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/LearntVpnVipToPortEventProcessor.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java
index 7afe70249c3b493bfd89e9e41336a5f7b5dcfccb..70d6aed4c4445f122184eb910835770c48287adb 100644 (file)
@@ -5,46 +5,39 @@
  * 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.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn;
 
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.ListenableFuture;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.Callable;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.genius.arputil.api.ArpConstants;
 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataTreeChangeListenerBase;
 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
 import org.opendaylight.genius.infra.Datastore;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
-import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils;
 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
-import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
+import org.opendaylight.netvirt.vpnmanager.VpnConstants;
+import org.opendaylight.netvirt.vpnmanager.VpnUtil;
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder;
 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.alivenessmonitor.rev160411.AlivenessMonitorService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortEventAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortEventData;
@@ -64,12 +57,7 @@ public class LearntVpnVipToPortEventProcessor
     private static final Logger LOG = LoggerFactory.getLogger(LearntVpnVipToPortEventProcessor.class);
     private final DataBroker dataBroker;
     private final ManagedNewTransactionRunner txRunner;
-    private final OdlInterfaceRpcService interfaceRpc;
-    private final IMdsalApiManager mdsalManager;
-    private final AlivenessMonitorService alivenessManager;
-    private final INeutronVpnManager neutronVpnService;
     private final IInterfaceManager interfaceManager;
-    private final IdManagerService idManager;
     public static final String MIP_PROCESSING_JOB  = "MIP-JOB";
     private final JobCoordinator jobCoordinator;
     private final EntityOwnershipUtils entityOwnershipUtils;
@@ -77,21 +65,12 @@ public class LearntVpnVipToPortEventProcessor
     private final VpnUtil vpnUtil;
 
     @Inject
-    public LearntVpnVipToPortEventProcessor(final DataBroker dataBroker, final OdlInterfaceRpcService interfaceRpc,
-                                            IMdsalApiManager mdsalManager, AlivenessMonitorService alivenessManager,
-                                            INeutronVpnManager neutronVpnService, IInterfaceManager interfaceManager,
-                                            EntityOwnershipService entityOwnershipService,
-                                            IdManagerService idManagerService, final JobCoordinator jobCoordinator,
-                                            VpnUtil vpnUtil) {
+    public LearntVpnVipToPortEventProcessor(final DataBroker dataBroker, IInterfaceManager interfaceManager,
+            EntityOwnershipService entityOwnershipService, final JobCoordinator jobCoordinator, VpnUtil vpnUtil) {
         super(LearntVpnVipToPortEvent.class, LearntVpnVipToPortEventProcessor.class);
         this.dataBroker = dataBroker;
         this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
-        this.interfaceRpc = interfaceRpc;
-        this.mdsalManager = mdsalManager;
-        this.alivenessManager = alivenessManager;
-        this.neutronVpnService = neutronVpnService;
         this.interfaceManager = interfaceManager;
-        this.idManager = idManagerService;
         this.jobCoordinator = jobCoordinator;
         this.entityOwnershipUtils = new EntityOwnershipUtils(entityOwnershipService);
         this.vpnUtil = vpnUtil;
@@ -102,10 +81,10 @@ public class LearntVpnVipToPortEventProcessor
         registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker);
         try {
             candidateRegistration = entityOwnershipUtils.getEntityOwnershipService()
-                    .registerCandidate(new Entity(VpnConstants.ARP_MONITORING_ENTITY,
-                            VpnConstants.ARP_MONITORING_ENTITY));
+                    .registerCandidate(new Entity(VpnConstants.IP_MONITORING_ENTITY,
+                            VpnConstants.IP_MONITORING_ENTITY));
         } catch (CandidateAlreadyRegisteredException e) {
-            LOG.error("Failed to register the entity {}", VpnConstants.ARP_MONITORING_ENTITY);
+            LOG.error("Failed to register the entity {}", VpnConstants.IP_MONITORING_ENTITY);
         }
     }
 
@@ -138,16 +117,17 @@ public class LearntVpnVipToPortEventProcessor
     @Override
     protected void add(InstanceIdentifier<LearntVpnVipToPortEvent> identifier, LearntVpnVipToPortEvent value) {
         // AFTER PROCESSING THE EVENT, REMOVE THE EVENT FROM THE QUEUE
-        entityOwnershipUtils.runOnlyInOwnerNode(VpnConstants.ARP_MONITORING_ENTITY,
-                VpnConstants.ARP_MONITORING_ENTITY, jobCoordinator, "LearntVpnVipToPortEvent-Handler", () -> {
+        entityOwnershipUtils.runOnlyInOwnerNode(VpnConstants.IP_MONITORING_ENTITY, VpnConstants.IP_MONITORING_ENTITY,
+            jobCoordinator, "LearntVpnVipToPortEvent-Handler", () -> {
                 try {
                     String vpnName = value.getVpnName();
                     String ipAddress = value.getSrcFixedip();
                     if (value.getEventAction() == LearntVpnVipToPortEventAction.Add) {
-                        jobCoordinator.enqueueJob(buildJobKey(ipAddress, vpnName), new AddMipAdjacencyWorker(value));
+                        jobCoordinator.enqueueJob(VpnUtil.buildIpMonitorJobKey(ipAddress, vpnName),
+                                new AddMipAdjacencyWorker(value));
                     }
                     if (value.getEventAction() == LearntVpnVipToPortEventAction.Delete) {
-                        jobCoordinator.enqueueJob(buildJobKey(ipAddress, vpnName),
+                        jobCoordinator.enqueueJob(VpnUtil.buildIpMonitorJobKey(ipAddress, vpnName),
                                 new DeleteMipAdjacencyWorker(value));
                     }
                 } finally {
@@ -163,10 +143,6 @@ public class LearntVpnVipToPortEventProcessor
         // NOTE: DONOT ADD ANY CODE HERE AND MAKE A CIRCUS
     }
 
-    static String buildJobKey(String ip, String vpnName) {
-        return new StringBuilder(ArpConstants.ARPJOB).append('-').append(vpnName).append('-').append(ip).toString();
-    }
-
     private class AddMipAdjacencyWorker implements Callable<List<ListenableFuture<Void>>> {
         String vpnName;
         String interfaceName;
similarity index 96%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ArpNotificationHandler.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv4/ArpNotificationHandler.java
index a23c8f6daf48faae085248bf06537cd11d840f52..8b8c92f2c9423827488c8ac15c5db74ca890048e 100644 (file)
@@ -5,7 +5,7 @@
  * 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.vpnmanager.iplearn;
+package org.opendaylight.netvirt.vpnmanager.iplearn.ipv4;
 
 import java.math.BigInteger;
 import javax.inject.Inject;
@@ -13,6 +13,7 @@ import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 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.arputil.rev160406.ArpRequestReceived;
similarity index 99%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/ArpUtils.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv4/ArpUtils.java
index 73a19f4196e2864fbde161cbb58d64ee9135dc40..2aa85e2c4d62611ef5d411e4168333c79f51743d 100644 (file)
@@ -5,7 +5,7 @@
  * 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.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn.ipv4;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
similarity index 94%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/Ipv6NaNotificationHandler.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv6/Ipv6NaNotificationHandler.java
index 4248d7fdc6542f3190b646652895247dbcf2b370..f01c336febf24f0dfea6f899a2fc4fb259eb3c26 100644 (file)
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.netvirt.vpnmanager.iplearn;
+package org.opendaylight.netvirt.vpnmanager.iplearn.ipv6;
 
 import java.math.BigInteger;
 import javax.inject.Inject;
@@ -14,6 +14,7 @@ import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 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;
similarity index 97%
rename from vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/MacEntry.java
rename to vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/model/MacEntry.java
index a7ece3d63fd6e148cb21941c9016dff2cce84672..09c1bc0158102995a6eb40868c87fd5fcb42e735 100644 (file)
@@ -5,7 +5,7 @@
  * 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.vpnmanager;
+package org.opendaylight.netvirt.vpnmanager.iplearn.model;
 
 import java.net.InetAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
index cdbd530d0bb2faf91d95ad1b4e070ca561e55d0b..d7d522f74791385ead44bb037e1db6b8ccfc640b 100644 (file)
@@ -58,7 +58,7 @@
   <service ref="vpnFootprintService"
            interface="org.opendaylight.netvirt.vpnmanager.api.IVpnFootprintService" />
 
-  <odl:notification-listener ref="arpMonitorEventListener" />
+  <odl:notification-listener ref="ipMonitorEventListener" />
 
   <service ref="subnetRoutePacketInHandler" odl:type="default"
            interface="org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingListener" />