Currently, if any field in IP header is set with a set action, all the IP header fields need to be matched exactly in the megaflow. This series adds support for masked set actions, requiring only the header bits actually read or set to be matched exactly by the resulting megaflow.
As an example, consider how the IP TTL decrement is implemented with OVS: OVS userspace flow translation code reads the incoming TTL value, decrements it, and if non-zero, generates a set action that writes the new value to the IP header. Prior to this patch it was impossible to write just the ttl field, and all the field values were written. The other than ttl values included in the set action are copied from the incoming IP header, and thus the action is only valid for only a packet having those header values. Thus the megaflow must match all the IP header fields exactly, lest the action be performed on some other IP header field values. After this patch, only the ttl field is written, and all other IP header fields can be wildcarded by the megaflow. As it may be apparent, fields that are set without reading their values could also be left wildcarded to get even better megaflows. Work to that end involves bigger changes in the OVS userspace flow translation code, and is in progress. Jarno Rajahalme (10): lib/ofp-actions: Silently discard set ip ecn/ttl actions on OpenFlow10. ofproto: Fix wildcard masking with nw_tos. Tests: Fix ofproto/trace and expose megaflows when having a set action. ofproto/xlate: Fix set field unwildcarding. lib/odp: Masked set action execution and printing. ofproto: Probe for masked set action support. lib/odp: Use masked set actions. openvswithch.h: Clarify use of key attributes. datapath: Allow masks for set actions. Clarify tunnel wildcarding. datapath/actions.c | 218 ++++++++++++++----- datapath/flow_netlink.c | 51 ++++- include/linux/openvswitch.h | 16 +- lib/odp-execute.c | 241 +++++++++++++++++---- lib/odp-util.c | 486 +++++++++++++++++++++++++++++------------- lib/odp-util.h | 8 +- lib/ofp-actions.c | 4 +- ofproto/ofproto-dpif-xlate.c | 39 +++- ofproto/ofproto-dpif-xlate.h | 3 +- ofproto/ofproto-dpif.c | 80 ++++++- ofproto/tunnel.c | 44 ++-- tests/ofproto-dpif.at | 63 +++--- tests/tunnel.at | 20 +- 13 files changed, 945 insertions(+), 328 deletions(-) -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev