Fix issue with link discovery missing ports.

ONOS-2477.

Ported from onos-1.2 branch.

Change-Id: I8d82ac687d6a3177b5216a19c99f0823a047529e
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
index edf9a7b..e2630f5 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
@@ -15,22 +15,6 @@
  */
 package org.onosproject.provider.lldp.impl;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.onosproject.net.MastershipRole.MASTER;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.nio.ByteBuffer;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
 import org.jboss.netty.util.Timeout;
 import org.jboss.netty.util.TimerTask;
 import org.onlab.packet.Ethernet;
@@ -52,6 +36,22 @@
 import org.onosproject.net.packet.PacketService;
 import org.slf4j.Logger;
 
+import java.nio.ByteBuffer;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static org.onosproject.net.MastershipRole.MASTER;
+import static org.onosproject.net.PortNumber.portNumber;
+import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
+import static org.slf4j.LoggerFactory.getLogger;
+
 // TODO: add 'fast discovery' mode: drop LLDPs in destination switch but listen for flow_removed messages
 
 /**
@@ -141,14 +141,19 @@
      * @param port the port
      */
     public void addPort(final Port port) {
-        this.log.debug("Sending init probe to port {}@{}",
-                       port.number().toLong(), device.id());
-        boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
-        if (isMaster) {
-            sendProbes(port.number().toLong());
-        }
+        boolean newPort = false;
         synchronized (this) {
-            this.slowPorts.add(port.number().toLong());
+            if (!containsPort(port.number().toLong())) {
+                newPort = true;
+                this.slowPorts.add(port.number().toLong());
+            }
+        }
+
+        boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
+        if (newPort && isMaster) {
+            this.log.debug("Sending init probe to port {}@{}",
+                    port.number().toLong(), device.id());
+            sendProbes(port.number().toLong());
         }
     }