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
......