]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - include/uapi/linux/pkt_cls.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[mirror_ubuntu-artful-kernel.git] / include / uapi / linux / pkt_cls.h
1 #ifndef __LINUX_PKT_CLS_H
2 #define __LINUX_PKT_CLS_H
3
4 #include <linux/types.h>
5 #include <linux/pkt_sched.h>
6
7 /* Action attributes */
8 enum {
9 TCA_ACT_UNSPEC,
10 TCA_ACT_KIND,
11 TCA_ACT_OPTIONS,
12 TCA_ACT_INDEX,
13 TCA_ACT_STATS,
14 TCA_ACT_PAD,
15 __TCA_ACT_MAX
16 };
17
18 #define TCA_ACT_MAX __TCA_ACT_MAX
19 #define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
20 #define TCA_ACT_MAX_PRIO 32
21 #define TCA_ACT_BIND 1
22 #define TCA_ACT_NOBIND 0
23 #define TCA_ACT_UNBIND 1
24 #define TCA_ACT_NOUNBIND 0
25 #define TCA_ACT_REPLACE 1
26 #define TCA_ACT_NOREPLACE 0
27
28 #define TC_ACT_UNSPEC (-1)
29 #define TC_ACT_OK 0
30 #define TC_ACT_RECLASSIFY 1
31 #define TC_ACT_SHOT 2
32 #define TC_ACT_PIPE 3
33 #define TC_ACT_STOLEN 4
34 #define TC_ACT_QUEUED 5
35 #define TC_ACT_REPEAT 6
36 #define TC_ACT_REDIRECT 7
37 #define TC_ACT_JUMP 0x10000000
38
39 /* Action type identifiers*/
40 enum {
41 TCA_ID_UNSPEC=0,
42 TCA_ID_POLICE=1,
43 /* other actions go here */
44 __TCA_ID_MAX=255
45 };
46
47 #define TCA_ID_MAX __TCA_ID_MAX
48
49 struct tc_police {
50 __u32 index;
51 int action;
52 #define TC_POLICE_UNSPEC TC_ACT_UNSPEC
53 #define TC_POLICE_OK TC_ACT_OK
54 #define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY
55 #define TC_POLICE_SHOT TC_ACT_SHOT
56 #define TC_POLICE_PIPE TC_ACT_PIPE
57
58 __u32 limit;
59 __u32 burst;
60 __u32 mtu;
61 struct tc_ratespec rate;
62 struct tc_ratespec peakrate;
63 int refcnt;
64 int bindcnt;
65 __u32 capab;
66 };
67
68 struct tcf_t {
69 __u64 install;
70 __u64 lastuse;
71 __u64 expires;
72 __u64 firstuse;
73 };
74
75 struct tc_cnt {
76 int refcnt;
77 int bindcnt;
78 };
79
80 #define tc_gen \
81 __u32 index; \
82 __u32 capab; \
83 int action; \
84 int refcnt; \
85 int bindcnt
86
87 enum {
88 TCA_POLICE_UNSPEC,
89 TCA_POLICE_TBF,
90 TCA_POLICE_RATE,
91 TCA_POLICE_PEAKRATE,
92 TCA_POLICE_AVRATE,
93 TCA_POLICE_RESULT,
94 TCA_POLICE_TM,
95 TCA_POLICE_PAD,
96 __TCA_POLICE_MAX
97 #define TCA_POLICE_RESULT TCA_POLICE_RESULT
98 };
99
100 #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
101
102 /* tca flags definitions */
103 #define TCA_CLS_FLAGS_SKIP_HW (1 << 0)
104 #define TCA_CLS_FLAGS_SKIP_SW (1 << 1)
105
106 /* U32 filters */
107
108 #define TC_U32_HTID(h) ((h)&0xFFF00000)
109 #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
110 #define TC_U32_HASH(h) (((h)>>12)&0xFF)
111 #define TC_U32_NODE(h) ((h)&0xFFF)
112 #define TC_U32_KEY(h) ((h)&0xFFFFF)
113 #define TC_U32_UNSPEC 0
114 #define TC_U32_ROOT (0xFFF00000)
115
116 enum {
117 TCA_U32_UNSPEC,
118 TCA_U32_CLASSID,
119 TCA_U32_HASH,
120 TCA_U32_LINK,
121 TCA_U32_DIVISOR,
122 TCA_U32_SEL,
123 TCA_U32_POLICE,
124 TCA_U32_ACT,
125 TCA_U32_INDEV,
126 TCA_U32_PCNT,
127 TCA_U32_MARK,
128 TCA_U32_FLAGS,
129 TCA_U32_PAD,
130 __TCA_U32_MAX
131 };
132
133 #define TCA_U32_MAX (__TCA_U32_MAX - 1)
134
135 struct tc_u32_key {
136 __be32 mask;
137 __be32 val;
138 int off;
139 int offmask;
140 };
141
142 struct tc_u32_sel {
143 unsigned char flags;
144 unsigned char offshift;
145 unsigned char nkeys;
146
147 __be16 offmask;
148 __u16 off;
149 short offoff;
150
151 short hoff;
152 __be32 hmask;
153 struct tc_u32_key keys[0];
154 };
155
156 struct tc_u32_mark {
157 __u32 val;
158 __u32 mask;
159 __u32 success;
160 };
161
162 struct tc_u32_pcnt {
163 __u64 rcnt;
164 __u64 rhit;
165 __u64 kcnts[0];
166 };
167
168 /* Flags */
169
170 #define TC_U32_TERMINAL 1
171 #define TC_U32_OFFSET 2
172 #define TC_U32_VAROFFSET 4
173 #define TC_U32_EAT 8
174
175 #define TC_U32_MAXDEPTH 8
176
177
178 /* RSVP filter */
179
180 enum {
181 TCA_RSVP_UNSPEC,
182 TCA_RSVP_CLASSID,
183 TCA_RSVP_DST,
184 TCA_RSVP_SRC,
185 TCA_RSVP_PINFO,
186 TCA_RSVP_POLICE,
187 TCA_RSVP_ACT,
188 __TCA_RSVP_MAX
189 };
190
191 #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
192
193 struct tc_rsvp_gpi {
194 __u32 key;
195 __u32 mask;
196 int offset;
197 };
198
199 struct tc_rsvp_pinfo {
200 struct tc_rsvp_gpi dpi;
201 struct tc_rsvp_gpi spi;
202 __u8 protocol;
203 __u8 tunnelid;
204 __u8 tunnelhdr;
205 __u8 pad;
206 };
207
208 /* ROUTE filter */
209
210 enum {
211 TCA_ROUTE4_UNSPEC,
212 TCA_ROUTE4_CLASSID,
213 TCA_ROUTE4_TO,
214 TCA_ROUTE4_FROM,
215 TCA_ROUTE4_IIF,
216 TCA_ROUTE4_POLICE,
217 TCA_ROUTE4_ACT,
218 __TCA_ROUTE4_MAX
219 };
220
221 #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
222
223
224 /* FW filter */
225
226 enum {
227 TCA_FW_UNSPEC,
228 TCA_FW_CLASSID,
229 TCA_FW_POLICE,
230 TCA_FW_INDEV, /* used by CONFIG_NET_CLS_IND */
231 TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
232 TCA_FW_MASK,
233 __TCA_FW_MAX
234 };
235
236 #define TCA_FW_MAX (__TCA_FW_MAX - 1)
237
238 /* TC index filter */
239
240 enum {
241 TCA_TCINDEX_UNSPEC,
242 TCA_TCINDEX_HASH,
243 TCA_TCINDEX_MASK,
244 TCA_TCINDEX_SHIFT,
245 TCA_TCINDEX_FALL_THROUGH,
246 TCA_TCINDEX_CLASSID,
247 TCA_TCINDEX_POLICE,
248 TCA_TCINDEX_ACT,
249 __TCA_TCINDEX_MAX
250 };
251
252 #define TCA_TCINDEX_MAX (__TCA_TCINDEX_MAX - 1)
253
254 /* Flow filter */
255
256 enum {
257 FLOW_KEY_SRC,
258 FLOW_KEY_DST,
259 FLOW_KEY_PROTO,
260 FLOW_KEY_PROTO_SRC,
261 FLOW_KEY_PROTO_DST,
262 FLOW_KEY_IIF,
263 FLOW_KEY_PRIORITY,
264 FLOW_KEY_MARK,
265 FLOW_KEY_NFCT,
266 FLOW_KEY_NFCT_SRC,
267 FLOW_KEY_NFCT_DST,
268 FLOW_KEY_NFCT_PROTO_SRC,
269 FLOW_KEY_NFCT_PROTO_DST,
270 FLOW_KEY_RTCLASSID,
271 FLOW_KEY_SKUID,
272 FLOW_KEY_SKGID,
273 FLOW_KEY_VLAN_TAG,
274 FLOW_KEY_RXHASH,
275 __FLOW_KEY_MAX,
276 };
277
278 #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1)
279
280 enum {
281 FLOW_MODE_MAP,
282 FLOW_MODE_HASH,
283 };
284
285 enum {
286 TCA_FLOW_UNSPEC,
287 TCA_FLOW_KEYS,
288 TCA_FLOW_MODE,
289 TCA_FLOW_BASECLASS,
290 TCA_FLOW_RSHIFT,
291 TCA_FLOW_ADDEND,
292 TCA_FLOW_MASK,
293 TCA_FLOW_XOR,
294 TCA_FLOW_DIVISOR,
295 TCA_FLOW_ACT,
296 TCA_FLOW_POLICE,
297 TCA_FLOW_EMATCHES,
298 TCA_FLOW_PERTURB,
299 __TCA_FLOW_MAX
300 };
301
302 #define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1)
303
304 /* Basic filter */
305
306 enum {
307 TCA_BASIC_UNSPEC,
308 TCA_BASIC_CLASSID,
309 TCA_BASIC_EMATCHES,
310 TCA_BASIC_ACT,
311 TCA_BASIC_POLICE,
312 __TCA_BASIC_MAX
313 };
314
315 #define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
316
317
318 /* Cgroup classifier */
319
320 enum {
321 TCA_CGROUP_UNSPEC,
322 TCA_CGROUP_ACT,
323 TCA_CGROUP_POLICE,
324 TCA_CGROUP_EMATCHES,
325 __TCA_CGROUP_MAX,
326 };
327
328 #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
329
330 /* BPF classifier */
331
332 #define TCA_BPF_FLAG_ACT_DIRECT (1 << 0)
333
334 enum {
335 TCA_BPF_UNSPEC,
336 TCA_BPF_ACT,
337 TCA_BPF_POLICE,
338 TCA_BPF_CLASSID,
339 TCA_BPF_OPS_LEN,
340 TCA_BPF_OPS,
341 TCA_BPF_FD,
342 TCA_BPF_NAME,
343 TCA_BPF_FLAGS,
344 TCA_BPF_FLAGS_GEN,
345 TCA_BPF_TAG,
346 __TCA_BPF_MAX,
347 };
348
349 #define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
350
351 /* Flower classifier */
352
353 enum {
354 TCA_FLOWER_UNSPEC,
355 TCA_FLOWER_CLASSID,
356 TCA_FLOWER_INDEV,
357 TCA_FLOWER_ACT,
358 TCA_FLOWER_KEY_ETH_DST, /* ETH_ALEN */
359 TCA_FLOWER_KEY_ETH_DST_MASK, /* ETH_ALEN */
360 TCA_FLOWER_KEY_ETH_SRC, /* ETH_ALEN */
361 TCA_FLOWER_KEY_ETH_SRC_MASK, /* ETH_ALEN */
362 TCA_FLOWER_KEY_ETH_TYPE, /* be16 */
363 TCA_FLOWER_KEY_IP_PROTO, /* u8 */
364 TCA_FLOWER_KEY_IPV4_SRC, /* be32 */
365 TCA_FLOWER_KEY_IPV4_SRC_MASK, /* be32 */
366 TCA_FLOWER_KEY_IPV4_DST, /* be32 */
367 TCA_FLOWER_KEY_IPV4_DST_MASK, /* be32 */
368 TCA_FLOWER_KEY_IPV6_SRC, /* struct in6_addr */
369 TCA_FLOWER_KEY_IPV6_SRC_MASK, /* struct in6_addr */
370 TCA_FLOWER_KEY_IPV6_DST, /* struct in6_addr */
371 TCA_FLOWER_KEY_IPV6_DST_MASK, /* struct in6_addr */
372 TCA_FLOWER_KEY_TCP_SRC, /* be16 */
373 TCA_FLOWER_KEY_TCP_DST, /* be16 */
374 TCA_FLOWER_KEY_UDP_SRC, /* be16 */
375 TCA_FLOWER_KEY_UDP_DST, /* be16 */
376
377 TCA_FLOWER_FLAGS,
378 TCA_FLOWER_KEY_VLAN_ID, /* be16 */
379 TCA_FLOWER_KEY_VLAN_PRIO, /* u8 */
380 TCA_FLOWER_KEY_VLAN_ETH_TYPE, /* be16 */
381
382 TCA_FLOWER_KEY_ENC_KEY_ID, /* be32 */
383 TCA_FLOWER_KEY_ENC_IPV4_SRC, /* be32 */
384 TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */
385 TCA_FLOWER_KEY_ENC_IPV4_DST, /* be32 */
386 TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */
387 TCA_FLOWER_KEY_ENC_IPV6_SRC, /* struct in6_addr */
388 TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */
389 TCA_FLOWER_KEY_ENC_IPV6_DST, /* struct in6_addr */
390 TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */
391
392 TCA_FLOWER_KEY_TCP_SRC_MASK, /* be16 */
393 TCA_FLOWER_KEY_TCP_DST_MASK, /* be16 */
394 TCA_FLOWER_KEY_UDP_SRC_MASK, /* be16 */
395 TCA_FLOWER_KEY_UDP_DST_MASK, /* be16 */
396 TCA_FLOWER_KEY_SCTP_SRC_MASK, /* be16 */
397 TCA_FLOWER_KEY_SCTP_DST_MASK, /* be16 */
398
399 TCA_FLOWER_KEY_SCTP_SRC, /* be16 */
400 TCA_FLOWER_KEY_SCTP_DST, /* be16 */
401
402 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT, /* be16 */
403 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK, /* be16 */
404 TCA_FLOWER_KEY_ENC_UDP_DST_PORT, /* be16 */
405 TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK, /* be16 */
406
407 TCA_FLOWER_KEY_FLAGS, /* be32 */
408 TCA_FLOWER_KEY_FLAGS_MASK, /* be32 */
409
410 TCA_FLOWER_KEY_ICMPV4_CODE, /* u8 */
411 TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */
412 TCA_FLOWER_KEY_ICMPV4_TYPE, /* u8 */
413 TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */
414 TCA_FLOWER_KEY_ICMPV6_CODE, /* u8 */
415 TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */
416 TCA_FLOWER_KEY_ICMPV6_TYPE, /* u8 */
417 TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */
418
419 TCA_FLOWER_KEY_ARP_SIP, /* be32 */
420 TCA_FLOWER_KEY_ARP_SIP_MASK, /* be32 */
421 TCA_FLOWER_KEY_ARP_TIP, /* be32 */
422 TCA_FLOWER_KEY_ARP_TIP_MASK, /* be32 */
423 TCA_FLOWER_KEY_ARP_OP, /* u8 */
424 TCA_FLOWER_KEY_ARP_OP_MASK, /* u8 */
425 TCA_FLOWER_KEY_ARP_SHA, /* ETH_ALEN */
426 TCA_FLOWER_KEY_ARP_SHA_MASK, /* ETH_ALEN */
427 TCA_FLOWER_KEY_ARP_THA, /* ETH_ALEN */
428 TCA_FLOWER_KEY_ARP_THA_MASK, /* ETH_ALEN */
429
430 __TCA_FLOWER_MAX,
431 };
432
433 #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
434
435 enum {
436 TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
437 };
438
439 /* Match-all classifier */
440
441 enum {
442 TCA_MATCHALL_UNSPEC,
443 TCA_MATCHALL_CLASSID,
444 TCA_MATCHALL_ACT,
445 TCA_MATCHALL_FLAGS,
446 __TCA_MATCHALL_MAX,
447 };
448
449 #define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1)
450
451 /* Extended Matches */
452
453 struct tcf_ematch_tree_hdr {
454 __u16 nmatches;
455 __u16 progid;
456 };
457
458 enum {
459 TCA_EMATCH_TREE_UNSPEC,
460 TCA_EMATCH_TREE_HDR,
461 TCA_EMATCH_TREE_LIST,
462 __TCA_EMATCH_TREE_MAX
463 };
464 #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
465
466 struct tcf_ematch_hdr {
467 __u16 matchid;
468 __u16 kind;
469 __u16 flags;
470 __u16 pad; /* currently unused */
471 };
472
473 /* 0 1
474 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
475 * +-----------------------+-+-+---+
476 * | Unused |S|I| R |
477 * +-----------------------+-+-+---+
478 *
479 * R(2) ::= relation to next ematch
480 * where: 0 0 END (last ematch)
481 * 0 1 AND
482 * 1 0 OR
483 * 1 1 Unused (invalid)
484 * I(1) ::= invert result
485 * S(1) ::= simple payload
486 */
487 #define TCF_EM_REL_END 0
488 #define TCF_EM_REL_AND (1<<0)
489 #define TCF_EM_REL_OR (1<<1)
490 #define TCF_EM_INVERT (1<<2)
491 #define TCF_EM_SIMPLE (1<<3)
492
493 #define TCF_EM_REL_MASK 3
494 #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
495
496 enum {
497 TCF_LAYER_LINK,
498 TCF_LAYER_NETWORK,
499 TCF_LAYER_TRANSPORT,
500 __TCF_LAYER_MAX
501 };
502 #define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
503
504 /* Ematch type assignments
505 * 1..32767 Reserved for ematches inside kernel tree
506 * 32768..65535 Free to use, not reliable
507 */
508 #define TCF_EM_CONTAINER 0
509 #define TCF_EM_CMP 1
510 #define TCF_EM_NBYTE 2
511 #define TCF_EM_U32 3
512 #define TCF_EM_META 4
513 #define TCF_EM_TEXT 5
514 #define TCF_EM_VLAN 6
515 #define TCF_EM_CANID 7
516 #define TCF_EM_IPSET 8
517 #define TCF_EM_MAX 8
518
519 enum {
520 TCF_EM_PROG_TC
521 };
522
523 enum {
524 TCF_EM_OPND_EQ,
525 TCF_EM_OPND_GT,
526 TCF_EM_OPND_LT
527 };
528
529 #endif