ONOS-7921 - add a configuration item
Change-Id: Id55a1864551585d8382bd50c0fd1b45ea1870893
diff --git a/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java b/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
index 018f6ac..ec3b77b 100644
--- a/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
+++ b/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootManager.java
@@ -22,10 +22,15 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.tuple.Pair;
+import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Modified;
+import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
+import org.onosproject.cfg.ComponentConfigService;
import org.onlab.packet.IpAddress;
import org.onlab.packet.VlanId;
import org.onosproject.cluster.NodeId;
@@ -74,13 +79,16 @@
import org.onosproject.t3.api.GroupsInDevice;
import org.onosproject.t3.api.StaticPacketTrace;
import org.onosproject.t3.api.TroubleshootService;
+import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import java.net.UnknownHostException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Dictionary;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
@@ -107,10 +115,20 @@
@Component(immediate = true)
public class TroubleshootManager implements TroubleshootService {
+ private static final String DEFAULT_OFDPA_BASED_DRIVERS =
+ "ofdpa,ofdpa3,qmx-ofdpa3,as7712-32x-premium,as5912-54x-premium,as5916-54x-premium," +
+ "accton-ofdpa3,znyx-ofdpa";
+
private static final Logger log = getLogger(TroubleshootManager.class);
static final String PACKET_TO_CONTROLLER = "Packet goes to the controller";
+ @Property(name = "ofdpaBasedDrivers",
+ value = DEFAULT_OFDPA_BASED_DRIVERS,
+ label = "list of ONOS drivers that follow OFDPA semantics")
+ protected static Set<String> ofdpaBasedDrivers =
+ new HashSet<String>(Arrays.asList(DEFAULT_OFDPA_BASED_DRIVERS.split(",")));
+
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected FlowRuleService flowRuleService;
@@ -144,6 +162,43 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected MulticastRouteService mcastService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected ComponentConfigService cfgService;
+
+ @Activate
+ public void activate(ComponentContext context) {
+ cfgService.registerProperties(getClass());
+ modified(context);
+ }
+
+ @Deactivate
+ public void deactivate() {
+ cfgService.unregisterProperties(getClass(), true);
+ }
+
+ @Modified
+ public void modified(ComponentContext context) {
+ String[] values;
+ if (context == null) {
+ log.debug("No component configuration, using default OFDPA driver list");
+ values = DEFAULT_OFDPA_BASED_DRIVERS.split(",");
+ } else {
+ Dictionary<?, ?> properties = context.getProperties();
+ values = ((String) properties.get("ofdpaBasedDrivers")).split(",");
+ }
+
+ ofdpaBasedDrivers.clear();
+ for (String val : values) {
+ val = val.trim();
+ if (val.length() > 0) {
+ ofdpaBasedDrivers.add(val);
+ }
+ }
+
+ log.debug("OFDPA based driver list update ({}) to {}",
+ ofdpaBasedDrivers.size(), ofdpaBasedDrivers);
+ }
+
@Override
public List<StaticPacketTrace> pingAll(EtherType type) {
ImmutableList.Builder<StaticPacketTrace> tracesBuilder = ImmutableList.builder();
@@ -766,8 +821,8 @@
flowEntry = matchHighestPriority(packet, in, tableId);
log.debug("Found Flow Entry {}", flowEntry);
- boolean isOfdpaHardware = TroubleshootUtils.hardwareOfdpaMap
- .getOrDefault(driverService.getDriver(in.deviceId()).name(), false);
+ boolean isOfdpaHardware = TroubleshootManager.ofdpaBasedDrivers.
+ contains(driverService.getDriver(in.deviceId()).name());
//if the flow entry on a table is null and we are on hardware we treat as table miss, with few exceptions
if (flowEntry == null && isOfdpaHardware) {
diff --git a/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootUtils.java b/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootUtils.java
index 57758b3..b966502 100644
--- a/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootUtils.java
+++ b/apps/t3/app/src/main/java/org/onosproject/t3/impl/TroubleshootUtils.java
@@ -16,11 +16,8 @@
package org.onosproject.t3.impl;
-import com.google.common.collect.ImmutableMap;
import org.onlab.packet.MacAddress;
-import java.util.Map;
-
/**
* Utility class for the troubleshooting tool.
*/
@@ -31,21 +28,6 @@
}
/**
- * Map defining if a specific driver is for a HW switch.
- */
- //Done with builder() instead of of() for clarity
- static Map<String, Boolean> hardwareOfdpaMap = ImmutableMap.<String, Boolean>builder()
- .put("ofdpa", true)
- .put("ofdpa3", true)
- .put("qmx-ofdpa3", true)
- .put("as7712-32x-premium", true)
- .put("as5912-54x-premium", true)
- .put("as5916-54x-premium", true)
- .put("accton-ofdpa3", true)
- .put("znyx-ofdpa", true)
- .build();
-
- /**
* Checks if the Mac Address is inside a range between the min MAC and the mask.
* @param macAddress the MAC address to check
* @param minAddr the min MAC address
diff --git a/apps/t3/app/src/test/java/org/onosproject/t3/impl/TroubleshootManagerTest.java b/apps/t3/app/src/test/java/org/onosproject/t3/impl/TroubleshootManagerTest.java
index 8ac76c8..b858f06 100644
--- a/apps/t3/app/src/test/java/org/onosproject/t3/impl/TroubleshootManagerTest.java
+++ b/apps/t3/app/src/test/java/org/onosproject/t3/impl/TroubleshootManagerTest.java
@@ -394,6 +394,7 @@
log.info("trace {}", traceSuccess.resultMessage());
assertNotNull("trace should not be null", traceSuccess);
+ assertNotNull("trace groups should not be null", traceSuccess.getGroupOuputs(deviceId));
assertEquals("Trace should have " + outputs + " output", outputs,
traceSuccess.getGroupOuputs(deviceId).size());
assertEquals("Trace should only have " + paths + "output", paths, traceSuccess.getCompletePaths().size());
@@ -666,4 +667,4 @@
return NodeId.nodeId(MASTER_1);
}
}
-}
\ No newline at end of file
+}