ofp-actions: Add OpenFlow1.1+ Set Queue action
authorSimon Horman <horms@verge.net.au>
Fri, 30 Nov 2012 01:04:06 +0000 (10:04 +0900)
committerBen Pfaff <blp@nicira.com>
Fri, 30 Nov 2012 21:32:10 +0000 (13:32 -0800)
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/ofp-actions.c
lib/ofp-parse.c
lib/ofp-util.def
tests/ofp-actions.at

index 170e796..564e420 100644 (file)
@@ -727,6 +727,11 @@ ofpact_from_openflow11(const union ofp_action *a, struct ofpbuf *out)
         ofpact_put_STRIP_VLAN(out);
         break;
 
+    case OFPUTIL_OFPAT11_SET_QUEUE:
+        ofpact_put_SET_QUEUE(out)->queue_id =
+            ntohl(((const struct ofp11_action_set_queue *)a)->queue_id);
+        break;
+
     case OFPUTIL_OFPAT11_SET_DL_SRC:
         memcpy(ofpact_put_SET_ETH_SRC(out)->mac,
                ((const struct ofp_action_dl_addr *) a)->dl_addr, ETH_ADDR_LEN);
@@ -1566,6 +1571,11 @@ ofpact_to_openflow11(const struct ofpact *a, struct ofpbuf *out)
             htons(ETH_TYPE_VLAN_8021Q);
         break;
 
+    case OFPACT_SET_QUEUE:
+        ofputil_put_OFPAT11_SET_QUEUE(out)->queue_id
+            = htonl(ofpact_get_SET_QUEUE(a)->queue_id);
+        break;
+
     case OFPACT_SET_ETH_SRC:
         memcpy(ofputil_put_OFPAT11_SET_DL_SRC(out)->dl_addr,
                ofpact_get_SET_ETH_SRC(a)->mac, ETH_ADDR_LEN);
@@ -1619,7 +1629,6 @@ ofpact_to_openflow11(const struct ofpact *a, struct ofpbuf *out)
     case OFPACT_REG_MOVE:
     case OFPACT_REG_LOAD:
     case OFPACT_SET_TUNNEL:
-    case OFPACT_SET_QUEUE:
     case OFPACT_POP_QUEUE:
     case OFPACT_FIN_TIMEOUT:
     case OFPACT_RESUBMIT:
index d64d461..65f023a 100644 (file)
@@ -434,6 +434,11 @@ parse_named_action(enum ofputil_action_code code, const struct flow *flow,
         ofpact_put_PUSH_VLAN(ofpacts);
         break;
 
+    case OFPUTIL_OFPAT11_SET_QUEUE:
+        ofpact_put_SET_QUEUE(ofpacts)->queue_id = str_to_u32(arg);
+        break;
+
+
     case OFPUTIL_OFPAT10_SET_DL_SRC:
     case OFPUTIL_OFPAT11_SET_DL_SRC:
         str_to_mac(arg, ofpact_put_SET_ETH_SRC(ofpacts)->mac);
index 39575ba..421adb1 100644 (file)
@@ -32,7 +32,7 @@ OFPAT11_ACTION(OFPAT11_SET_TP_SRC,   ofp_action_tp_port,  0, "mod_tp_src")
 OFPAT11_ACTION(OFPAT11_SET_TP_DST,   ofp_action_tp_port,  0, "mod_tp_dst")
 OFPAT11_ACTION(OFPAT11_PUSH_VLAN,    ofp11_action_push,   0, "push_vlan")
 OFPAT11_ACTION(OFPAT11_POP_VLAN,     ofp_action_header,   0, "pop_vlan")
-//OFPAT11_ACTION(OFPAT11_SET_QUEUE,    ofp11_action_set_queue, 0, "set_queue")
+OFPAT11_ACTION(OFPAT11_SET_QUEUE,    ofp11_action_set_queue, 0, "set_queue")
 //OFPAT11_ACTION(OFPAT11_SET_NW_TTL,   ofp11_action_nw_ttl, 0, "set_nw_ttl")
 OFPAT11_ACTION(OFPAT11_DEC_NW_TTL,   ofp_action_header,   0, NULL)
 OFPAT11_ACTION(OFPAT12_SET_FIELD,    ofp12_action_set_field, 1, "set_field")
index e232435..f30fa06 100644 (file)
@@ -169,6 +169,9 @@ AT_DATA([test-data], [dnl
 # actions=strip_vlan
 0012 0008 00000000
 
+# actions=set_queue:2309737729
+0015 0008 89abcd01
+
 dnl 802.1ad isn't supported at the moment
 dnl # actions=push_vlan:0x88a8
 dnl 0011 0008 88a8 0000
@@ -181,9 +184,6 @@ ffff 0010 00002320 0001 0005 00000000
 # actions=set_tunnel:0x12345678
 ffff 0010 00002320 0002 0000 12345678
 
-# actions=set_queue:2309737729
-ffff 0010 00002320 0004 0000 89abcd01
-
 # actions=pop_queue
 ffff 0010 00002320 0005 000000000000