125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __LINUX_PKT_CLS_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __LINUX_PKT_CLS_H
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/pkt_sched.h>
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
80543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TC_COOKIE_MAX_SIZE 16
912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Action attributes */
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_UNSPEC,
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_KIND,
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_OPTIONS,
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_INDEX,
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_STATS,
17ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_ACT_PAD,
180543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_ACT_COOKIE,
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_ACT_MAX
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_MAX __TCA_ACT_MAX
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_MAX_PRIO 32
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_BIND	1
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOBIND	0
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_UNBIND	1
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOUNBIND	0
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_REPLACE		1
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOREPLACE	0
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_UNSPEC	(-1)
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_OK		0
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_RECLASSIFY	1
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_SHOT		2
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_PIPE		3
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_STOLEN		4
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_QUEUED		5
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_REPEAT		6
4012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define TC_ACT_REDIRECT		7
4125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TC_ACT_TRAP		8 /* For hw path, this means "trap to cpu"
4225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris				   * and don't further process the frame
4325981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris				   * in hardware. For sw path, this is
4425981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris				   * equivalent of TC_ACT_STOLEN - drop
4525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris				   * the skb and act like everything
4625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris				   * is alright.
4725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris				   */
480543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris
490543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris/* There is a special kind of actions called "extended actions",
500543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * which need a value parameter. These have a local opcode located in
510543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * the highest nibble, starting from 1. The rest of the bits
520543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * are used to carry the value. These two parts together make
530543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris * a combined opcode.
540543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris */
550543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define __TC_ACT_EXT_SHIFT 28
560543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
570543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
580543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TC_ACT_EXT_CMP(combined, opcode) \
590543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	(((combined) & (~TC_ACT_EXT_VAL_MASK)) == opcode)
600543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris
610543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TC_ACT_JUMP __TC_ACT_EXT(1)
6225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Action type identifiers*/
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ID_UNSPEC=0,
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ID_POLICE=1,
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* other actions go here */
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_ID_MAX=255
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ID_MAX __TCA_ID_MAX
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_police {
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			index;
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int			action;
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_UNSPEC	TC_ACT_UNSPEC
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_OK		TC_ACT_OK
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_RECLASSIFY	TC_ACT_RECLASSIFY
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_SHOT		TC_ACT_SHOT
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_PIPE		TC_ACT_PIPE
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			limit;
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			burst;
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			mtu;
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_ratespec	rate;
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_ratespec	peakrate;
886e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	int			refcnt;
896e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	int			bindcnt;
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			capab;
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_t {
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64   install;
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64   lastuse;
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64   expires;
976e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	__u64   firstuse;
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_cnt {
1016e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	int                   refcnt;
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   bindcnt;
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define tc_gen \
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32                 index; \
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32                 capab; \
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   action; \
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   refcnt; \
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   bindcnt
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_UNSPEC,
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_TBF,
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_RATE,
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_PEAKRATE,
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_AVRATE,
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_RESULT,
119ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_POLICE_TM,
120ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_POLICE_PAD,
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_POLICE_MAX
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_POLICE_RESULT TCA_POLICE_RESULT
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
127ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris/* tca flags definitions */
1280543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TCA_CLS_FLAGS_SKIP_HW	(1 << 0) /* don't offload filter to HW */
1290543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TCA_CLS_FLAGS_SKIP_SW	(1 << 1) /* don't use filter in SW */
1300543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TCA_CLS_FLAGS_IN_HW	(1 << 2) /* filter is offloaded to HW */
1310543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */
132ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* U32 filters */
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_HTID(h) ((h)&0xFFF00000)
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_HASH(h) (((h)>>12)&0xFF)
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_NODE(h) ((h)&0xFFF)
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_KEY(h) ((h)&0xFFFFF)
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_UNSPEC	0
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_ROOT	(0xFFF00000)
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_UNSPEC,
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_CLASSID,
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_HASH,
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_LINK,
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_DIVISOR,
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_SEL,
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_POLICE,
151ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_U32_ACT,
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_INDEV,
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_PCNT,
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_MARK,
155ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_U32_FLAGS,
156ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_U32_PAD,
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_U32_MAX
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_U32_MAX (__TCA_U32_MAX - 1)
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_key {
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be32		mask;
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be32		val;
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		off;
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		offmask;
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_sel {
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		flags;
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		offshift;
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		nkeys;
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be16			offmask;
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16			off;
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short			offoff;
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short			hoff;
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be32			hmask;
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_u32_key	keys[0];
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_mark {
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		val;
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		mask;
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		success;
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_pcnt {
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 rcnt;
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 rhit;
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 kcnts[0];
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Flags */
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_TERMINAL		1
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_OFFSET		2
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_VAROFFSET	4
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_EAT		8
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_MAXDEPTH 8
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RSVP filter */
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_UNSPEC,
209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_CLASSID,
210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_DST,
211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_SRC,
212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_PINFO,
213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_POLICE,
214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_ACT,
215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_RSVP_MAX
216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_rsvp_gpi {
221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	key;
222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	mask;
223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int	offset;
224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_rsvp_pinfo {
227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_rsvp_gpi dpi;
228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_rsvp_gpi spi;
229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	protocol;
230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	tunnelid;
231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	tunnelhdr;
232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	pad;
233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* ROUTE filter */
236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_UNSPEC,
239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_CLASSID,
240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_TO,
241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_FROM,
242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_IIF,
243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_POLICE,
244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_ACT,
245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_ROUTE4_MAX
246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* FW filter */
252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_UNSPEC,
255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_CLASSID,
256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_POLICE,
257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_INDEV, /*  used by CONFIG_NET_CLS_IND */
258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_MASK,
260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_FW_MAX
261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_FW_MAX (__TCA_FW_MAX - 1)
264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* TC index filter */
266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_UNSPEC,
269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_HASH,
270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_MASK,
271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_SHIFT,
272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_FALL_THROUGH,
273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_CLASSID,
274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_POLICE,
275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_ACT,
276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_TCINDEX_MAX
277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1)
280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Flow filter */
282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_SRC,
285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_DST,
286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PROTO,
287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PROTO_SRC,
288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PROTO_DST,
289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_IIF,
290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PRIORITY,
291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_MARK,
292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT,
293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_SRC,
294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_DST,
295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_PROTO_SRC,
296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_PROTO_DST,
297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_RTCLASSID,
298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_SKUID,
299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_SKGID,
300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_VLAN_TAG,
301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_RXHASH,
302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__FLOW_KEY_MAX,
303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FLOW_KEY_MAX	(__FLOW_KEY_MAX - 1)
306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_MODE_MAP,
309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_MODE_HASH,
310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_UNSPEC,
314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_KEYS,
315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_MODE,
316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_BASECLASS,
317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_RSHIFT,
318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_ADDEND,
319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_MASK,
320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_XOR,
321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_DIVISOR,
322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_ACT,
323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_POLICE,
324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_EMATCHES,
325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_PERTURB,
326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_FLOW_MAX
327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_FLOW_MAX	(__TCA_FLOW_MAX - 1)
330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Basic filter */
332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_UNSPEC,
335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_CLASSID,
336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_EMATCHES,
337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_ACT,
338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_POLICE,
339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_BASIC_MAX
340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Cgroup classifier */
346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_UNSPEC,
349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_ACT,
350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_POLICE,
351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_EMATCHES,
352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_CGROUP_MAX,
353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
357e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris/* BPF classifier */
358e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
35912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define TCA_BPF_FLAG_ACT_DIRECT		(1 << 0)
36012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
361e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferrisenum {
362e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_UNSPEC,
363e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_ACT,
364e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_POLICE,
365e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_CLASSID,
366e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_OPS_LEN,
367e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_OPS,
36812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_BPF_FD,
36912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_BPF_NAME,
37012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_BPF_FLAGS,
3713318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_BPF_FLAGS_GEN,
3722fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_BPF_TAG,
37325981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_BPF_ID,
374e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__TCA_BPF_MAX,
375e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris};
376e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
377e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
378e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
37912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* Flower classifier */
38012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
38112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferrisenum {
38212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_UNSPEC,
38312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_CLASSID,
38412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_INDEV,
38512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_ACT,
38612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_ETH_DST,		/* ETH_ALEN */
38712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_ETH_DST_MASK,	/* ETH_ALEN */
38812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_ETH_SRC,		/* ETH_ALEN */
38912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_ETH_SRC_MASK,	/* ETH_ALEN */
39012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_ETH_TYPE,	/* be16 */
39112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IP_PROTO,	/* u8 */
39212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV4_SRC,	/* be32 */
39312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV4_SRC_MASK,	/* be32 */
39412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV4_DST,	/* be32 */
39512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV4_DST_MASK,	/* be32 */
39612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV6_SRC,	/* struct in6_addr */
39712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV6_SRC_MASK,	/* struct in6_addr */
39812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV6_DST,	/* struct in6_addr */
39912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_IPV6_DST_MASK,	/* struct in6_addr */
40012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_TCP_SRC,		/* be16 */
40112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_TCP_DST,		/* be16 */
40212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_UDP_SRC,		/* be16 */
40312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	TCA_FLOWER_KEY_UDP_DST,		/* be16 */
404ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris
405ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_FLOWER_FLAGS,
4063318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_VLAN_ID,		/* be16 */
4073318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_VLAN_PRIO,	/* u8   */
4083318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_VLAN_ETH_TYPE,	/* be16 */
4093318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris
4103318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_KEY_ID,	/* be32 */
4113318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV4_SRC,	/* be32 */
4123318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */
4133318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV4_DST,	/* be32 */
4143318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */
4153318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV6_SRC,	/* struct in6_addr */
4163318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */
4173318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV6_DST,	/* struct in6_addr */
4183318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */
4193318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris
4203318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_TCP_SRC_MASK,	/* be16 */
4213318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_TCP_DST_MASK,	/* be16 */
4223318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_UDP_SRC_MASK,	/* be16 */
4233318540b58f2d22ddaf211f3c8887785372e4e28Christopher Ferris	TCA_FLOWER_KEY_UDP_DST_MASK,	/* be16 */
4242fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_SCTP_SRC_MASK,	/* be16 */
4252fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_SCTP_DST_MASK,	/* be16 */
4262fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris
4272fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_SCTP_SRC,	/* be16 */
4282fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_SCTP_DST,	/* be16 */
4292fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris
4302fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,	/* be16 */
4312fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,	/* be16 */
4322fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ENC_UDP_DST_PORT,	/* be16 */
4332fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,	/* be16 */
4342fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris
4352fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_FLAGS,		/* be32 */
4362fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_FLAGS_MASK,	/* be32 */
4372fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris
4382fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV4_CODE,	/* u8 */
4392fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */
4402fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV4_TYPE,	/* u8 */
4412fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */
4422fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV6_CODE,	/* u8 */
4432fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */
4442fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV6_TYPE,	/* u8 */
4452fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */
4462fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris
4470543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_SIP,		/* be32 */
4480543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_SIP_MASK,	/* be32 */
4490543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_TIP,		/* be32 */
4500543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_TIP_MASK,	/* be32 */
4510543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_OP,		/* u8 */
4520543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_OP_MASK,	/* u8 */
4530543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_SHA,		/* ETH_ALEN */
4540543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_SHA_MASK,	/* ETH_ALEN */
4550543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_THA,		/* ETH_ALEN */
4560543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_ARP_THA_MASK,	/* ETH_ALEN */
4570543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris
4580543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_MPLS_TTL,	/* u8 - 8 bits */
4590543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_MPLS_BOS,	/* u8 - 1 bit */
4600543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_MPLS_TC,		/* u8 - 3 bits */
4610543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_FLOWER_KEY_MPLS_LABEL,	/* be32 - 20 bits */
4620543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris
46325981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_FLOWER_KEY_TCP_FLAGS,	/* be16 */
46425981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_FLOWER_KEY_TCP_FLAGS_MASK,	/* be16 */
46525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris
46625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_FLOWER_KEY_IP_TOS,		/* u8 */
46725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_FLOWER_KEY_IP_TOS_MASK,	/* u8 */
46825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_FLOWER_KEY_IP_TTL,		/* u8 */
46925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_FLOWER_KEY_IP_TTL_MASK,	/* u8 */
47025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris
47112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	__TCA_FLOWER_MAX,
47212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris};
47312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
47412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
47512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
4762fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferrisenum {
4772fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
4782fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris};
4792fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris
4806e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris/* Match-all classifier */
4816e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris
4826e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferrisenum {
4836e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	TCA_MATCHALL_UNSPEC,
4846e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	TCA_MATCHALL_CLASSID,
4856e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	TCA_MATCHALL_ACT,
4866e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	TCA_MATCHALL_FLAGS,
4876e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris	__TCA_MATCHALL_MAX,
4886e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris};
4896e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris
4906e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris#define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1)
4916e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris
492224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Extended Matches */
493224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
494224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_ematch_tree_hdr {
495224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		nmatches;
496224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		progid;
497224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
498224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
499224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
500224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_EMATCH_TREE_UNSPEC,
501224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_EMATCH_TREE_HDR,
502224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_EMATCH_TREE_LIST,
503224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_EMATCH_TREE_MAX
504224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
505224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
506224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
507224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_ematch_hdr {
508224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		matchid;
509224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		kind;
510224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		flags;
511224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		pad; /* currently unused */
512224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
513224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
514224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*  0                   1
515224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
516224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * +-----------------------+-+-+---+
517224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * |         Unused        |S|I| R |
518224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * +-----------------------+-+-+---+
519224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
520224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * R(2) ::= relation to next ematch
521224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *          where: 0 0 END (last ematch)
522224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *                 0 1 AND
523224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *                 1 0 OR
524224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *                 1 1 Unused (invalid)
525224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * I(1) ::= invert result
526224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * S(1) ::= simple payload
527224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
528224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_END	0
529224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_AND	(1<<0)
530224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_OR	(1<<1)
531224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_INVERT	(1<<2)
532224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_SIMPLE	(1<<3)
533224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
534224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_MASK	3
535224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
536224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
537224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
538224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_LAYER_LINK,
539224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_LAYER_NETWORK,
540224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_LAYER_TRANSPORT,
541224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCF_LAYER_MAX
542224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
543224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
544224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
545224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Ematch type assignments
546224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *   1..32767		Reserved for ematches inside kernel tree
547224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *   32768..65535	Free to use, not reliable
548224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
549224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_CONTAINER	0
550224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_CMP		1
551224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_NBYTE		2
552224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_U32		3
553224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_META		4
554224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_TEXT		5
555224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_VLAN		6
556224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_CANID		7
557224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_IPSET		8
558224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_MAX		8
559224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
560224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
561224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_PROG_TC
562224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
563224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
564224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
565224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_OPND_EQ,
566224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_OPND_GT,
567224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_OPND_LT
568224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
569224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
570224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
571