Implement OFActionEnqueue (OpenFlow 1.0 only)

Realize the QUEUE Treatment using OpenFlow 1.0 Enqueue action.

The ConnectivityIntentCommand's --setQueue parameter is extended by a notion of
<port>/<queue> to support the difference from OpenFlow 1.3 Set-Queue, which is
not bound to a port.

Change-Id: I28cf70a7c004a1a3a14361e5186cfe42f09f1356
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
index 4d5b6b2..c591f47 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowEntryBuilder.java
@@ -50,6 +50,7 @@
 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
 import org.projectfloodlight.openflow.protocol.action.OFAction;
 import org.projectfloodlight.openflow.protocol.action.OFActionCircuit;
+import org.projectfloodlight.openflow.protocol.action.OFActionEnqueue;
 import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter;
 import org.projectfloodlight.openflow.protocol.action.OFActionGroup;
 import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
@@ -346,6 +347,10 @@
                     OFActionSetQueue setQueue = (OFActionSetQueue) act;
                     builder.setQueue(setQueue.getQueueId());
                     break;
+                case ENQUEUE:
+                    OFActionEnqueue enqueue = (OFActionEnqueue) act;
+                    builder.setQueue(enqueue.getQueueId(), PortNumber.portNumber(enqueue.getPort().getPortNumber()));
+                    break;
                 case STRIP_VLAN:
                 case POP_VLAN:
                     builder.popVlan();
@@ -364,7 +369,6 @@
                 case SET_NW_TOS:
                 case SET_NW_TTL:
 
-                case ENQUEUE:
                 default:
                     log.warn("Action type {} not yet implemented.", act.getType());
             }
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
index c789841..6c4ee4d 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer10.java
@@ -22,6 +22,7 @@
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.flow.instructions.Instruction;
 import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
+import org.onosproject.net.flow.instructions.Instructions.SetQueueInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
@@ -35,6 +36,7 @@
 import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
 import org.projectfloodlight.openflow.protocol.action.OFAction;
 import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
+import org.projectfloodlight.openflow.protocol.action.OFActionEnqueue;
 import org.projectfloodlight.openflow.protocol.match.Match;
 import org.projectfloodlight.openflow.types.IPv4Address;
 import org.projectfloodlight.openflow.types.MacAddress;
@@ -167,6 +169,16 @@
                 }
                 acts.add(action.build());
                 break;
+            case QUEUE:
+                SetQueueInstruction queue = (SetQueueInstruction) i;
+                if (queue.port() == null) {
+                    log.warn("Required argument 'port' undefined for OFActionEnqueue");
+                }
+                OFActionEnqueue.Builder queueBuilder = factory().actions().buildEnqueue()
+                        .setQueueId(queue.queueId())
+                        .setPort(OFPort.ofInt((int) queue.port().toLong()));
+                acts.add(queueBuilder.build());
+                break;
             case L0MODIFICATION:
             case GROUP:
             case TABLE: