[Falcon] link discovery -
- safety checks against fingerprint being null
- checks for foreign fingerprint and probe message origin
Change-Id: I2f3e491802afc2091335bd25fcf24865293bde10
diff --git a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
index 11b8cd3..c0a50f9 100644
--- a/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
+++ b/providers/lldp/src/main/java/org/onosproject/provider/lldp/impl/LinkDiscovery.java
@@ -43,6 +43,7 @@
import static org.onosproject.net.PortNumber.portNumber;
import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
import static org.slf4j.LoggerFactory.getLogger;
+import static org.onosproject.cluster.ClusterMetadata.NO_NAME;
/**
* Run discovery process from a physical switch. Ports are initially labeled as
@@ -159,6 +160,10 @@
ONOSLLDP onoslldp = ONOSLLDP.parseONOSLLDP(eth);
if (onoslldp != null) {
+ if (notMy(onoslldp)) {
+ return true;
+ }
+
PortNumber srcPort = portNumber(onoslldp.getPort());
PortNumber dstPort = packetContext.inPacket().receivedFrom().port();
DeviceId srcDeviceId = DeviceId.deviceId(onoslldp.getDeviceString());
@@ -182,6 +187,26 @@
return false;
}
+ // true if *NOT* this cluster's own probe.
+ private boolean notMy(ONOSLLDP onoslldp) {
+ if (onoslldp.getDomainTLV() == null) {
+ // not finger-printed - but we can check the source
+ DeviceId src = DeviceId.deviceId(onoslldp.getDeviceString());
+ if (context.deviceService().getDevice(src) == null) {
+ return true;
+ }
+ return false;
+ }
+
+ String us = context.fingerprint();
+ String them = onoslldp.getDomainString();
+ // if: Our and/or their MetadataService in poorly state, conservative 'yes'
+ if (NO_NAME.equals(us) || NO_NAME.equals(them)) {
+ return true;
+ } else {
+ return !us.equals(them);
+ }
+ }
/**
* Execute this method every t milliseconds. Loops over all ports