T3 Fixes:
- Incomplete multicast Path computation
- NPE in case of null port for a device
Change-Id: Id3865ac3ac447b487ab59aff17d5554c5b8ae245
(cherry picked from commit 95da6491db769b90120eb2638c76cca2ac418289)
diff --git a/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java b/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
index ed02d03..cf40de9 100644
--- a/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
+++ b/apps/t3/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
@@ -198,20 +198,22 @@
try {
+ ImmutableSet.Builder<StaticPacketTrace> traces = ImmutableSet.builder();
//if the location deviceId is the same, the two hosts are under same subnet and vlan on the interface
// we are under same leaf so it's L2 Unicast.
if (areBridged(source, destination)) {
selectorBuilder.matchEthDst(destination.mac());
- ImmutableSet.Builder<StaticPacketTrace> traces = ImmutableSet.builder();
source.locations().forEach(hostLocation -> {
selectorBuilder.matchInPort(hostLocation.port());
StaticPacketTrace trace = trace(selectorBuilder.build(), hostLocation);
trace.addEndpointHosts(Pair.of(source, destination));
traces.add(trace);
});
- return traces.build();
+ //The destination host is not dual homed, if it is the other path might be done through routing.
+ if (destination.locations().size() == 1) {
+ return traces.build();
+ }
}
-
//handle the IPs for src and dst in case of L3
if (etherType.equals(EtherType.IPV4) || etherType.equals(EtherType.IPV6)) {
@@ -242,7 +244,6 @@
" router MAC from segment routing config can't perform L3 tracing.");
failTrace.setSuccess(false);
}
- ImmutableSet.Builder<StaticPacketTrace> traces = ImmutableSet.builder();
source.locations().forEach(hostLocation -> {
selectorBuilder.matchInPort(hostLocation.port());
StaticPacketTrace trace = trace(selectorBuilder.build(), hostLocation);
@@ -508,11 +509,10 @@
" which is enabled and is edge port");
trace.setSuccess(true);
computePath(completePath, trace, outputPath.getOutput());
- completePath.clear();
if (!hasOtherOutput(in.deviceId(), trace, outputPath.getOutput())) {
return trace;
}
- } else if (deviceService.getPort(cp).isEnabled()) {
+ } else if (deviceService.getPort(cp) != null && deviceService.getPort(cp).isEnabled()) {
EthTypeCriterion ethTypeCriterion = (EthTypeCriterion) trace.getInitialPacket()
.getCriterion(Criterion.Type.ETH_TYPE);
//We treat as correct output only if it's not LLDP or BDDP
@@ -556,11 +556,17 @@
}
} else {
- //No links means that the packet gets dropped.
- log.warn("No links out of {}", cp);
computePath(completePath, trace, cp);
- trace.addResultMessage("No links depart from " + cp + ". Packet is dropped");
trace.setSuccess(false);
+ if (deviceService.getPort(cp) == null) {
+ //Port is not existant on device.
+ log.warn("Port {} is not available on device.", cp);
+ trace.addResultMessage("Port " + cp + "is not available on device. Packet is dropped");
+ } else {
+ //No links means that the packet gets dropped.
+ log.warn("No links out of {}", cp);
+ trace.addResultMessage("No links depart from " + cp + ". Packet is dropped");
+ }
}
}
return trace;