Support power config ports retrieval
Change-Id: If0535eb713ca76bffdf43891d28e6357402246ac
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java b/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java
index 0cda064..d171c17 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/PowerConfig.java
@@ -20,6 +20,8 @@
import org.onosproject.net.PortNumber;
import org.onosproject.net.driver.HandlerBehaviour;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
/**
@@ -87,4 +89,15 @@
default Optional<Range<Long>> getInputPowerRange(PortNumber port, T component) {
return Optional.empty();
}
+
+ /**
+ * Get the ports, which support {@code PowerConfig} operations for the specified
+ * {@code component}.
+ *
+ * @param component the port component
+ * @return a set of power config ports
+ */
+ default List<PortNumber> getPorts(T component) {
+ return new ArrayList<PortNumber>();
+ }
}
diff --git a/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisNetconfUtility.java b/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisNetconfUtility.java
index 8a6b89a..f5c3d80 100644
--- a/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisNetconfUtility.java
+++ b/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisNetconfUtility.java
@@ -54,6 +54,7 @@
public static final String KEY_DATA_PORTCONFIG = String.format("%s.%s.%s", KEY_DATA, KEY_PORTCONFIG, KEY_PORT);
public static final String KEY_OPM = "opm-power";
public static final String KEY_OPM_XMLNS = String.format("%s %s", KEY_OPM, KEY_XMLNS);
+ public static final String KEY_DATA_OPM = String.format("%s.%s.%s", KEY_DATA, KEY_OPM, KEY_PORT);
public static final String KEY_POWER = "power";
public static final String KEY_DATA_OPM_PORT = String.format("%s.%s.%s", KEY_DATA, KEY_OPM, KEY_PORT);
public static final String OPTICAL_CAPABILITY_PREFIX
diff --git a/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisPowerConfig.java b/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisPowerConfig.java
index d382b90..eea7533 100644
--- a/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisPowerConfig.java
+++ b/drivers/polatis/netconf/src/main/java/org/onosproject/drivers/polatis/netconf/PolatisPowerConfig.java
@@ -25,6 +25,8 @@
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.slf4j.Logger;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
import static org.onosproject.drivers.polatis.netconf.PolatisOpticalUtility.POWER_MULTIPLIER;
@@ -70,12 +72,41 @@
return Optional.ofNullable(getRxPowerRange(port, component));
}
+ @Override
+ public List<PortNumber> getPorts(T component) {
+ if (component instanceof OchSignal) {
+ log.warn("Channel component is not applicable.");
+ return new ArrayList<PortNumber>();
+ }
+ log.debug("Get port config ports...");
+ return acquirePorts();
+ }
+
+ private List<PortNumber> acquirePorts() {
+ String filter = getPortPowerFilter(null);
+ String reply = netconfGet(handler(), filter);
+ List<HierarchicalConfiguration> subtrees = configsAt(reply, KEY_DATA_OPM);
+ List<PortNumber> ports = new ArrayList<PortNumber>();
+ for (HierarchicalConfiguration portConfig : subtrees) {
+ ports.add(PortNumber.portNumber(portConfig.getLong(KEY_PORTID)));
+ }
+ return ports;
+ }
+
+ /**
+ * Get the filter string for the OPM power NETCONF request.
+ *
+ * @param port the port, null to return all the opm ports
+ * @return filter string
+ */
private String getPortPowerFilter(PortNumber port) {
- return new StringBuilder(xmlOpen(KEY_OPM_XMLNS))
+ StringBuilder filter = new StringBuilder(xmlOpen(KEY_OPM_XMLNS))
.append(xmlOpen(KEY_PORT))
- .append(xmlOpen(KEY_PORTID))
- .append(port.toLong())
- .append(xmlClose(KEY_PORTID))
+ .append(xmlOpen(KEY_PORTID));
+ if (port != null) {
+ filter.append(port.toLong());
+ }
+ return filter.append(xmlClose(KEY_PORTID))
.append(xmlClose(KEY_PORT))
.append(xmlClose(KEY_OPM))
.toString();