1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
2 /*
3  * Copyright (c) 2016, Amir Vadai <amir@vadai.me>
4  * Copyright (c) 2016, Mellanox Technologies. All rights reserved.
5  */
6 
7 #ifndef __LINUX_TC_TUNNEL_KEY_H
8 #define __LINUX_TC_TUNNEL_KEY_H
9 
10 #include <linux/pkt_cls.h>
11 
12 #define TCA_TUNNEL_KEY_ACT_SET	    1
13 #define TCA_TUNNEL_KEY_ACT_RELEASE  2
14 
15 struct tc_tunnel_key {
16 	tc_gen;
17 	int t_action;
18 };
19 
20 enum {
21 	TCA_TUNNEL_KEY_UNSPEC,
22 	TCA_TUNNEL_KEY_TM,
23 	TCA_TUNNEL_KEY_PARMS,
24 	TCA_TUNNEL_KEY_ENC_IPV4_SRC,	/* be32 */
25 	TCA_TUNNEL_KEY_ENC_IPV4_DST,	/* be32 */
26 	TCA_TUNNEL_KEY_ENC_IPV6_SRC,	/* struct in6_addr */
27 	TCA_TUNNEL_KEY_ENC_IPV6_DST,	/* struct in6_addr */
28 	TCA_TUNNEL_KEY_ENC_KEY_ID,	/* be64 */
29 	TCA_TUNNEL_KEY_PAD,
30 	TCA_TUNNEL_KEY_ENC_DST_PORT,	/* be16 */
31 	TCA_TUNNEL_KEY_NO_CSUM,		/* u8 */
32 	TCA_TUNNEL_KEY_ENC_OPTS,	/* Nested TCA_TUNNEL_KEY_ENC_OPTS_
33 					 * attributes
34 					 */
35 	TCA_TUNNEL_KEY_ENC_TOS,		/* u8 */
36 	TCA_TUNNEL_KEY_ENC_TTL,		/* u8 */
37 	TCA_TUNNEL_KEY_NO_FRAG,		/* flag */
38 	__TCA_TUNNEL_KEY_MAX,
39 };
40 
41 #define TCA_TUNNEL_KEY_MAX (__TCA_TUNNEL_KEY_MAX - 1)
42 
43 enum {
44 	TCA_TUNNEL_KEY_ENC_OPTS_UNSPEC,
45 	TCA_TUNNEL_KEY_ENC_OPTS_GENEVE,		/* Nested
46 						 * TCA_TUNNEL_KEY_ENC_OPTS_
47 						 * attributes
48 						 */
49 	TCA_TUNNEL_KEY_ENC_OPTS_VXLAN,		/* Nested
50 						 * TCA_TUNNEL_KEY_ENC_OPTS_
51 						 * attributes
52 						 */
53 	TCA_TUNNEL_KEY_ENC_OPTS_ERSPAN,		/* Nested
54 						 * TCA_TUNNEL_KEY_ENC_OPTS_
55 						 * attributes
56 						 */
57 	__TCA_TUNNEL_KEY_ENC_OPTS_MAX,
58 };
59 
60 #define TCA_TUNNEL_KEY_ENC_OPTS_MAX (__TCA_TUNNEL_KEY_ENC_OPTS_MAX - 1)
61 
62 enum {
63 	TCA_TUNNEL_KEY_ENC_OPT_GENEVE_UNSPEC,
64 	TCA_TUNNEL_KEY_ENC_OPT_GENEVE_CLASS,		/* be16 */
65 	TCA_TUNNEL_KEY_ENC_OPT_GENEVE_TYPE,		/* u8 */
66 	TCA_TUNNEL_KEY_ENC_OPT_GENEVE_DATA,		/* 4 to 128 bytes */
67 
68 	__TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX,
69 };
70 
71 #define TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX \
72 	(__TCA_TUNNEL_KEY_ENC_OPT_GENEVE_MAX - 1)
73 
74 enum {
75 	TCA_TUNNEL_KEY_ENC_OPT_VXLAN_UNSPEC,
76 	TCA_TUNNEL_KEY_ENC_OPT_VXLAN_GBP,		/* u32 */
77 	__TCA_TUNNEL_KEY_ENC_OPT_VXLAN_MAX,
78 };
79 
80 #define TCA_TUNNEL_KEY_ENC_OPT_VXLAN_MAX \
81 	(__TCA_TUNNEL_KEY_ENC_OPT_VXLAN_MAX - 1)
82 
83 enum {
84 	TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_UNSPEC,
85 	TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_VER,		/* u8 */
86 	TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_INDEX,		/* be32 */
87 	TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_DIR,		/* u8 */
88 	TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_HWID,		/* u8 */
89 	__TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_MAX,
90 };
91 
92 #define TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_MAX \
93 	(__TCA_TUNNEL_KEY_ENC_OPT_ERSPAN_MAX - 1)
94 
95 #endif
96