mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-23 13:21:21 +02:00
LLDP LinkDiscovery related fix
- avoid LinkDiscovery from start()-ing multiple times - Only check device mastership at beginning of probe interval Change-Id: I0cece8fbcf2a031ea3ac603c6f51dbe87ad454ad
This commit is contained in:
parent
c202954953
commit
f672588ec4
@ -145,7 +145,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
|
|||||||
break;
|
break;
|
||||||
case PORT_ADDED:
|
case PORT_ADDED:
|
||||||
case PORT_UPDATED:
|
case PORT_UPDATED:
|
||||||
if (event.port().isEnabled()) {
|
if (port.isEnabled()) {
|
||||||
ld = discoverers.get(device.id());
|
ld = discoverers.get(device.id());
|
||||||
if (ld == null) {
|
if (ld == null) {
|
||||||
return;
|
return;
|
||||||
@ -155,6 +155,7 @@ public class LLDPLinkProvider extends AbstractProvider implements LinkProvider {
|
|||||||
ld.addPort(port);
|
ld.addPort(port);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
log.debug("Port down {}", port);
|
||||||
ConnectPoint point = new ConnectPoint(device.id(),
|
ConnectPoint point = new ConnectPoint(device.id(),
|
||||||
port.number());
|
port.number());
|
||||||
providerService.linksVanished(point);
|
providerService.linksVanished(point);
|
||||||
|
@ -68,6 +68,7 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
// send 1 probe every probeRate milliseconds
|
// send 1 probe every probeRate milliseconds
|
||||||
private final long probeRate;
|
private final long probeRate;
|
||||||
private final Set<Long> slowPorts;
|
private final Set<Long> slowPorts;
|
||||||
|
// ports, known to have incoming links
|
||||||
private final Set<Long> fastPorts;
|
private final Set<Long> fastPorts;
|
||||||
// number of unacknowledged probes per port
|
// number of unacknowledged probes per port
|
||||||
private final Map<Long, AtomicInteger> portProbeCount;
|
private final Map<Long, AtomicInteger> portProbeCount;
|
||||||
@ -125,6 +126,7 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
log.info("Using BDDP to discover network");
|
log.info("Using BDDP to discover network");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.isStopped = true;
|
||||||
start();
|
start();
|
||||||
this.log.debug("Started discovery manager for switch {}",
|
this.log.debug("Started discovery manager for switch {}",
|
||||||
device.id());
|
device.id());
|
||||||
@ -140,7 +142,10 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
public void addPort(final Port port) {
|
public void addPort(final Port port) {
|
||||||
this.log.debug("Sending init probe to port {}@{}",
|
this.log.debug("Sending init probe to port {}@{}",
|
||||||
port.number().toLong(), device.id());
|
port.number().toLong(), device.id());
|
||||||
|
boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
|
||||||
|
if (isMaster) {
|
||||||
sendProbes(port.number().toLong());
|
sendProbes(port.number().toLong());
|
||||||
|
}
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
this.slowPorts.add(port.number().toLong());
|
this.slowPorts.add(port.number().toLong());
|
||||||
}
|
}
|
||||||
@ -233,6 +238,13 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void run(final Timeout t) {
|
public void run(final Timeout t) {
|
||||||
|
boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
|
||||||
|
if (!isMaster) {
|
||||||
|
// reschedule timer
|
||||||
|
timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.log.trace("Sending probes from {}", device.id());
|
this.log.trace("Sending probes from {}", device.id());
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
final Iterator<Long> fastIterator = this.fastPorts.iterator();
|
final Iterator<Long> fastIterator = this.fastPorts.iterator();
|
||||||
@ -245,6 +257,7 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
sendProbes(portNumber);
|
sendProbes(portNumber);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
// Link down, demote to slowPorts
|
||||||
// Update fast and slow ports
|
// Update fast and slow ports
|
||||||
fastIterator.remove();
|
fastIterator.remove();
|
||||||
this.slowPorts.add(portNumber);
|
this.slowPorts.add(portNumber);
|
||||||
@ -274,8 +287,12 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
|
if (isStopped) {
|
||||||
timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
|
timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
|
||||||
isStopped = false;
|
isStopped = false;
|
||||||
|
} else {
|
||||||
|
log.warn("LinkDiscovery started multiple times?");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -317,8 +334,8 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sendProbes(Long portNumber) {
|
private void sendProbes(Long portNumber) {
|
||||||
boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
|
// TODO: should have suppression port configuration, not by type
|
||||||
if (isMaster && device.type() != Device.Type.ROADM) {
|
if (device.type() != Device.Type.ROADM) {
|
||||||
log.debug("Sending probes out to {}@{}", portNumber, device.id());
|
log.debug("Sending probes out to {}@{}", portNumber, device.id());
|
||||||
OutboundPacket pkt = this.createOutBoundLLDP(portNumber);
|
OutboundPacket pkt = this.createOutBoundLLDP(portNumber);
|
||||||
pktService.emit(pkt);
|
pktService.emit(pkt);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user