aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux/openvswitch.h
diff options
context:
space:
mode:
authorYi Yang <yi.y.yang@intel.com>2017-11-07 08:07:02 -0500
committerDavid S. Miller <davem@davemloft.net>2017-11-08 02:12:33 -0500
commitb2d0f5d5dc53532e6f07bc546a476a55ebdfe0f3 (patch)
tree120c5e89b96cc86a85c77e81cdbb42c3db08cc70 /include/uapi/linux/openvswitch.h
parent7f5d3f2721b07ab5896526c5992edd2ab1665561 (diff)
openvswitch: enable NSH support
v16->17 - Fixed disputed check code: keep them in nsh_push and nsh_pop but also add them in __ovs_nla_copy_actions v15->v16 - Add csum recalculation for nsh_push, nsh_pop and set_nsh pointed out by Pravin - Move nsh key into the union with ipv4 and ipv6 and add check for nsh key in match_validate pointed out by Pravin - Add nsh check in validate_set and __ovs_nla_copy_actions v14->v15 - Check size in nsh_hdr_from_nlattr - Fixed four small issues pointed out By Jiri and Eric v13->v14 - Rename skb_push_nsh to nsh_push per Dave's comment - Rename skb_pop_nsh to nsh_pop per Dave's comment v12->v13 - Fix NSH header length check in set_nsh v11->v12 - Fix missing changes old comments pointed out - Fix new comments for v11 v10->v11 - Fix the left three disputable comments for v9 but not fixed in v10. v9->v10 - Change struct ovs_key_nsh to struct ovs_nsh_key_base base; __be32 context[NSH_MD1_CONTEXT_SIZE]; - Fix new comments for v9 v8->v9 - Fix build error reported by daily intel build because nsh module isn't selected by openvswitch v7->v8 - Rework nested value and mask for OVS_KEY_ATTR_NSH - Change pop_nsh to adapt to nsh kernel module - Fix many issues per comments from Jiri Benc v6->v7 - Remove NSH GSO patches in v6 because Jiri Benc reworked it as another patch series and they have been merged. - Change it to adapt to nsh kernel module added by NSH GSO patch series v5->v6 - Fix the rest comments for v4. - Add NSH GSO support for VxLAN-gpe + NSH and Eth + NSH. v4->v5 - Fix many comments by Jiri Benc and Eric Garver for v4. v3->v4 - Add new NSH match field ttl - Update NSH header to the latest format which will be final format and won't change per its author's confirmation. - Fix comments for v3. v2->v3 - Change OVS_KEY_ATTR_NSH to nested key to handle length-fixed attributes and length-variable attriubte more flexibly. - Remove struct ovs_action_push_nsh completely - Add code to handle nested attribute for SET_MASKED - Change PUSH_NSH to use the nested OVS_KEY_ATTR_NSH to transfer NSH header data. - Fix comments and coding style issues by Jiri and Eric v1->v2 - Change encap_nsh and decap_nsh to push_nsh and pop_nsh - Dynamically allocate struct ovs_action_push_nsh for length-variable metadata. OVS master and 2.8 branch has merged NSH userspace patch series, this patch is to enable NSH support in kernel data path in order that OVS can support NSH in compat mode by porting this. Signed-off-by: Yi Yang <yi.y.yang@intel.com> Acked-by: Jiri Benc <jbenc@redhat.com> Acked-by: Eric Garver <e@erig.me> Acked-by: Pravin Shelar <pshelar@ovn.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/uapi/linux/openvswitch.h')
-rw-r--r--include/uapi/linux/openvswitch.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/include/uapi/linux/openvswitch.h b/include/uapi/linux/openvswitch.h
index 501e4c4e2a03..ec75a685f1dd 100644
--- a/include/uapi/linux/openvswitch.h
+++ b/include/uapi/linux/openvswitch.h
@@ -336,6 +336,7 @@ enum ovs_key_attr {
336 OVS_KEY_ATTR_CT_LABELS, /* 16-octet connection tracking label */ 336 OVS_KEY_ATTR_CT_LABELS, /* 16-octet connection tracking label */
337 OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4, /* struct ovs_key_ct_tuple_ipv4 */ 337 OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4, /* struct ovs_key_ct_tuple_ipv4 */
338 OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6, /* struct ovs_key_ct_tuple_ipv6 */ 338 OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6, /* struct ovs_key_ct_tuple_ipv6 */
339 OVS_KEY_ATTR_NSH, /* Nested set of ovs_nsh_key_* */
339 340
340#ifdef __KERNEL__ 341#ifdef __KERNEL__
341 OVS_KEY_ATTR_TUNNEL_INFO, /* struct ip_tunnel_info */ 342 OVS_KEY_ATTR_TUNNEL_INFO, /* struct ip_tunnel_info */
@@ -495,6 +496,30 @@ struct ovs_key_ct_tuple_ipv6 {
495 __u8 ipv6_proto; 496 __u8 ipv6_proto;
496}; 497};
497 498
499enum ovs_nsh_key_attr {
500 OVS_NSH_KEY_ATTR_UNSPEC,
501 OVS_NSH_KEY_ATTR_BASE, /* struct ovs_nsh_key_base. */
502 OVS_NSH_KEY_ATTR_MD1, /* struct ovs_nsh_key_md1. */
503 OVS_NSH_KEY_ATTR_MD2, /* variable-length octets for MD type 2. */
504 __OVS_NSH_KEY_ATTR_MAX
505};
506
507#define OVS_NSH_KEY_ATTR_MAX (__OVS_NSH_KEY_ATTR_MAX - 1)
508
509struct ovs_nsh_key_base {
510 __u8 flags;
511 __u8 ttl;
512 __u8 mdtype;
513 __u8 np;
514 __be32 path_hdr;
515};
516
517#define NSH_MD1_CONTEXT_SIZE 4
518
519struct ovs_nsh_key_md1 {
520 __be32 context[NSH_MD1_CONTEXT_SIZE];
521};
522
498/** 523/**
499 * enum ovs_flow_attr - attributes for %OVS_FLOW_* commands. 524 * enum ovs_flow_attr - attributes for %OVS_FLOW_* commands.
500 * @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* attributes specifying the flow 525 * @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* attributes specifying the flow
@@ -811,6 +836,8 @@ struct ovs_action_push_eth {
811 * @OVS_ACTION_ATTR_POP_ETH: Pop the outermost Ethernet header off the 836 * @OVS_ACTION_ATTR_POP_ETH: Pop the outermost Ethernet header off the
812 * packet. 837 * packet.
813 * @OVS_ACTION_ATTR_CT_CLEAR: Clear conntrack state from the packet. 838 * @OVS_ACTION_ATTR_CT_CLEAR: Clear conntrack state from the packet.
839 * @OVS_ACTION_ATTR_PUSH_NSH: push NSH header to the packet.
840 * @OVS_ACTION_ATTR_POP_NSH: pop the outermost NSH header off the packet.
814 * 841 *
815 * Only a single header can be set with a single %OVS_ACTION_ATTR_SET. Not all 842 * Only a single header can be set with a single %OVS_ACTION_ATTR_SET. Not all
816 * fields within a header are modifiable, e.g. the IPv4 protocol and fragment 843 * fields within a header are modifiable, e.g. the IPv4 protocol and fragment
@@ -841,6 +868,8 @@ enum ovs_action_attr {
841 OVS_ACTION_ATTR_PUSH_ETH, /* struct ovs_action_push_eth. */ 868 OVS_ACTION_ATTR_PUSH_ETH, /* struct ovs_action_push_eth. */
842 OVS_ACTION_ATTR_POP_ETH, /* No argument. */ 869 OVS_ACTION_ATTR_POP_ETH, /* No argument. */
843 OVS_ACTION_ATTR_CT_CLEAR, /* No argument. */ 870 OVS_ACTION_ATTR_CT_CLEAR, /* No argument. */
871 OVS_ACTION_ATTR_PUSH_NSH, /* Nested OVS_NSH_KEY_ATTR_*. */
872 OVS_ACTION_ATTR_POP_NSH, /* No argument. */
844 873
845 __OVS_ACTION_ATTR_MAX, /* Nothing past this will be accepted 874 __OVS_ACTION_ATTR_MAX, /* Nothing past this will be accepted
846 * from userspace. */ 875 * from userspace. */