Interfaces for passing port information from OF switch drivers to DeviceProviders.
Change-Id: I14039f5999c930a211c30138caf81c0513d398e2
Reference: ONOS-1911
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java
new file mode 100644
index 0000000..271e183
--- /dev/null
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowOpticalSwitch.java
@@ -0,0 +1,8 @@
+package org.onosproject.openflow.controller;
+
+/**
+ * A marker interface for optical switches, which require the ability to pass
+ * port information to a Device provider.
+ */
+public interface OpenFlowOpticalSwitch extends OpenFlowSwitch, WithTypedPorts {
+}
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java
new file mode 100644
index 0000000..b5d4743
--- /dev/null
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/PortDescPropertyType.java
@@ -0,0 +1,24 @@
+package org.onosproject.openflow.controller;
+
+/**
+ * Port description property types (OFPPDPT enums) in OF 1.3 <.
+ */
+public enum PortDescPropertyType {
+ ETHERNET(0), /* Ethernet port */
+ OPTICAL(1), /* Optical port */
+ OPTICAL_TRANSPORT(2), /* OF1.3 Optical transport extension */
+ PIPELINE_INPUT(2), /* Ingress pipeline */
+ PIPELINE_OUTPUT(3), /* Egress pipeline */
+ RECIRCULATE(4), /* Recirculation */
+ EXPERIMENTER(0xffff); /* Experimenter-implemented */
+
+ private final int value;
+
+ PortDescPropertyType(int v) {
+ value = v;
+ }
+
+ public int valueOf() {
+ return value;
+ }
+}
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java
new file mode 100644
index 0000000..b78124b
--- /dev/null
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/WithTypedPorts.java
@@ -0,0 +1,30 @@
+package org.onosproject.openflow.controller;
+
+import java.util.List;
+import java.util.Set;
+
+import org.projectfloodlight.openflow.protocol.OFObject;
+
+/**
+ * An interface implemented by OpenFlow devices that enables providers to
+ * retrieve ports based on port property.
+ */
+public interface WithTypedPorts {
+
+ /**
+ * Return a list of interfaces (ports) of the type associated with this
+ * OpenFlow switch.
+ *
+ * @param type The port description property type of requested ports
+ * @return A potentially empty list of ports.
+ */
+ List<? extends OFObject> getPortsOf(PortDescPropertyType type);
+
+ /**
+ * Returns the port property types supported by the driver implementing this
+ * interface.
+ *
+ * @return A set of port property types
+ */
+ Set<PortDescPropertyType> getPortTypes();
+}