aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java')
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java175
1 files changed, 175 insertions, 0 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java
new file mode 100644
index 00000000..b06c4228
--- /dev/null
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/net/config/basics/OpticalPortConfig.java
@@ -0,0 +1,175 @@
+package org.onosproject.net.config.basics;
+
+import java.util.Optional;
+
+import org.onosproject.net.config.Config;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.Port;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+
+/**
+ * Configurations for an optical port on a device.
+ */
+public class OpticalPortConfig extends Config<ConnectPoint> {
+ // optical type {OMS, OCH, ODUClt, fiber}
+ public static final String TYPE = "type";
+
+ // port name. "name" is the alphanumeric name of the port, but "port" refers
+ // to the port number used as a name string (i.e., for ports without
+ // alphanumeric names).
+ public static final String NAME = "name";
+ public static final String PORT = "port";
+ public static final String STATIC_PORT = "staticPort";
+ public static final String STATIC_LAMBDA = "staticLambda";
+
+ // **Linc-OE : remove if it's not needed after all.**
+ public static final String SPEED = "speed";
+
+ /**
+ * Returns the Enum value representing the type of port.
+ *
+ * @return the port type, or null if invalid or unset
+ */
+ public Port.Type type() {
+ JsonNode type = object.path(TYPE);
+ if (type.isMissingNode()) {
+ return null;
+ }
+ return Port.Type.valueOf(type.asText());
+ }
+
+ /**
+ * Returns the port name associated with this port configuration. The Name
+ * is an alphanumeric string.
+ *
+ * @return the name of this port, else, an empty string
+ */
+ public String name() {
+ return getStringValue(NAME);
+ }
+
+ /**
+ * Returns a stringified representation of the port number, configured in
+ * some port types without an alphanumeric name as the port name.
+ *
+ * @return A string representation of the port number
+ */
+ public String numberName() {
+ return getStringValue(PORT);
+ }
+
+ /**
+ * Returns the string-representation of name of the output port. This is
+ * usually an OMS port for an OCH input ports, or an OCH port for ODU input
+ * ports.
+ *
+ * @return the name of this port, else, an empty string
+ */
+ public String staticPort() {
+ return getStringValue(STATIC_PORT);
+ }
+
+ private String getStringValue(String field) {
+ JsonNode name = object.path(field);
+ return name.isMissingNode() ? "" : name.asText();
+ }
+
+ /**
+ * Returns the output lambda configured for this port. The lambda value is
+ * expressed as a frequency value. If the port type doesn't have a notion of
+ * lambdas, this returns an empty Optional.
+ *
+ * @return an Optional that may contain a frequency value.
+ */
+ public Optional<Long> staticLambda() {
+ JsonNode sl = object.path(STATIC_LAMBDA);
+ if (sl.isMissingNode()) {
+ return Optional.empty();
+ }
+ return Optional.of(sl.asLong());
+ }
+
+ /**
+ * Returns the port speed configured for this port. If the port doesn't have
+ * a notion of speed, this returns an empty Optional.
+ *
+ * @return a port speed value whose default is 0.
+ */
+ public Optional<Integer> speed() {
+ JsonNode s = object.path(SPEED);
+ if (s.isMissingNode()) {
+ return Optional.empty();
+ }
+ return Optional.of(s.asInt());
+ }
+
+ /**
+ * Sets the port type, or updates it if it's already set. A null argument removes
+ * this field.
+ *
+ * @param type the port type
+ * @return this OpticalPortConfig instance
+ */
+ public OpticalPortConfig portType(Port.Type type) {
+ // if unspecified, ideally fall back on FIBER or PACKET.
+ String pt = (type == null) ? null : type.toString();
+ return (OpticalPortConfig) setOrClear(TYPE, pt);
+ }
+
+ /**
+ * Sets the port name, or updates it if already set. A null argument removes
+ * this field.
+ *
+ * @param name the port's name
+ * @return this OpticalPortConfig instance
+ */
+ public OpticalPortConfig portName(String name) {
+ return (OpticalPortConfig) setOrClear(NAME, name);
+ }
+
+ /**
+ * Sets the port name from port number, or updates it if already set. A null
+ * argument removes this field.
+ *
+ * @param name the port number, to be used as name
+ * @return this OpticalPortConfig instance
+ */
+ public OpticalPortConfig portNumberName(Long name) {
+ return (OpticalPortConfig) setOrClear(PORT, name);
+ }
+
+ /**
+ * Sets the output port name, or updates it if already set. A null argument
+ * removes this field.
+ *
+ * @param name the output port's name
+ * @return this OpticalPortConfig instance
+ */
+ public OpticalPortConfig staticPort(String name) {
+ return (OpticalPortConfig) setOrClear(STATIC_PORT, name);
+ }
+
+ /**
+ * Sets the output lambda index, or updates it if already set. A null argument
+ * removes this field.
+ *
+ * @param index the output lambda
+ * @return this OpticalPortConfig instance
+ */
+ public OpticalPortConfig staticLambda(Long index) {
+ return (OpticalPortConfig) setOrClear(STATIC_LAMBDA, index);
+ }
+
+ /**
+ * Sets the port speed, or updates it if already set. A null argument
+ * removes this field.
+ *
+ * @param bw the port bandwidth
+ * @return this OpticalPortConfig instance
+ */
+ public OpticalPortConfig speed(Integer bw) {
+ return (OpticalPortConfig) setOrClear(SPEED, bw);
+ }
+}