From: Simon Horman Date: Fri, 30 Nov 2012 01:04:06 +0000 (+0900) Subject: ofp-actions: Add OpenFlow1.1+ Set Queue action X-Git-Tag: sliver-openvswitch-1.9.90-3~10^2~132 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=276c4e7a24a9440bb5977e29ddb617c025f9fd60;p=sliver-openvswitch.git ofp-actions: Add OpenFlow1.1+ Set Queue action Signed-off-by: Simon Horman Signed-off-by: Ben Pfaff --- diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c index 170e796fa..564e4206e 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c @@ -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: diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c index d64d461ea..65f023a39 100644 --- a/lib/ofp-parse.c +++ b/lib/ofp-parse.c @@ -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); diff --git a/lib/ofp-util.def b/lib/ofp-util.def index 39575ba7a..421adb154 100644 --- a/lib/ofp-util.def +++ b/lib/ofp-util.def @@ -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") diff --git a/tests/ofp-actions.at b/tests/ofp-actions.at index e232435e0..f30fa06cd 100644 --- a/tests/ofp-actions.at +++ b/tests/ofp-actions.at @@ -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