Committed by
Gerrit Code Review
Fix issue with link discovery missing ports.
ONOS-2477. Change-Id: I8d82ac687d6a3177b5216a19c99f0823a047529e
Showing
2 changed files
with
44 additions
and
42 deletions
... | @@ -163,16 +163,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { | ... | @@ -163,16 +163,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { |
163 | ld = new LinkDiscovery(device, packetService, masterService, | 163 | ld = new LinkDiscovery(device, packetService, masterService, |
164 | providerService, useBDDP); | 164 | providerService, useBDDP); |
165 | discoverers.put(device.id(), ld); | 165 | discoverers.put(device.id(), ld); |
166 | - for (Port p : deviceService.getPorts(device.id())) { | 166 | + addPorts(ld, device.id()); |
167 | - if (rules.isSuppressed(p)) { | ||
168 | - log.debug("LinkDiscovery from {}@{} disabled by configuration", | ||
169 | - p.number(), device.id()); | ||
170 | - continue; | ||
171 | - } | ||
172 | - if (!p.number().isLogical()) { | ||
173 | - ld.addPort(p); | ||
174 | - } | ||
175 | - } | ||
176 | } | 167 | } |
177 | 168 | ||
178 | executor = newSingleThreadScheduledExecutor(groupedThreads("onos/device", "sync-%d")); | 169 | executor = newSingleThreadScheduledExecutor(groupedThreads("onos/device", "sync-%d")); |
... | @@ -183,6 +174,17 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { | ... | @@ -183,6 +174,17 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { |
183 | log.info("Started"); | 174 | log.info("Started"); |
184 | } | 175 | } |
185 | 176 | ||
177 | + private void addPorts(LinkDiscovery discoverer, DeviceId deviceId) { | ||
178 | + for (Port p : deviceService.getPorts(deviceId)) { | ||
179 | + if (rules.isSuppressed(p)) { | ||
180 | + continue; | ||
181 | + } | ||
182 | + if (!p.number().isLogical()) { | ||
183 | + discoverer.addPort(p); | ||
184 | + } | ||
185 | + } | ||
186 | + } | ||
187 | + | ||
186 | @Deactivate | 188 | @Deactivate |
187 | public void deactivate() { | 189 | public void deactivate() { |
188 | // TODO revoke all packet requests when deactivate | 190 | // TODO revoke all packet requests when deactivate |
... | @@ -419,26 +421,20 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { | ... | @@ -419,26 +421,20 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { |
419 | } | 421 | } |
420 | // check what deviceService sees, to see if we are missing anything | 422 | // check what deviceService sees, to see if we are missing anything |
421 | try { | 423 | try { |
422 | - LinkDiscovery ld = null; | ||
423 | for (Device dev : deviceService.getDevices()) { | 424 | for (Device dev : deviceService.getDevices()) { |
424 | if (rules.isSuppressed(dev)) { | 425 | if (rules.isSuppressed(dev)) { |
425 | continue; | 426 | continue; |
426 | } | 427 | } |
427 | DeviceId did = dev.id(); | 428 | DeviceId did = dev.id(); |
428 | synchronized (discoverers) { | 429 | synchronized (discoverers) { |
429 | - if (!discoverers.containsKey(did)) { | 430 | + LinkDiscovery discoverer = discoverers.get(did); |
430 | - ld = new LinkDiscovery(dev, packetService, | 431 | + if (discoverer == null) { |
432 | + discoverer = new LinkDiscovery(dev, packetService, | ||
431 | masterService, providerService, useBDDP); | 433 | masterService, providerService, useBDDP); |
432 | - discoverers.put(did, ld); | 434 | + discoverers.put(did, discoverer); |
433 | - for (Port p : deviceService.getPorts(did)) { | ||
434 | - if (rules.isSuppressed(p)) { | ||
435 | - continue; | ||
436 | - } | ||
437 | - if (!p.number().isLogical()) { | ||
438 | - ld.addPort(p); | ||
439 | - } | ||
440 | - } | ||
441 | } | 435 | } |
436 | + | ||
437 | + addPorts(discoverer, did); | ||
442 | } | 438 | } |
443 | } | 439 | } |
444 | } catch (Exception e) { | 440 | } catch (Exception e) { | ... | ... |
... | @@ -15,22 +15,6 @@ | ... | @@ -15,22 +15,6 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.provider.lldp.impl; | 16 | package org.onosproject.provider.lldp.impl; |
17 | 17 | ||
18 | -import static com.google.common.base.Preconditions.checkNotNull; | ||
19 | -import static java.util.concurrent.TimeUnit.MILLISECONDS; | ||
20 | -import static org.onosproject.net.MastershipRole.MASTER; | ||
21 | -import static org.onosproject.net.PortNumber.portNumber; | ||
22 | -import static org.onosproject.net.flow.DefaultTrafficTreatment.builder; | ||
23 | -import static org.slf4j.LoggerFactory.getLogger; | ||
24 | - | ||
25 | -import java.nio.ByteBuffer; | ||
26 | -import java.util.Collections; | ||
27 | -import java.util.HashMap; | ||
28 | -import java.util.HashSet; | ||
29 | -import java.util.Iterator; | ||
30 | -import java.util.Map; | ||
31 | -import java.util.Set; | ||
32 | -import java.util.concurrent.atomic.AtomicInteger; | ||
33 | - | ||
34 | import org.jboss.netty.util.Timeout; | 18 | import org.jboss.netty.util.Timeout; |
35 | import org.jboss.netty.util.TimerTask; | 19 | import org.jboss.netty.util.TimerTask; |
36 | import org.onlab.packet.Ethernet; | 20 | import org.onlab.packet.Ethernet; |
... | @@ -52,6 +36,22 @@ import org.onosproject.net.packet.PacketContext; | ... | @@ -52,6 +36,22 @@ import org.onosproject.net.packet.PacketContext; |
52 | import org.onosproject.net.packet.PacketService; | 36 | import org.onosproject.net.packet.PacketService; |
53 | import org.slf4j.Logger; | 37 | import org.slf4j.Logger; |
54 | 38 | ||
39 | +import java.nio.ByteBuffer; | ||
40 | +import java.util.Collections; | ||
41 | +import java.util.HashMap; | ||
42 | +import java.util.HashSet; | ||
43 | +import java.util.Iterator; | ||
44 | +import java.util.Map; | ||
45 | +import java.util.Set; | ||
46 | +import java.util.concurrent.atomic.AtomicInteger; | ||
47 | + | ||
48 | +import static com.google.common.base.Preconditions.checkNotNull; | ||
49 | +import static java.util.concurrent.TimeUnit.MILLISECONDS; | ||
50 | +import static org.onosproject.net.MastershipRole.MASTER; | ||
51 | +import static org.onosproject.net.PortNumber.portNumber; | ||
52 | +import static org.onosproject.net.flow.DefaultTrafficTreatment.builder; | ||
53 | +import static org.slf4j.LoggerFactory.getLogger; | ||
54 | + | ||
55 | // TODO: add 'fast discovery' mode: drop LLDPs in destination switch but listen for flow_removed messages | 55 | // TODO: add 'fast discovery' mode: drop LLDPs in destination switch but listen for flow_removed messages |
56 | 56 | ||
57 | /** | 57 | /** |
... | @@ -143,15 +143,21 @@ public class LinkDiscovery implements TimerTask { | ... | @@ -143,15 +143,21 @@ public class LinkDiscovery implements TimerTask { |
143 | public void addPort(final Port port) { | 143 | public void addPort(final Port port) { |
144 | this.log.debug("Sending init probe to port {}@{}", | 144 | this.log.debug("Sending init probe to port {}@{}", |
145 | port.number().toLong(), device.id()); | 145 | port.number().toLong(), device.id()); |
146 | - boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER; | 146 | + |
147 | - if (isMaster) { | 147 | + boolean newPort = false; |
148 | - sendProbes(port.number().toLong()); | ||
149 | - } | ||
150 | synchronized (this) { | 148 | synchronized (this) { |
149 | + if (!containsPort(port.number().toLong())) { | ||
150 | + newPort = true; | ||
151 | this.slowPorts.add(port.number().toLong()); | 151 | this.slowPorts.add(port.number().toLong()); |
152 | } | 152 | } |
153 | } | 153 | } |
154 | 154 | ||
155 | + boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER; | ||
156 | + if (newPort && isMaster) { | ||
157 | + sendProbes(port.number().toLong()); | ||
158 | + } | ||
159 | + } | ||
160 | + | ||
155 | /** | 161 | /** |
156 | * Removes physical port from discovery process. | 162 | * Removes physical port from discovery process. |
157 | * | 163 | * | ... | ... |
-
Please register or login to post a comment