aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorYifeng Sun <pkusunyifeng@gmail.com>2018-07-02 11:18:03 -0400
committerDavid S. Miller <davem@davemloft.net>2018-07-07 22:13:25 -0400
commitb233504033dbd65740e59681820ccfd0a2a8ec53 (patch)
tree345441a88e44d3c9f0fd59327c4b2c138367f1e8 /include
parent20fbdc35723f0b3e1a0d2948960244f9721d1646 (diff)
openvswitch: kernel datapath clone action
Add 'clone' action to kernel datapath by using existing functions. When actions within clone don't modify the current flow, the flow key is not cloned before executing clone actions. This is a follow up patch for this incomplete work: https://patchwork.ozlabs.org/patch/722096/ v1 -> v2: Refactor as advised by reviewer. Signed-off-by: Yifeng Sun <pkusunyifeng@gmail.com> Signed-off-by: Andy Zhou <azhou@ovn.org> Acked-by: Pravin B Shelar <pshelar@ovn.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/openvswitch.h5
-rw-r--r--include/uapi/linux/openvswitch.h3
2 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h
index e6b240b6196c..379affc63e24 100644
--- a/include/linux/openvswitch.h
+++ b/include/linux/openvswitch.h
@@ -21,4 +21,9 @@
21 21
22#include <uapi/linux/openvswitch.h> 22#include <uapi/linux/openvswitch.h>
23 23
24#define OVS_CLONE_ATTR_EXEC 0 /* Specify an u32 value. When nonzero,
25 * actions in clone will not change flow
26 * keys. False otherwise.
27 */
28
24#endif /* _LINUX_OPENVSWITCH_H */ 29#endif /* _LINUX_OPENVSWITCH_H */
diff --git a/include/uapi/linux/openvswitch.h b/include/uapi/linux/openvswitch.h
index 863aabaa5cc9..dbe0cbe4f1b7 100644
--- a/include/uapi/linux/openvswitch.h
+++ b/include/uapi/linux/openvswitch.h
@@ -840,6 +840,8 @@ struct ovs_action_push_eth {
840 * @OVS_ACTION_ATTR_POP_NSH: pop the outermost NSH header off the packet. 840 * @OVS_ACTION_ATTR_POP_NSH: pop the outermost NSH header off the packet.
841 * @OVS_ACTION_ATTR_METER: Run packet through a meter, which may drop the 841 * @OVS_ACTION_ATTR_METER: Run packet through a meter, which may drop the
842 * packet, or modify the packet (e.g., change the DSCP field). 842 * packet, or modify the packet (e.g., change the DSCP field).
843 * @OVS_ACTION_ATTR_CLONE: make a copy of the packet and execute a list of
844 * actions without affecting the original packet and key.
843 * 845 *
844 * Only a single header can be set with a single %OVS_ACTION_ATTR_SET. Not all 846 * Only a single header can be set with a single %OVS_ACTION_ATTR_SET. Not all
845 * fields within a header are modifiable, e.g. the IPv4 protocol and fragment 847 * fields within a header are modifiable, e.g. the IPv4 protocol and fragment
@@ -873,6 +875,7 @@ enum ovs_action_attr {
873 OVS_ACTION_ATTR_PUSH_NSH, /* Nested OVS_NSH_KEY_ATTR_*. */ 875 OVS_ACTION_ATTR_PUSH_NSH, /* Nested OVS_NSH_KEY_ATTR_*. */
874 OVS_ACTION_ATTR_POP_NSH, /* No argument. */ 876 OVS_ACTION_ATTR_POP_NSH, /* No argument. */
875 OVS_ACTION_ATTR_METER, /* u32 meter ID. */ 877 OVS_ACTION_ATTR_METER, /* u32 meter ID. */
878 OVS_ACTION_ATTR_CLONE, /* Nested OVS_CLONE_ATTR_*. */
876 879
877 __OVS_ACTION_ATTR_MAX, /* Nothing past this will be accepted 880 __OVS_ACTION_ATTR_MAX, /* Nothing past this will be accepted
878 * from userspace. */ 881 * from userspace. */