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());
}
}