Thomas Vachuska

ONOS-2812 Refactored the link code in search of a defect; the root cause was old…

… OVS-based switch which is wrongly forwarding LLDP frames.

ONOS can fix this later by tracking links to be pruned using port pairs.

Change-Id: Ia79ec69946daff80636f5ab4b75a3dcdba91465d
...@@ -275,6 +275,10 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { ...@@ -275,6 +275,10 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
275 packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId); 275 packetService.cancelPackets(selector.build(), PacketPriority.CONTROL, appId);
276 } 276 }
277 277
278 + private LinkDiscovery createLinkDiscovery(Device device) {
279 + return new LinkDiscovery(device, packetService, masterService,
280 + providerService, useBDDP);
281 + }
278 282
279 private class InternalRoleListener implements MastershipListener { 283 private class InternalRoleListener implements MastershipListener {
280 284
...@@ -297,11 +301,8 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { ...@@ -297,11 +301,8 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
297 synchronized (discoverers) { 301 synchronized (discoverers) {
298 if (!discoverers.containsKey(deviceId)) { 302 if (!discoverers.containsKey(deviceId)) {
299 // ideally, should never reach here 303 // ideally, should never reach here
300 - log.debug("Device mastership changed ({}) {}", 304 + log.debug("Device mastership changed ({}) {}", event.type(), deviceId);
301 - event.type(), deviceId); 305 + discoverers.put(deviceId, createLinkDiscovery(device));
302 - discoverers.put(deviceId, new LinkDiscovery(device,
303 - packetService, masterService, providerService,
304 - useBDDP));
305 } 306 }
306 } 307 }
307 } 308 }
...@@ -331,15 +332,11 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { ...@@ -331,15 +332,11 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
331 log.debug("LinkDiscovery from {} disabled by configuration", device.id()); 332 log.debug("LinkDiscovery from {} disabled by configuration", device.id());
332 return; 333 return;
333 } 334 }
334 - log.debug("Device added ({}) {}", event.type(), 335 + log.debug("Device added ({}) {}", event.type(), deviceId);
335 - deviceId); 336 + discoverers.put(deviceId, createLinkDiscovery(device));
336 - discoverers.put(deviceId, new LinkDiscovery(device,
337 - packetService, masterService,
338 - providerService, useBDDP));
339 } else { 337 } else {
340 if (ld.isStopped()) { 338 if (ld.isStopped()) {
341 - log.debug("Device restarted ({}) {}", event.type(), 339 + log.debug("Device restarted ({}) {}", event.type(), deviceId);
342 - deviceId);
343 ld.start(); 340 ld.start();
344 } 341 }
345 } 342 }
...@@ -363,15 +360,13 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { ...@@ -363,15 +360,13 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
363 } 360 }
364 } else { 361 } else {
365 log.debug("Port down {}", port); 362 log.debug("Port down {}", port);
366 - ConnectPoint point = new ConnectPoint(deviceId, 363 + ConnectPoint point = new ConnectPoint(deviceId, port.number());
367 - port.number());
368 providerService.linksVanished(point); 364 providerService.linksVanished(point);
369 } 365 }
370 break; 366 break;
371 case PORT_REMOVED: 367 case PORT_REMOVED:
372 log.debug("Port removed {}", port); 368 log.debug("Port removed {}", port);
373 - ConnectPoint point = new ConnectPoint(deviceId, 369 + ConnectPoint point = new ConnectPoint(deviceId, port.number());
374 - port.number());
375 providerService.linksVanished(point); 370 providerService.linksVanished(point);
376 371
377 break; 372 break;
...@@ -411,8 +406,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { ...@@ -411,8 +406,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
411 if (context == null) { 406 if (context == null) {
412 return; 407 return;
413 } 408 }
414 - LinkDiscovery ld = discoverers.get( 409 + LinkDiscovery ld = discoverers.get(context.inPacket().receivedFrom().deviceId());
415 - context.inPacket().receivedFrom().deviceId());
416 if (ld == null) { 410 if (ld == null) {
417 return; 411 return;
418 } 412 }
...@@ -441,8 +435,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider { ...@@ -441,8 +435,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
441 synchronized (discoverers) { 435 synchronized (discoverers) {
442 LinkDiscovery discoverer = discoverers.get(did); 436 LinkDiscovery discoverer = discoverers.get(did);
443 if (discoverer == null) { 437 if (discoverer == null) {
444 - discoverer = new LinkDiscovery(dev, packetService, 438 + discoverer = createLinkDiscovery(dev);
445 - masterService, providerService, useBDDP);
446 discoverers.put(did, discoverer); 439 discoverers.put(did, discoverer);
447 } 440 }
448 441
......
...@@ -15,21 +15,8 @@ ...@@ -15,21 +15,8 @@
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; 18 +import com.google.common.collect.Maps;
19 -import static java.util.concurrent.TimeUnit.MILLISECONDS; 19 +import com.google.common.collect.Sets;
20 -import static org.onosproject.net.PortNumber.portNumber;
21 -import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
22 -import static org.slf4j.LoggerFactory.getLogger;
23 -
24 -import java.nio.ByteBuffer;
25 -import java.util.Collections;
26 -import java.util.HashMap;
27 -import java.util.HashSet;
28 -import java.util.Iterator;
29 -import java.util.Map;
30 -import java.util.Set;
31 -import java.util.concurrent.atomic.AtomicInteger;
32 -
33 import org.jboss.netty.util.Timeout; 20 import org.jboss.netty.util.Timeout;
34 import org.jboss.netty.util.TimerTask; 21 import org.jboss.netty.util.TimerTask;
35 import org.onlab.packet.Ethernet; 22 import org.onlab.packet.Ethernet;
...@@ -51,7 +38,20 @@ import org.onosproject.net.packet.PacketContext; ...@@ -51,7 +38,20 @@ import org.onosproject.net.packet.PacketContext;
51 import org.onosproject.net.packet.PacketService; 38 import org.onosproject.net.packet.PacketService;
52 import org.slf4j.Logger; 39 import org.slf4j.Logger;
53 40
41 +import java.nio.ByteBuffer;
42 +import java.util.Iterator;
43 +import java.util.Map;
44 +import java.util.Set;
45 +import java.util.concurrent.atomic.AtomicInteger;
46 +
47 +import static com.google.common.base.Preconditions.checkNotNull;
48 +import static java.util.concurrent.TimeUnit.MILLISECONDS;
49 +import static org.onosproject.net.PortNumber.portNumber;
50 +import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
51 +import static org.slf4j.LoggerFactory.getLogger;
52 +
54 // TODO: add 'fast discovery' mode: drop LLDPs in destination switch but listen for flow_removed messages 53 // TODO: add 'fast discovery' mode: drop LLDPs in destination switch but listen for flow_removed messages
54 +// FIXME: add ability to track links using port pairs or the link inventory
55 55
56 /** 56 /**
57 * Run discovery process from a physical switch. Ports are initially labeled as 57 * Run discovery process from a physical switch. Ports are initially labeled as
...@@ -62,74 +62,79 @@ import org.slf4j.Logger; ...@@ -62,74 +62,79 @@ import org.slf4j.Logger;
62 */ 62 */
63 public class LinkDiscovery implements TimerTask { 63 public class LinkDiscovery implements TimerTask {
64 64
65 + private final Logger log = getLogger(getClass());
66 +
67 + private static final short MAX_PROBE_COUNT = 3; // probes to send before link is removed
68 + private static final short DEFAULT_PROBE_RATE = 3000; // millis
69 + private static final String SRC_MAC = "DE:AD:BE:EF:BA:11";
70 + private static final String SERVICE_NULL = "Service cannot be null";
71 +
65 private final Device device; 72 private final Device device;
73 +
66 // send 1 probe every probeRate milliseconds 74 // send 1 probe every probeRate milliseconds
67 - private final long probeRate; 75 + private final long probeRate = DEFAULT_PROBE_RATE;
68 - private final Set<Long> slowPorts; 76 +
77 + private final Set<Long> slowPorts = Sets.newConcurrentHashSet();
69 // ports, known to have incoming links 78 // ports, known to have incoming links
70 - private final Set<Long> fastPorts; 79 + private final Set<Long> fastPorts = Sets.newConcurrentHashSet();
80 +
71 // number of unacknowledged probes per port 81 // number of unacknowledged probes per port
72 - private final Map<Long, AtomicInteger> portProbeCount; 82 + private final Map<Long, AtomicInteger> portProbeCount = Maps.newHashMap();
73 - // number of probes to send before link is removed 83 +
74 - private static final short MAX_PROBE_COUNT = 3;
75 - private final Logger log = getLogger(getClass());
76 private final ONOSLLDP lldpPacket; 84 private final ONOSLLDP lldpPacket;
77 private final Ethernet ethPacket; 85 private final Ethernet ethPacket;
78 private Ethernet bddpEth; 86 private Ethernet bddpEth;
79 private final boolean useBDDP; 87 private final boolean useBDDP;
88 +
89 + private Timeout timeout;
90 + private volatile boolean isStopped;
91 +
80 private final LinkProviderService linkProvider; 92 private final LinkProviderService linkProvider;
81 private final PacketService pktService; 93 private final PacketService pktService;
82 private final MastershipService mastershipService; 94 private final MastershipService mastershipService;
83 - private Timeout timeout;
84 - private volatile boolean isStopped;
85 95
86 /** 96 /**
87 * Instantiates discovery manager for the given physical switch. Creates a 97 * Instantiates discovery manager for the given physical switch. Creates a
88 * generic LLDP packet that will be customized for the port it is sent out on. 98 * generic LLDP packet that will be customized for the port it is sent out on.
89 * Starts the the timer for the discovery process. 99 * Starts the the timer for the discovery process.
90 * 100 *
91 - * @param device the physical switch 101 + * @param device the physical switch
92 - * @param pktService packet service 102 + * @param pktService packet service
93 - * @param masterService mastership service 103 + * @param masterService mastership service
94 * @param providerService link provider service 104 * @param providerService link provider service
95 - * @param useBDDP flag to also use BDDP for discovery 105 + * @param useBDDP flag to also use BDDP for discovery
96 */ 106 */
97 public LinkDiscovery(Device device, PacketService pktService, 107 public LinkDiscovery(Device device, PacketService pktService,
98 MastershipService masterService, 108 MastershipService masterService,
99 LinkProviderService providerService, Boolean... useBDDP) { 109 LinkProviderService providerService, Boolean... useBDDP) {
100 this.device = device; 110 this.device = device;
101 - this.probeRate = 3000; 111 + this.linkProvider = checkNotNull(providerService, SERVICE_NULL);
102 - this.linkProvider = providerService; 112 + this.pktService = checkNotNull(pktService, SERVICE_NULL);
103 - this.pktService = pktService; 113 + this.mastershipService = checkNotNull(masterService, SERVICE_NULL);
104 - 114 +
105 - this.mastershipService = checkNotNull(masterService, "WTF!"); 115 + lldpPacket = new ONOSLLDP();
106 - this.slowPorts = Collections.synchronizedSet(new HashSet<>()); 116 + lldpPacket.setChassisId(device.chassisId());
107 - this.fastPorts = Collections.synchronizedSet(new HashSet<>()); 117 + lldpPacket.setDevice(device.id().toString());
108 - this.portProbeCount = new HashMap<>(); 118 +
109 - this.lldpPacket = new ONOSLLDP(); 119 + ethPacket = new Ethernet();
110 - this.lldpPacket.setChassisId(device.chassisId()); 120 + ethPacket.setEtherType(Ethernet.TYPE_LLDP);
111 - this.lldpPacket.setDevice(device.id().toString()); 121 + ethPacket.setDestinationMACAddress(ONOSLLDP.LLDP_NICIRA);
112 - 122 + ethPacket.setPayload(this.lldpPacket);
113 - 123 + ethPacket.setPad(true);
114 - this.ethPacket = new Ethernet(); 124 +
115 - this.ethPacket.setEtherType(Ethernet.TYPE_LLDP);
116 - this.ethPacket.setDestinationMACAddress(ONOSLLDP.LLDP_NICIRA);
117 - this.ethPacket.setPayload(this.lldpPacket);
118 - this.ethPacket.setPad(true);
119 this.useBDDP = useBDDP.length > 0 ? useBDDP[0] : false; 125 this.useBDDP = useBDDP.length > 0 ? useBDDP[0] : false;
120 if (this.useBDDP) { 126 if (this.useBDDP) {
121 - this.bddpEth = new Ethernet(); 127 + bddpEth = new Ethernet();
122 - this.bddpEth.setPayload(this.lldpPacket); 128 + bddpEth.setPayload(lldpPacket);
123 - this.bddpEth.setEtherType(Ethernet.TYPE_BSN); 129 + bddpEth.setEtherType(Ethernet.TYPE_BSN);
124 - this.bddpEth.setDestinationMACAddress(ONOSLLDP.BDDP_MULTICAST); 130 + bddpEth.setDestinationMACAddress(ONOSLLDP.BDDP_MULTICAST);
125 - this.bddpEth.setPad(true); 131 + bddpEth.setPad(true);
126 log.info("Using BDDP to discover network"); 132 log.info("Using BDDP to discover network");
127 } 133 }
128 134
129 - this.isStopped = true; 135 + isStopped = true;
130 start(); 136 start();
131 - this.log.debug("Started discovery manager for switch {}", 137 + log.debug("Started discovery manager for switch {}", device.id());
132 - device.id());
133 138
134 } 139 }
135 140
...@@ -139,19 +144,18 @@ public class LinkDiscovery implements TimerTask { ...@@ -139,19 +144,18 @@ public class LinkDiscovery implements TimerTask {
139 * 144 *
140 * @param port the port 145 * @param port the port
141 */ 146 */
142 - public void addPort(final Port port) { 147 + public void addPort(Port port) {
143 boolean newPort = false; 148 boolean newPort = false;
144 synchronized (this) { 149 synchronized (this) {
145 if (!containsPort(port.number().toLong())) { 150 if (!containsPort(port.number().toLong())) {
146 newPort = true; 151 newPort = true;
147 - this.slowPorts.add(port.number().toLong()); 152 + slowPorts.add(port.number().toLong());
148 } 153 }
149 } 154 }
150 155
151 boolean isMaster = mastershipService.isLocalMaster(device.id()); 156 boolean isMaster = mastershipService.isLocalMaster(device.id());
152 if (newPort && isMaster) { 157 if (newPort && isMaster) {
153 - this.log.debug("Sending init probe to port {}@{}", 158 + log.debug("Sending init probe to port {}@{}", port.number().toLong(), device.id());
154 - port.number().toLong(), device.id());
155 sendProbes(port.number().toLong()); 159 sendProbes(port.number().toLong());
156 } 160 }
157 } 161 }
...@@ -161,21 +165,19 @@ public class LinkDiscovery implements TimerTask { ...@@ -161,21 +165,19 @@ public class LinkDiscovery implements TimerTask {
161 * 165 *
162 * @param port the port 166 * @param port the port
163 */ 167 */
164 - public void removePort(final Port port) { 168 + public void removePort(Port port) {
165 // Ignore ports that are not on this switch 169 // Ignore ports that are not on this switch
166 -
167 long portnum = port.number().toLong(); 170 long portnum = port.number().toLong();
168 synchronized (this) { 171 synchronized (this) {
169 - if (this.slowPorts.contains(portnum)) { 172 + if (slowPorts.contains(portnum)) {
170 - this.slowPorts.remove(portnum); 173 + slowPorts.remove(portnum);
171 174
172 - } else if (this.fastPorts.contains(portnum)) { 175 + } else if (fastPorts.contains(portnum)) {
173 - this.fastPorts.remove(portnum); 176 + fastPorts.remove(portnum);
174 - this.portProbeCount.remove(portnum); 177 + portProbeCount.remove(portnum);
175 // no iterator to update 178 // no iterator to update
176 } else { 179 } else {
177 - this.log.warn("Tried to dynamically remove non-existing port {}", 180 + log.warn("Tried to dynamically remove non-existing port {}", portnum);
178 - portnum);
179 } 181 }
180 } 182 }
181 } 183 }
...@@ -187,18 +189,17 @@ public class LinkDiscovery implements TimerTask { ...@@ -187,18 +189,17 @@ public class LinkDiscovery implements TimerTask {
187 * 189 *
188 * @param portNumber the port 190 * @param portNumber the port
189 */ 191 */
190 - public void ackProbe(final Long portNumber) { 192 + public void ackProbe(Long portNumber) {
191 synchronized (this) { 193 synchronized (this) {
192 - if (this.slowPorts.contains(portNumber)) { 194 + if (slowPorts.contains(portNumber)) {
193 - this.log.debug("Setting slow port to fast: {}:{}", 195 + log.debug("Setting slow port to fast: {}:{}", device.id(), portNumber);
194 - this.device.id(), portNumber); 196 + slowPorts.remove(portNumber);
195 - this.slowPorts.remove(portNumber); 197 + fastPorts.add(portNumber);
196 - this.fastPorts.add(portNumber); 198 + portProbeCount.put(portNumber, new AtomicInteger(0));
197 - this.portProbeCount.put(portNumber, new AtomicInteger(0)); 199 + } else if (fastPorts.contains(portNumber)) {
198 - } else if (this.fastPorts.contains(portNumber)) { 200 + portProbeCount.get(portNumber).set(0);
199 - this.portProbeCount.get(portNumber).set(0);
200 } else { 201 } else {
201 - this.log.debug("Got ackProbe for non-existing port: {}", portNumber); 202 + log.debug("Got ackProbe for non-existing port: {}", portNumber);
202 } 203 }
203 } 204 }
204 } 205 }
...@@ -207,6 +208,7 @@ public class LinkDiscovery implements TimerTask { ...@@ -207,6 +208,7 @@ public class LinkDiscovery implements TimerTask {
207 /** 208 /**
208 * Handles an incoming LLDP packet. Creates link in topology and sends ACK 209 * Handles an incoming LLDP packet. Creates link in topology and sends ACK
209 * to port where LLDP originated. 210 * to port where LLDP originated.
211 + *
210 * @param context packet context 212 * @param context packet context
211 * @return true if handled 213 * @return true if handled
212 */ 214 */
...@@ -218,21 +220,18 @@ public class LinkDiscovery implements TimerTask { ...@@ -218,21 +220,18 @@ public class LinkDiscovery implements TimerTask {
218 220
219 ONOSLLDP onoslldp = ONOSLLDP.parseONOSLLDP(eth); 221 ONOSLLDP onoslldp = ONOSLLDP.parseONOSLLDP(eth);
220 if (onoslldp != null) { 222 if (onoslldp != null) {
221 - final PortNumber dstPort = 223 + PortNumber srcPort = portNumber(onoslldp.getPort());
222 - context.inPacket().receivedFrom().port(); 224 + PortNumber dstPort = context.inPacket().receivedFrom().port();
223 - final PortNumber srcPort = portNumber(onoslldp.getPort()); 225 + DeviceId srcDeviceId = DeviceId.deviceId(onoslldp.getDeviceString());
224 - final DeviceId srcDeviceId = DeviceId.deviceId(onoslldp.getDeviceString()); 226 + DeviceId dstDeviceId = context.inPacket().receivedFrom().deviceId();
225 - final DeviceId dstDeviceId = context.inPacket().receivedFrom().deviceId(); 227 + ackProbe(dstPort.toLong());
226 - this.ackProbe(dstPort.toLong()); 228 +
227 ConnectPoint src = new ConnectPoint(srcDeviceId, srcPort); 229 ConnectPoint src = new ConnectPoint(srcDeviceId, srcPort);
228 ConnectPoint dst = new ConnectPoint(dstDeviceId, dstPort); 230 ConnectPoint dst = new ConnectPoint(dstDeviceId, dstPort);
229 231
230 - LinkDescription ld; 232 + LinkDescription ld = eth.getEtherType() == Ethernet.TYPE_LLDP ?
231 - if (eth.getEtherType() == Ethernet.TYPE_BSN) { 233 + new DefaultLinkDescription(src, dst, Type.DIRECT) :
232 - ld = new DefaultLinkDescription(src, dst, Type.INDIRECT); 234 + new DefaultLinkDescription(src, dst, Type.INDIRECT);
233 - } else {
234 - ld = new DefaultLinkDescription(src, dst, Type.DIRECT);
235 - }
236 235
237 try { 236 try {
238 linkProvider.linkDetected(ld); 237 linkProvider.linkDetected(ld);
...@@ -253,38 +252,36 @@ public class LinkDiscovery implements TimerTask { ...@@ -253,38 +252,36 @@ public class LinkDiscovery implements TimerTask {
253 * @param t timeout 252 * @param t timeout
254 */ 253 */
255 @Override 254 @Override
256 - public void run(final Timeout t) { 255 + public void run(Timeout t) {
257 if (isStopped()) { 256 if (isStopped()) {
258 return; 257 return;
259 } 258 }
260 if (!mastershipService.isLocalMaster(device.id())) { 259 if (!mastershipService.isLocalMaster(device.id())) {
261 if (!isStopped()) { 260 if (!isStopped()) {
262 // reschedule timer 261 // reschedule timer
263 - timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS); 262 + timeout = Timer.getTimer().newTimeout(this, probeRate, MILLISECONDS);
264 } 263 }
265 return; 264 return;
266 } 265 }
267 266
268 - this.log.trace("Sending probes from {}", device.id()); 267 + log.trace("Sending probes from {}", device.id());
269 synchronized (this) { 268 synchronized (this) {
270 - final Iterator<Long> fastIterator = this.fastPorts.iterator(); 269 + Iterator<Long> fastIterator = fastPorts.iterator();
271 while (fastIterator.hasNext()) { 270 while (fastIterator.hasNext()) {
272 long portNumber = fastIterator.next(); 271 long portNumber = fastIterator.next();
273 int probeCount = portProbeCount.get(portNumber).getAndIncrement(); 272 int probeCount = portProbeCount.get(portNumber).getAndIncrement();
274 273
275 if (probeCount < LinkDiscovery.MAX_PROBE_COUNT) { 274 if (probeCount < LinkDiscovery.MAX_PROBE_COUNT) {
276 - this.log.trace("Sending fast probe to port {}", portNumber); 275 + log.trace("Sending fast probe to port {}", portNumber);
277 sendProbes(portNumber); 276 sendProbes(portNumber);
278 277
279 } else { 278 } else {
280 - // Link down, demote to slowPorts 279 + // Link down, demote to slowPorts; update fast and slow ports
281 - // Update fast and slow ports
282 fastIterator.remove(); 280 fastIterator.remove();
283 - this.slowPorts.add(portNumber); 281 + slowPorts.add(portNumber);
284 - this.portProbeCount.remove(portNumber); 282 + portProbeCount.remove(portNumber);
285 283
286 - ConnectPoint cp = new ConnectPoint(device.id(), 284 + ConnectPoint cp = new ConnectPoint(device.id(), portNumber(portNumber));
287 - portNumber(portNumber));
288 log.debug("Link down -> {}", cp); 285 log.debug("Link down -> {}", cp);
289 linkProvider.linksVanished(cp); 286 linkProvider.linksVanished(cp);
290 } 287 }
...@@ -292,14 +289,14 @@ public class LinkDiscovery implements TimerTask { ...@@ -292,14 +289,14 @@ public class LinkDiscovery implements TimerTask {
292 289
293 // send a probe for the next slow port 290 // send a probe for the next slow port
294 for (long portNumber : slowPorts) { 291 for (long portNumber : slowPorts) {
295 - this.log.trace("Sending slow probe to port {}", portNumber); 292 + log.trace("Sending slow probe to port {}", portNumber);
296 sendProbes(portNumber); 293 sendProbes(portNumber);
297 } 294 }
298 } 295 }
299 296
300 if (!isStopped()) { 297 if (!isStopped()) {
301 // reschedule timer 298 // reschedule timer
302 - timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS); 299 + timeout = Timer.getTimer().newTimeout(this, probeRate, MILLISECONDS);
303 } 300 }
304 } 301 }
305 302
...@@ -323,17 +320,15 @@ public class LinkDiscovery implements TimerTask { ...@@ -323,17 +320,15 @@ public class LinkDiscovery implements TimerTask {
323 * @param port the port 320 * @param port the port
324 * @return Packet_out message with LLDP data 321 * @return Packet_out message with LLDP data
325 */ 322 */
326 - private OutboundPacket createOutBoundLLDP(final Long port) { 323 + private OutboundPacket createOutBoundLLDP(Long port) {
327 if (port == null) { 324 if (port == null) {
328 return null; 325 return null;
329 } 326 }
330 - this.lldpPacket.setPortId(port.intValue()); 327 + lldpPacket.setPortId(port.intValue());
331 - this.ethPacket.setSourceMACAddress("DE:AD:BE:EF:BA:11"); 328 + ethPacket.setSourceMACAddress(SRC_MAC);
332 - 329 + return new DefaultOutboundPacket(device.id(),
333 - final byte[] lldp = this.ethPacket.serialize();
334 - return new DefaultOutboundPacket(this.device.id(),
335 builder().setOutput(portNumber(port)).build(), 330 builder().setOutput(portNumber(port)).build(),
336 - ByteBuffer.wrap(lldp)); 331 + ByteBuffer.wrap(ethPacket.serialize()));
337 } 332 }
338 333
339 /** 334 /**
...@@ -342,25 +337,23 @@ public class LinkDiscovery implements TimerTask { ...@@ -342,25 +337,23 @@ public class LinkDiscovery implements TimerTask {
342 * @param port the port 337 * @param port the port
343 * @return Packet_out message with LLDP data 338 * @return Packet_out message with LLDP data
344 */ 339 */
345 - private OutboundPacket createOutBoundBDDP(final Long port) { 340 + private OutboundPacket createOutBoundBDDP(Long port) {
346 if (port == null) { 341 if (port == null) {
347 return null; 342 return null;
348 } 343 }
349 - this.lldpPacket.setPortId(port.intValue()); 344 + lldpPacket.setPortId(port.intValue());
350 - this.bddpEth.setSourceMACAddress("DE:AD:BE:EF:BA:11"); 345 + bddpEth.setSourceMACAddress(SRC_MAC);
351 - 346 + return new DefaultOutboundPacket(device.id(),
352 - final byte[] bddp = this.bddpEth.serialize();
353 - return new DefaultOutboundPacket(this.device.id(),
354 builder().setOutput(portNumber(port)).build(), 347 builder().setOutput(portNumber(port)).build(),
355 - ByteBuffer.wrap(bddp)); 348 + ByteBuffer.wrap(bddpEth.serialize()));
356 } 349 }
357 350
358 private void sendProbes(Long portNumber) { 351 private void sendProbes(Long portNumber) {
359 log.trace("Sending probes out to {}@{}", portNumber, device.id()); 352 log.trace("Sending probes out to {}@{}", portNumber, device.id());
360 - OutboundPacket pkt = this.createOutBoundLLDP(portNumber); 353 + OutboundPacket pkt = createOutBoundLLDP(portNumber);
361 pktService.emit(pkt); 354 pktService.emit(pkt);
362 if (useBDDP) { 355 if (useBDDP) {
363 - OutboundPacket bpkt = this.createOutBoundBDDP(portNumber); 356 + OutboundPacket bpkt = createOutBoundBDDP(portNumber);
364 pktService.emit(bpkt); 357 pktService.emit(bpkt);
365 } 358 }
366 } 359 }
......