Add range checking methods to PowerConfig
Change-Id: I8c113df90a8225db34256856cb2eb80ee7d68a9e
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 21254aa1..8e45767 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
@@ -15,6 +15,8 @@
*/
package org.onosproject.net.behaviour;
+import com.google.common.annotations.Beta;
+import com.google.common.collect.Range;
import org.onosproject.net.PortNumber;
import org.onosproject.net.driver.HandlerBehaviour;
@@ -29,6 +31,7 @@
*
* Power levels are specified with a long and unit .01 dBm.
*/
+@Beta
public interface PowerConfig<T> extends HandlerBehaviour {
/**
@@ -43,7 +46,6 @@
/**
* Set the target power on the component.
*
- *
* @param port the port
* @param component the port component
* @param power target power in .01 dBm
@@ -58,4 +60,31 @@
* @return power power in .01 dBm
*/
Optional<Long> currentPower(PortNumber port, T component);
+
+ /**
+ * Get the acceptable target power range for setTargetPower,
+ * as optical components have different configurable output power ranges.
+ *
+ * @param port the port
+ * @param component the port component
+ * @return the accepted target power range, null if the component's power is
+ * not configurable. For example the port target power can only be set on TX ports.
+ */
+ default Optional<Range<Long>> getTargetPowerRange(PortNumber port, T component) {
+ return Optional.empty();
+ }
+
+ /**
+ * Get the expected input power range for the component,
+ * as optical components have different working input power ranges.
+ *
+ * @param port the port
+ * @param component the port component
+ * @return the expected input power range, null if the component does not have
+ * a specified input power range. For example input power range only applies
+ * to RX ports.
+ */
+ default Optional<Range<Long>> getInputPowerRange(PortNumber port, T component) {
+ return Optional.empty();
+ }
}