datapath: Support masked set actions.
authorJarno Rajahalme <jrajahalme@nicira.com>
Fri, 22 May 2015 18:22:40 +0000 (11:22 -0700)
committerJarno Rajahalme <jrajahalme@nicira.com>
Fri, 22 May 2015 18:22:40 +0000 (11:22 -0700)
commitb940b3d79367b3661479367399e353dabcf9c569
treeb2b9cc9b5204d21a5cba30d9cb534adefcbd2bdb
parent048963aa8507f3627bf3c9b4cbe4be4a46845b42
datapath: Support masked set actions.

OVS kernel module support for masked set actions in already upstream
in Linux (commit 83d2b9ba1abca241df44a502b6da950a25856b5b).  This
patch adds the same for the OVS tree kernel module.

The existing set action sets many fields at once.  When only a subset
of the IP header fields, for example, should be modified, all the IP
fields need to be exact matched so that the other field values can be
copied to the set action.  A masked set action allows modification of
an arbitrary subset of the supported header bits without requiring the
rest to be matched.

Masked set action is now supported for all writeable key types, except
for the tunnel key.  The set tunnel action is an exception as any
input tunnel info is cleared before action processing starts, so there
is no tunnel info to mask.

The kernel module converts all (non-tunnel) set actions to masked set
actions.  This makes action processing more uniform, and results in
less branching and duplicating the action processing code.  When
returning actions to userspace, the conversion is inverted.  We use a
kernel internal action code to be able to tell the userspace provided
and converted masked set actions apart.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
datapath/actions.c
datapath/flow_netlink.c
datapath/linux/compat/include/linux/openvswitch.h