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/LLDPLinkProvider.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
index f36af7e..5c0dde7 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LLDPLinkProvider.java
@@ -163,16 +163,7 @@
ld = new LinkDiscovery(device, packetService, masterService,
providerService, useBDDP);
discoverers.put(device.id(), ld);
- for (Port p : deviceService.getPorts(device.id())) {
- if (rules.isSuppressed(p)) {
- log.debug("LinkDiscovery from {}@{} disabled by configuration",
- p.number(), device.id());
- continue;
- }
- if (!p.number().isLogical()) {
- ld.addPort(p);
- }
- }
+ addPorts(ld, device.id());
}
executor = newSingleThreadScheduledExecutor(groupedThreads("onos/device", "sync-%d"));
@@ -183,6 +174,17 @@
log.info("Started");
}
+ private void addPorts(LinkDiscovery discoverer, DeviceId deviceId) {
+ for (Port p : deviceService.getPorts(deviceId)) {
+ if (rules.isSuppressed(p)) {
+ continue;
+ }
+ if (!p.number().isLogical()) {
+ discoverer.addPort(p);
+ }
+ }
+ }
+
@Deactivate
public void deactivate() {
cfgService.unregisterProperties(getClass(), false);
@@ -431,26 +433,20 @@
}
// check what deviceService sees, to see if we are missing anything
try {
- LinkDiscovery ld = null;
for (Device dev : deviceService.getDevices()) {
if (rules.isSuppressed(dev)) {
continue;
}
DeviceId did = dev.id();
synchronized (discoverers) {
- if (!discoverers.containsKey(did)) {
- ld = new LinkDiscovery(dev, packetService,
- masterService, providerService, useBDDP);
- discoverers.put(did, ld);
- for (Port p : deviceService.getPorts(did)) {
- if (rules.isSuppressed(p)) {
- continue;
- }
- if (!p.number().isLogical()) {
- ld.addPort(p);
- }
- }
+ LinkDiscovery discoverer = discoverers.get(did);
+ if (discoverer == null) {
+ discoverer = new LinkDiscovery(dev, packetService,
+ masterService, providerService, useBDDP);
+ discoverers.put(did, discoverer);
}
+
+ addPorts(discoverer, did);
}
}
} catch (Exception e) {