diff --git a/NEWS b/NEWS index b376420c25e..3c206f76047 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,7 @@ Post-v2.5.0 * New command OFPGC_ADD_OR_MOD for OFPT_GROUP_MOD message that adds a new group or modifies an existing groups * New OpenFlow extension to support the "group" action in OpenFlow 1.0. + * OpenFlow 1.0 "enqueue" action now properly translated to OpenFlow 1.1+. - ovs-ofctl: * queue-get-config command now allows a queue ID to be specified. * '--bundle' option can now be used with OpenFlow 1.3. diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c index 0aafe0a06da..4ac284f9f6b 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c @@ -990,7 +990,13 @@ encode_ENQUEUE(const struct ofpact_enqueue *enqueue, oae->port = htons(ofp_to_u16(enqueue->port)); oae->queue_id = htonl(enqueue->queue); } else { - /* XXX */ + put_OFPAT_SET_QUEUE(out, ofp_version, enqueue->queue); + + struct ofp11_action_output *oao = put_OFPAT11_OUTPUT(out); + oao->port = ofputil_port_to_ofp11(enqueue->port); + oao->max_len = OVS_BE16_MAX; + + put_NXAST_POP_QUEUE(out); } } diff --git a/tests/ofp-actions.at b/tests/ofp-actions.at index 23d32021936..a3b4ccf874a 100644 --- a/tests/ofp-actions.at +++ b/tests/ofp-actions.at @@ -751,3 +751,20 @@ NXST_FLOW reply: ]) OVS_VSWITCHD_STOP AT_CLEANUP + +AT_SETUP([enqueue action for OF1.1+]) +AT_KEYWORDS([ofp-actions]) +OVS_VSWITCHD_START +dnl OpenFlow 1.0 has an "enqueue" action. For OpenFlow 1.1+, we translate +dnl it to a series of actions that accomplish the same thing. +AT_CHECK([ovs-ofctl -O OpenFlow10 add-flow br0 'actions=enqueue(123,456)']) +AT_CHECK([ovs-ofctl -O OpenFlow10 dump-flows br0 | ofctl_strip], [0], [dnl +NXST_FLOW reply: + actions=enqueue:123:456 +]) +AT_CHECK([ovs-ofctl -O OpenFlow13 dump-flows br0 | ofctl_strip], [0], [dnl +OFPST_FLOW reply (OF1.3): + reset_counts actions=set_queue:456,output:123,pop_queue +]) +OVS_VSWITCHD_STOP +AT_CLEANUP