blob: cee753a7a40ce925a5a94157a6088f7a6dacf1ae [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#ifndef __LINUX_PKT_CLS_H
2#define __LINUX_PKT_CLS_H
3
Jaswinder Singh Rajputed307442009-01-30 22:05:32 +05304#include <linux/types.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07005#include <linux/pkt_sched.h>
6
Florian Westphalbd5850d2015-05-21 02:26:24 +02007#ifdef __KERNEL__
Linus Torvalds1da177e2005-04-16 15:20:36 -07008#define AT_STACK 0x0
9#define AT_INGRESS 0x1
10#define AT_EGRESS 0x2
Florian Westphalbd5850d2015-05-21 02:26:24 +020011#endif
12
Linus Torvalds1da177e2005-04-16 15:20:36 -070013/* Action attributes */
Eric Dumazetd94d9fe2009-11-04 09:50:58 -080014enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -070015 TCA_ACT_UNSPEC,
16 TCA_ACT_KIND,
17 TCA_ACT_OPTIONS,
18 TCA_ACT_INDEX,
19 TCA_ACT_STATS,
Nicolas Dichtel98545182016-04-26 10:06:18 +020020 TCA_ACT_PAD,
Linus Torvalds1da177e2005-04-16 15:20:36 -070021 __TCA_ACT_MAX
22};
23
24#define TCA_ACT_MAX __TCA_ACT_MAX
25#define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
26#define TCA_ACT_MAX_PRIO 32
27#define TCA_ACT_BIND 1
28#define TCA_ACT_NOBIND 0
29#define TCA_ACT_UNBIND 1
30#define TCA_ACT_NOUNBIND 0
31#define TCA_ACT_REPLACE 1
32#define TCA_ACT_NOREPLACE 0
Linus Torvalds1da177e2005-04-16 15:20:36 -070033
34#define TC_ACT_UNSPEC (-1)
35#define TC_ACT_OK 0
36#define TC_ACT_RECLASSIFY 1
37#define TC_ACT_SHOT 2
38#define TC_ACT_PIPE 3
39#define TC_ACT_STOLEN 4
40#define TC_ACT_QUEUED 5
41#define TC_ACT_REPEAT 6
Alexei Starovoitov27b29f62015-09-15 23:05:43 -070042#define TC_ACT_REDIRECT 7
Linus Torvalds1da177e2005-04-16 15:20:36 -070043#define TC_ACT_JUMP 0x10000000
44
45/* Action type identifiers*/
Eric Dumazetd94d9fe2009-11-04 09:50:58 -080046enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -070047 TCA_ID_UNSPEC=0,
48 TCA_ID_POLICE=1,
49 /* other actions go here */
50 __TCA_ID_MAX=255
51};
52
53#define TCA_ID_MAX __TCA_ID_MAX
54
Eric Dumazetd94d9fe2009-11-04 09:50:58 -080055struct tc_police {
Linus Torvalds1da177e2005-04-16 15:20:36 -070056 __u32 index;
57 int action;
58#define TC_POLICE_UNSPEC TC_ACT_UNSPEC
59#define TC_POLICE_OK TC_ACT_OK
60#define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY
61#define TC_POLICE_SHOT TC_ACT_SHOT
62#define TC_POLICE_PIPE TC_ACT_PIPE
63
64 __u32 limit;
65 __u32 burst;
66 __u32 mtu;
67 struct tc_ratespec rate;
68 struct tc_ratespec peakrate;
Jamal Hadi Salim0b0f43f2016-06-05 10:41:32 -040069 int refcnt;
70 int bindcnt;
Linus Torvalds1da177e2005-04-16 15:20:36 -070071 __u32 capab;
72};
73
Eric Dumazetd94d9fe2009-11-04 09:50:58 -080074struct tcf_t {
Linus Torvalds1da177e2005-04-16 15:20:36 -070075 __u64 install;
76 __u64 lastuse;
77 __u64 expires;
Jamal Hadi Salim53eb4402016-06-06 06:32:54 -040078 __u64 firstuse;
Linus Torvalds1da177e2005-04-16 15:20:36 -070079};
80
Eric Dumazetd94d9fe2009-11-04 09:50:58 -080081struct tc_cnt {
Jamal Hadi Salim0b0f43f2016-06-05 10:41:32 -040082 int refcnt;
Linus Torvalds1da177e2005-04-16 15:20:36 -070083 int bindcnt;
84};
85
86#define tc_gen \
87 __u32 index; \
88 __u32 capab; \
89 int action; \
90 int refcnt; \
91 int bindcnt
92
Eric Dumazetd94d9fe2009-11-04 09:50:58 -080093enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -070094 TCA_POLICE_UNSPEC,
95 TCA_POLICE_TBF,
96 TCA_POLICE_RATE,
97 TCA_POLICE_PEAKRATE,
98 TCA_POLICE_AVRATE,
99 TCA_POLICE_RESULT,
Jamal Hadi Salim3d3ed182016-05-23 21:07:20 -0400100 TCA_POLICE_TM,
101 TCA_POLICE_PAD,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700102 __TCA_POLICE_MAX
103#define TCA_POLICE_RESULT TCA_POLICE_RESULT
104};
105
106#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
107
Samudrala, Sridhar760edee2016-05-12 17:08:22 -0700108/* tca flags definitions */
109#define TCA_CLS_FLAGS_SKIP_HW (1 << 0)
Samudrala, Sridhard34e3e12016-05-12 17:08:23 -0700110#define TCA_CLS_FLAGS_SKIP_SW (1 << 1)
Samudrala, Sridhar760edee2016-05-12 17:08:22 -0700111
Linus Torvalds1da177e2005-04-16 15:20:36 -0700112/* U32 filters */
113
114#define TC_U32_HTID(h) ((h)&0xFFF00000)
115#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
116#define TC_U32_HASH(h) (((h)>>12)&0xFF)
117#define TC_U32_NODE(h) ((h)&0xFFF)
118#define TC_U32_KEY(h) ((h)&0xFFFFF)
119#define TC_U32_UNSPEC 0
120#define TC_U32_ROOT (0xFFF00000)
121
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800122enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700123 TCA_U32_UNSPEC,
124 TCA_U32_CLASSID,
125 TCA_U32_HASH,
126 TCA_U32_LINK,
127 TCA_U32_DIVISOR,
128 TCA_U32_SEL,
129 TCA_U32_POLICE,
Jamal Hadi Salim3d3ed182016-05-23 21:07:20 -0400130 TCA_U32_ACT,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700131 TCA_U32_INDEV,
132 TCA_U32_PCNT,
133 TCA_U32_MARK,
John Fastabend9e8ce792016-02-26 07:54:39 -0800134 TCA_U32_FLAGS,
Nicolas Dichtel98545182016-04-26 10:06:18 +0200135 TCA_U32_PAD,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700136 __TCA_U32_MAX
137};
138
139#define TCA_U32_MAX (__TCA_U32_MAX - 1)
140
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800141struct tc_u32_key {
Al Viro0382b9c2008-03-17 22:46:46 -0700142 __be32 mask;
143 __be32 val;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700144 int off;
145 int offmask;
146};
147
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800148struct tc_u32_sel {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700149 unsigned char flags;
150 unsigned char offshift;
151 unsigned char nkeys;
152
Al Viro0382b9c2008-03-17 22:46:46 -0700153 __be16 offmask;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700154 __u16 off;
155 short offoff;
156
157 short hoff;
Al Viro0382b9c2008-03-17 22:46:46 -0700158 __be32 hmask;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700159 struct tc_u32_key keys[0];
160};
161
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800162struct tc_u32_mark {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700163 __u32 val;
164 __u32 mask;
165 __u32 success;
166};
167
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800168struct tc_u32_pcnt {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700169 __u64 rcnt;
170 __u64 rhit;
171 __u64 kcnts[0];
172};
173
174/* Flags */
175
176#define TC_U32_TERMINAL 1
177#define TC_U32_OFFSET 2
178#define TC_U32_VAROFFSET 4
179#define TC_U32_EAT 8
180
181#define TC_U32_MAXDEPTH 8
182
183
184/* RSVP filter */
185
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800186enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700187 TCA_RSVP_UNSPEC,
188 TCA_RSVP_CLASSID,
189 TCA_RSVP_DST,
190 TCA_RSVP_SRC,
191 TCA_RSVP_PINFO,
192 TCA_RSVP_POLICE,
193 TCA_RSVP_ACT,
194 __TCA_RSVP_MAX
195};
196
197#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
198
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800199struct tc_rsvp_gpi {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700200 __u32 key;
201 __u32 mask;
202 int offset;
203};
204
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800205struct tc_rsvp_pinfo {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700206 struct tc_rsvp_gpi dpi;
207 struct tc_rsvp_gpi spi;
208 __u8 protocol;
209 __u8 tunnelid;
210 __u8 tunnelhdr;
Patrick McHardy8a470772005-06-28 12:56:45 -0700211 __u8 pad;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700212};
213
214/* ROUTE filter */
215
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800216enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700217 TCA_ROUTE4_UNSPEC,
218 TCA_ROUTE4_CLASSID,
219 TCA_ROUTE4_TO,
220 TCA_ROUTE4_FROM,
221 TCA_ROUTE4_IIF,
222 TCA_ROUTE4_POLICE,
223 TCA_ROUTE4_ACT,
224 __TCA_ROUTE4_MAX
225};
226
227#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
228
229
230/* FW filter */
231
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800232enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700233 TCA_FW_UNSPEC,
234 TCA_FW_CLASSID,
235 TCA_FW_POLICE,
236 TCA_FW_INDEV, /* used by CONFIG_NET_CLS_IND */
237 TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
Patrick McHardyb4e9b522006-08-25 16:11:42 -0700238 TCA_FW_MASK,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700239 __TCA_FW_MAX
240};
241
242#define TCA_FW_MAX (__TCA_FW_MAX - 1)
243
244/* TC index filter */
245
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800246enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700247 TCA_TCINDEX_UNSPEC,
248 TCA_TCINDEX_HASH,
249 TCA_TCINDEX_MASK,
250 TCA_TCINDEX_SHIFT,
251 TCA_TCINDEX_FALL_THROUGH,
252 TCA_TCINDEX_CLASSID,
253 TCA_TCINDEX_POLICE,
254 TCA_TCINDEX_ACT,
255 __TCA_TCINDEX_MAX
256};
257
258#define TCA_TCINDEX_MAX (__TCA_TCINDEX_MAX - 1)
259
Patrick McHardye5dfb812008-01-31 18:37:42 -0800260/* Flow filter */
261
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800262enum {
Patrick McHardye5dfb812008-01-31 18:37:42 -0800263 FLOW_KEY_SRC,
264 FLOW_KEY_DST,
265 FLOW_KEY_PROTO,
266 FLOW_KEY_PROTO_SRC,
267 FLOW_KEY_PROTO_DST,
268 FLOW_KEY_IIF,
269 FLOW_KEY_PRIORITY,
270 FLOW_KEY_MARK,
271 FLOW_KEY_NFCT,
272 FLOW_KEY_NFCT_SRC,
273 FLOW_KEY_NFCT_DST,
274 FLOW_KEY_NFCT_PROTO_SRC,
275 FLOW_KEY_NFCT_PROTO_DST,
276 FLOW_KEY_RTCLASSID,
277 FLOW_KEY_SKUID,
278 FLOW_KEY_SKGID,
Patrick McHardy9ec13812008-02-05 16:21:04 -0800279 FLOW_KEY_VLAN_TAG,
Changli Gao739a91e2010-08-21 06:23:15 +0000280 FLOW_KEY_RXHASH,
Patrick McHardye5dfb812008-01-31 18:37:42 -0800281 __FLOW_KEY_MAX,
282};
283
284#define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1)
285
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800286enum {
Patrick McHardye5dfb812008-01-31 18:37:42 -0800287 FLOW_MODE_MAP,
288 FLOW_MODE_HASH,
289};
290
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800291enum {
Patrick McHardye5dfb812008-01-31 18:37:42 -0800292 TCA_FLOW_UNSPEC,
293 TCA_FLOW_KEYS,
294 TCA_FLOW_MODE,
295 TCA_FLOW_BASECLASS,
296 TCA_FLOW_RSHIFT,
297 TCA_FLOW_ADDEND,
298 TCA_FLOW_MASK,
299 TCA_FLOW_XOR,
300 TCA_FLOW_DIVISOR,
301 TCA_FLOW_ACT,
302 TCA_FLOW_POLICE,
303 TCA_FLOW_EMATCHES,
Patrick McHardy72d97942008-07-14 20:36:32 -0700304 TCA_FLOW_PERTURB,
Patrick McHardye5dfb812008-01-31 18:37:42 -0800305 __TCA_FLOW_MAX
306};
307
308#define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1)
309
Linus Torvalds1da177e2005-04-16 15:20:36 -0700310/* Basic filter */
311
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800312enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700313 TCA_BASIC_UNSPEC,
314 TCA_BASIC_CLASSID,
315 TCA_BASIC_EMATCHES,
316 TCA_BASIC_ACT,
317 TCA_BASIC_POLICE,
318 __TCA_BASIC_MAX
319};
320
321#define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
322
Thomas Graff4009232008-11-07 22:56:00 -0800323
324/* Cgroup classifier */
325
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800326enum {
Thomas Graff4009232008-11-07 22:56:00 -0800327 TCA_CGROUP_UNSPEC,
328 TCA_CGROUP_ACT,
329 TCA_CGROUP_POLICE,
330 TCA_CGROUP_EMATCHES,
331 __TCA_CGROUP_MAX,
332};
333
334#define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
335
Daniel Borkmann7d1d65c2013-10-28 16:43:02 +0100336/* BPF classifier */
337
Daniel Borkmann045efa82015-09-15 23:05:42 -0700338#define TCA_BPF_FLAG_ACT_DIRECT (1 << 0)
339
Daniel Borkmann7d1d65c2013-10-28 16:43:02 +0100340enum {
341 TCA_BPF_UNSPEC,
342 TCA_BPF_ACT,
343 TCA_BPF_POLICE,
344 TCA_BPF_CLASSID,
345 TCA_BPF_OPS_LEN,
346 TCA_BPF_OPS,
Daniel Borkmanne2e9b652015-03-01 12:31:48 +0100347 TCA_BPF_FD,
348 TCA_BPF_NAME,
Daniel Borkmann045efa82015-09-15 23:05:42 -0700349 TCA_BPF_FLAGS,
Jakub Kicinski0d01d452016-09-21 11:43:54 +0100350 TCA_BPF_FLAGS_GEN,
Daniel Borkmann7bd509e2016-12-04 23:19:41 +0100351 TCA_BPF_DIGEST,
Daniel Borkmann7d1d65c2013-10-28 16:43:02 +0100352 __TCA_BPF_MAX,
353};
354
355#define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
356
Jiri Pirko77b99002015-05-12 14:56:21 +0200357/* Flower classifier */
358
359enum {
360 TCA_FLOWER_UNSPEC,
361 TCA_FLOWER_CLASSID,
362 TCA_FLOWER_INDEV,
363 TCA_FLOWER_ACT,
364 TCA_FLOWER_KEY_ETH_DST, /* ETH_ALEN */
365 TCA_FLOWER_KEY_ETH_DST_MASK, /* ETH_ALEN */
366 TCA_FLOWER_KEY_ETH_SRC, /* ETH_ALEN */
367 TCA_FLOWER_KEY_ETH_SRC_MASK, /* ETH_ALEN */
368 TCA_FLOWER_KEY_ETH_TYPE, /* be16 */
369 TCA_FLOWER_KEY_IP_PROTO, /* u8 */
370 TCA_FLOWER_KEY_IPV4_SRC, /* be32 */
371 TCA_FLOWER_KEY_IPV4_SRC_MASK, /* be32 */
372 TCA_FLOWER_KEY_IPV4_DST, /* be32 */
373 TCA_FLOWER_KEY_IPV4_DST_MASK, /* be32 */
374 TCA_FLOWER_KEY_IPV6_SRC, /* struct in6_addr */
375 TCA_FLOWER_KEY_IPV6_SRC_MASK, /* struct in6_addr */
376 TCA_FLOWER_KEY_IPV6_DST, /* struct in6_addr */
377 TCA_FLOWER_KEY_IPV6_DST_MASK, /* struct in6_addr */
378 TCA_FLOWER_KEY_TCP_SRC, /* be16 */
379 TCA_FLOWER_KEY_TCP_DST, /* be16 */
380 TCA_FLOWER_KEY_UDP_SRC, /* be16 */
381 TCA_FLOWER_KEY_UDP_DST, /* be16 */
Amir Vadai5b33f482016-03-08 12:42:29 +0200382
383 TCA_FLOWER_FLAGS,
Or Gerlitz37a6c152016-09-15 15:28:24 +0300384 TCA_FLOWER_KEY_VLAN_ID, /* be16 */
385 TCA_FLOWER_KEY_VLAN_PRIO, /* u8 */
386 TCA_FLOWER_KEY_VLAN_ETH_TYPE, /* be16 */
Amir Vadaibc3103f2016-09-08 16:23:47 +0300387
388 TCA_FLOWER_KEY_ENC_KEY_ID, /* be32 */
389 TCA_FLOWER_KEY_ENC_IPV4_SRC, /* be32 */
390 TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */
391 TCA_FLOWER_KEY_ENC_IPV4_DST, /* be32 */
392 TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */
393 TCA_FLOWER_KEY_ENC_IPV6_SRC, /* struct in6_addr */
394 TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */
395 TCA_FLOWER_KEY_ENC_IPV6_DST, /* struct in6_addr */
396 TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */
397
Or Gerlitzaa72d702016-09-15 15:28:22 +0300398 TCA_FLOWER_KEY_TCP_SRC_MASK, /* be16 */
399 TCA_FLOWER_KEY_TCP_DST_MASK, /* be16 */
400 TCA_FLOWER_KEY_UDP_SRC_MASK, /* be16 */
401 TCA_FLOWER_KEY_UDP_DST_MASK, /* be16 */
Simon Horman5976c5f2016-11-03 13:24:21 +0100402 TCA_FLOWER_KEY_SCTP_SRC_MASK, /* be16 */
403 TCA_FLOWER_KEY_SCTP_DST_MASK, /* be16 */
404
405 TCA_FLOWER_KEY_SCTP_SRC, /* be16 */
406 TCA_FLOWER_KEY_SCTP_DST, /* be16 */
Hadar Hen Zionf4d997f2016-11-07 15:14:39 +0200407
408 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT, /* be16 */
409 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK, /* be16 */
410 TCA_FLOWER_KEY_ENC_UDP_DST_PORT, /* be16 */
411 TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK, /* be16 */
Or Gerlitzfaa3ffc2016-12-07 14:03:10 +0200412
413 TCA_FLOWER_KEY_FLAGS, /* be32 */
414 TCA_FLOWER_KEY_FLAGS_MASK, /* be32 */
Simon Horman7b684882016-12-07 13:48:28 +0100415
416 TCA_FLOWER_KEY_ICMPV4_CODE, /* u8 */
417 TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */
418 TCA_FLOWER_KEY_ICMPV4_TYPE, /* u8 */
419 TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */
420 TCA_FLOWER_KEY_ICMPV6_CODE, /* u8 */
421 TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */
422 TCA_FLOWER_KEY_ICMPV6_TYPE, /* u8 */
423 TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */
424
Jiri Pirko77b99002015-05-12 14:56:21 +0200425 __TCA_FLOWER_MAX,
426};
427
428#define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
429
Or Gerlitzfaa3ffc2016-12-07 14:03:10 +0200430enum {
431 TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
432};
433
Jiri Pirkobf3994d2016-07-21 12:03:11 +0200434/* Match-all classifier */
435
436enum {
437 TCA_MATCHALL_UNSPEC,
438 TCA_MATCHALL_CLASSID,
439 TCA_MATCHALL_ACT,
Yotam Gigib87f7932016-07-21 12:03:12 +0200440 TCA_MATCHALL_FLAGS,
Jiri Pirkobf3994d2016-07-21 12:03:11 +0200441 __TCA_MATCHALL_MAX,
442};
443
444#define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1)
445
Linus Torvalds1da177e2005-04-16 15:20:36 -0700446/* Extended Matches */
447
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800448struct tcf_ematch_tree_hdr {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700449 __u16 nmatches;
450 __u16 progid;
451};
452
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800453enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700454 TCA_EMATCH_TREE_UNSPEC,
455 TCA_EMATCH_TREE_HDR,
456 TCA_EMATCH_TREE_LIST,
457 __TCA_EMATCH_TREE_MAX
458};
459#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
460
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800461struct tcf_ematch_hdr {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700462 __u16 matchid;
463 __u16 kind;
464 __u16 flags;
465 __u16 pad; /* currently unused */
466};
467
468/* 0 1
469 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
470 * +-----------------------+-+-+---+
471 * | Unused |S|I| R |
472 * +-----------------------+-+-+---+
473 *
474 * R(2) ::= relation to next ematch
475 * where: 0 0 END (last ematch)
476 * 0 1 AND
477 * 1 0 OR
478 * 1 1 Unused (invalid)
479 * I(1) ::= invert result
480 * S(1) ::= simple payload
481 */
482#define TCF_EM_REL_END 0
483#define TCF_EM_REL_AND (1<<0)
484#define TCF_EM_REL_OR (1<<1)
485#define TCF_EM_INVERT (1<<2)
486#define TCF_EM_SIMPLE (1<<3)
487
488#define TCF_EM_REL_MASK 3
489#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
490
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800491enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700492 TCF_LAYER_LINK,
493 TCF_LAYER_NETWORK,
494 TCF_LAYER_TRANSPORT,
495 __TCF_LAYER_MAX
496};
497#define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
498
499/* Ematch type assignments
500 * 1..32767 Reserved for ematches inside kernel tree
501 * 32768..65535 Free to use, not reliable
502 */
Patrick McHardydb3d99c2007-07-11 19:46:26 -0700503#define TCF_EM_CONTAINER 0
504#define TCF_EM_CMP 1
505#define TCF_EM_NBYTE 2
506#define TCF_EM_U32 3
507#define TCF_EM_META 4
508#define TCF_EM_TEXT 5
Rostislav Lisovyf057bbb2012-07-04 05:32:03 +0200509#define TCF_EM_VLAN 6
510#define TCF_EM_CANID 7
Florian Westphal6d4fa852012-07-11 10:56:57 +0000511#define TCF_EM_IPSET 8
512#define TCF_EM_MAX 8
Linus Torvalds1da177e2005-04-16 15:20:36 -0700513
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800514enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700515 TCF_EM_PROG_TC
516};
517
Eric Dumazetd94d9fe2009-11-04 09:50:58 -0800518enum {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700519 TCF_EM_OPND_EQ,
520 TCF_EM_OPND_GT,
521 TCF_EM_OPND_LT
522};
523
524#endif