Blame view

include/linux/pkt_cls.h 9.09 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef __LINUX_PKT_CLS_H
  #define __LINUX_PKT_CLS_H
ed307444d   Jaswinder Singh Rajput   headers_check fix...
3
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  #include <linux/pkt_sched.h>
  
  /* I think i could have done better macros ; for now this is stolen from
   * some arch/mips code - jhs
  */
  #define _TC_MAKE32(x) ((x))
  
  #define _TC_MAKEMASK1(n) (_TC_MAKE32(1) << _TC_MAKE32(n))
  #define _TC_MAKEMASK(v,n) (_TC_MAKE32((_TC_MAKE32(1)<<(v))-1) << _TC_MAKE32(n))
  #define _TC_MAKEVALUE(v,n) (_TC_MAKE32(v) << _TC_MAKE32(n))
  #define _TC_GETVALUE(v,n,m) ((_TC_MAKE32(v) & _TC_MAKE32(m)) >> _TC_MAKE32(n))
  
  /* verdict bit breakdown 
   *
  bit 0: when set -> this packet has been munged already
  
  bit 1: when set -> It is ok to munge this packet
  
  bit 2,3,4,5: Reclassify counter - sort of reverse TTL - if exceeded
  assume loop
  
  bit 6,7: Where this packet was last seen 
  0: Above the transmit example at the socket level
  1: on the Ingress
  2: on the Egress
  
  bit 8: when set --> Request not to classify on ingress. 
  
  bits 9,10,11: redirect counter -  redirect TTL. Loop avoidance
  
   *
   * */
  
  #define TC_MUNGED          _TC_MAKEMASK1(0)
  #define SET_TC_MUNGED(v)   ( TC_MUNGED | (v & ~TC_MUNGED))
  #define CLR_TC_MUNGED(v)   ( v & ~TC_MUNGED)
  
  #define TC_OK2MUNGE        _TC_MAKEMASK1(1)
  #define SET_TC_OK2MUNGE(v)   ( TC_OK2MUNGE | (v & ~TC_OK2MUNGE))
  #define CLR_TC_OK2MUNGE(v)   ( v & ~TC_OK2MUNGE)
  
  #define S_TC_VERD          _TC_MAKE32(2)
  #define M_TC_VERD          _TC_MAKEMASK(4,S_TC_VERD)
  #define G_TC_VERD(x)       _TC_GETVALUE(x,S_TC_VERD,M_TC_VERD)
  #define V_TC_VERD(x)       _TC_MAKEVALUE(x,S_TC_VERD)
  #define SET_TC_VERD(v,n)   ((V_TC_VERD(n)) | (v & ~M_TC_VERD))
  
  #define S_TC_FROM          _TC_MAKE32(6)
  #define M_TC_FROM          _TC_MAKEMASK(2,S_TC_FROM)
  #define G_TC_FROM(x)       _TC_GETVALUE(x,S_TC_FROM,M_TC_FROM)
  #define V_TC_FROM(x)       _TC_MAKEVALUE(x,S_TC_FROM)
  #define SET_TC_FROM(v,n)   ((V_TC_FROM(n)) | (v & ~M_TC_FROM))
  #define AT_STACK	0x0
  #define AT_INGRESS	0x1
  #define AT_EGRESS	0x2
  
  #define TC_NCLS          _TC_MAKEMASK1(8)
  #define SET_TC_NCLS(v)   ( TC_NCLS | (v & ~TC_NCLS))
  #define CLR_TC_NCLS(v)   ( v & ~TC_NCLS)
  
  #define S_TC_RTTL          _TC_MAKE32(9)
  #define M_TC_RTTL          _TC_MAKEMASK(3,S_TC_RTTL)
  #define G_TC_RTTL(x)       _TC_GETVALUE(x,S_TC_RTTL,M_TC_RTTL)
  #define V_TC_RTTL(x)       _TC_MAKEVALUE(x,S_TC_RTTL)
  #define SET_TC_RTTL(v,n)   ((V_TC_RTTL(n)) | (v & ~M_TC_RTTL))
  
  #define S_TC_AT          _TC_MAKE32(12)
  #define M_TC_AT          _TC_MAKEMASK(2,S_TC_AT)
  #define G_TC_AT(x)       _TC_GETVALUE(x,S_TC_AT,M_TC_AT)
  #define V_TC_AT(x)       _TC_MAKEVALUE(x,S_TC_AT)
  #define SET_TC_AT(v,n)   ((V_TC_AT(n)) | (v & ~M_TC_AT))
  
  /* Action attributes */
d94d9fee9   Eric Dumazet   net: cleanup incl...
77
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  	TCA_ACT_UNSPEC,
  	TCA_ACT_KIND,
  	TCA_ACT_OPTIONS,
  	TCA_ACT_INDEX,
  	TCA_ACT_STATS,
  	__TCA_ACT_MAX
  };
  
  #define TCA_ACT_MAX __TCA_ACT_MAX
  #define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
  #define TCA_ACT_MAX_PRIO 32
  #define TCA_ACT_BIND	1
  #define TCA_ACT_NOBIND	0
  #define TCA_ACT_UNBIND	1
  #define TCA_ACT_NOUNBIND	0
  #define TCA_ACT_REPLACE		1
  #define TCA_ACT_NOREPLACE	0
  #define MAX_REC_LOOP 4
  #define MAX_RED_LOOP 4
  
  #define TC_ACT_UNSPEC	(-1)
  #define TC_ACT_OK		0
  #define TC_ACT_RECLASSIFY	1
  #define TC_ACT_SHOT		2
  #define TC_ACT_PIPE		3
  #define TC_ACT_STOLEN		4
  #define TC_ACT_QUEUED		5
  #define TC_ACT_REPEAT		6
  #define TC_ACT_JUMP		0x10000000
  
  /* Action type identifiers*/
d94d9fee9   Eric Dumazet   net: cleanup incl...
109
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
110
111
112
113
114
115
116
  	TCA_ID_UNSPEC=0,
  	TCA_ID_POLICE=1,
  	/* other actions go here */
  	__TCA_ID_MAX=255
  };
  
  #define TCA_ID_MAX __TCA_ID_MAX
d94d9fee9   Eric Dumazet   net: cleanup incl...
117
  struct tc_police {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
  	__u32			index;
  	int			action;
  #define TC_POLICE_UNSPEC	TC_ACT_UNSPEC
  #define TC_POLICE_OK		TC_ACT_OK
  #define TC_POLICE_RECLASSIFY	TC_ACT_RECLASSIFY
  #define TC_POLICE_SHOT		TC_ACT_SHOT
  #define TC_POLICE_PIPE		TC_ACT_PIPE
  
  	__u32			limit;
  	__u32			burst;
  	__u32			mtu;
  	struct tc_ratespec	rate;
  	struct tc_ratespec	peakrate;
  	int 			refcnt;
  	int 			bindcnt;
  	__u32			capab;
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
135
  struct tcf_t {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
136
137
138
139
  	__u64   install;
  	__u64   lastuse;
  	__u64   expires;
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
140
  struct tc_cnt {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
141
142
143
144
145
146
147
148
149
150
  	int                   refcnt; 
  	int                   bindcnt;
  };
  
  #define tc_gen \
  	__u32                 index; \
  	__u32                 capab; \
  	int                   action; \
  	int                   refcnt; \
  	int                   bindcnt
d94d9fee9   Eric Dumazet   net: cleanup incl...
151
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
  	TCA_POLICE_UNSPEC,
  	TCA_POLICE_TBF,
  	TCA_POLICE_RATE,
  	TCA_POLICE_PEAKRATE,
  	TCA_POLICE_AVRATE,
  	TCA_POLICE_RESULT,
  	__TCA_POLICE_MAX
  #define TCA_POLICE_RESULT TCA_POLICE_RESULT
  };
  
  #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
  
  /* U32 filters */
  
  #define TC_U32_HTID(h) ((h)&0xFFF00000)
  #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
  #define TC_U32_HASH(h) (((h)>>12)&0xFF)
  #define TC_U32_NODE(h) ((h)&0xFFF)
  #define TC_U32_KEY(h) ((h)&0xFFFFF)
  #define TC_U32_UNSPEC	0
  #define TC_U32_ROOT	(0xFFF00000)
d94d9fee9   Eric Dumazet   net: cleanup incl...
173
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
  	TCA_U32_UNSPEC,
  	TCA_U32_CLASSID,
  	TCA_U32_HASH,
  	TCA_U32_LINK,
  	TCA_U32_DIVISOR,
  	TCA_U32_SEL,
  	TCA_U32_POLICE,
  	TCA_U32_ACT,   
  	TCA_U32_INDEV,
  	TCA_U32_PCNT,
  	TCA_U32_MARK,
  	__TCA_U32_MAX
  };
  
  #define TCA_U32_MAX (__TCA_U32_MAX - 1)
d94d9fee9   Eric Dumazet   net: cleanup incl...
189
  struct tc_u32_key {
0382b9c35   Al Viro   [PKT_SCHED]: anno...
190
191
  	__be32		mask;
  	__be32		val;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
192
193
194
  	int		off;
  	int		offmask;
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
195
  struct tc_u32_sel {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
196
197
198
  	unsigned char		flags;
  	unsigned char		offshift;
  	unsigned char		nkeys;
0382b9c35   Al Viro   [PKT_SCHED]: anno...
199
  	__be16			offmask;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
200
201
202
203
  	__u16			off;
  	short			offoff;
  
  	short			hoff;
0382b9c35   Al Viro   [PKT_SCHED]: anno...
204
  	__be32			hmask;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
205
206
  	struct tc_u32_key	keys[0];
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
207
  struct tc_u32_mark {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
208
209
210
211
  	__u32		val;
  	__u32		mask;
  	__u32		success;
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
212
  struct tc_u32_pcnt {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
  	__u64 rcnt;
  	__u64 rhit;
  	__u64 kcnts[0];
  };
  
  /* Flags */
  
  #define TC_U32_TERMINAL		1
  #define TC_U32_OFFSET		2
  #define TC_U32_VAROFFSET	4
  #define TC_U32_EAT		8
  
  #define TC_U32_MAXDEPTH 8
  
  
  /* RSVP filter */
d94d9fee9   Eric Dumazet   net: cleanup incl...
229
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
230
231
232
233
234
235
236
237
238
239
240
  	TCA_RSVP_UNSPEC,
  	TCA_RSVP_CLASSID,
  	TCA_RSVP_DST,
  	TCA_RSVP_SRC,
  	TCA_RSVP_PINFO,
  	TCA_RSVP_POLICE,
  	TCA_RSVP_ACT,
  	__TCA_RSVP_MAX
  };
  
  #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
d94d9fee9   Eric Dumazet   net: cleanup incl...
241
  struct tc_rsvp_gpi {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
242
243
244
245
  	__u32	key;
  	__u32	mask;
  	int	offset;
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
246
  struct tc_rsvp_pinfo {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
247
248
249
250
251
  	struct tc_rsvp_gpi dpi;
  	struct tc_rsvp_gpi spi;
  	__u8	protocol;
  	__u8	tunnelid;
  	__u8	tunnelhdr;
8a47077a0   Patrick McHardy   [NETLINK]: Missin...
252
  	__u8	pad;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
253
254
255
  };
  
  /* ROUTE filter */
d94d9fee9   Eric Dumazet   net: cleanup incl...
256
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
257
258
259
260
261
262
263
264
265
266
267
268
269
270
  	TCA_ROUTE4_UNSPEC,
  	TCA_ROUTE4_CLASSID,
  	TCA_ROUTE4_TO,
  	TCA_ROUTE4_FROM,
  	TCA_ROUTE4_IIF,
  	TCA_ROUTE4_POLICE,
  	TCA_ROUTE4_ACT,
  	__TCA_ROUTE4_MAX
  };
  
  #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
  
  
  /* FW filter */
d94d9fee9   Eric Dumazet   net: cleanup incl...
271
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
272
273
274
275
276
  	TCA_FW_UNSPEC,
  	TCA_FW_CLASSID,
  	TCA_FW_POLICE,
  	TCA_FW_INDEV, /*  used by CONFIG_NET_CLS_IND */
  	TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
b4e9b520c   Patrick McHardy   [NET_SCHED]: Add ...
277
  	TCA_FW_MASK,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
278
279
280
281
282
283
  	__TCA_FW_MAX
  };
  
  #define TCA_FW_MAX (__TCA_FW_MAX - 1)
  
  /* TC index filter */
d94d9fee9   Eric Dumazet   net: cleanup incl...
284
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
285
286
287
288
289
290
291
292
293
294
295
296
  	TCA_TCINDEX_UNSPEC,
  	TCA_TCINDEX_HASH,
  	TCA_TCINDEX_MASK,
  	TCA_TCINDEX_SHIFT,
  	TCA_TCINDEX_FALL_THROUGH,
  	TCA_TCINDEX_CLASSID,
  	TCA_TCINDEX_POLICE,
  	TCA_TCINDEX_ACT,
  	__TCA_TCINDEX_MAX
  };
  
  #define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1)
e5dfb8151   Patrick McHardy   [NET_SCHED]: Add ...
297
  /* Flow filter */
d94d9fee9   Eric Dumazet   net: cleanup incl...
298
  enum {
e5dfb8151   Patrick McHardy   [NET_SCHED]: Add ...
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
  	FLOW_KEY_SRC,
  	FLOW_KEY_DST,
  	FLOW_KEY_PROTO,
  	FLOW_KEY_PROTO_SRC,
  	FLOW_KEY_PROTO_DST,
  	FLOW_KEY_IIF,
  	FLOW_KEY_PRIORITY,
  	FLOW_KEY_MARK,
  	FLOW_KEY_NFCT,
  	FLOW_KEY_NFCT_SRC,
  	FLOW_KEY_NFCT_DST,
  	FLOW_KEY_NFCT_PROTO_SRC,
  	FLOW_KEY_NFCT_PROTO_DST,
  	FLOW_KEY_RTCLASSID,
  	FLOW_KEY_SKUID,
  	FLOW_KEY_SKGID,
9ec138101   Patrick McHardy   [NET_SCHED]: cls_...
315
  	FLOW_KEY_VLAN_TAG,
739a91ef0   Changli Gao   net_sched: cls_fl...
316
  	FLOW_KEY_RXHASH,
e5dfb8151   Patrick McHardy   [NET_SCHED]: Add ...
317
318
319
320
  	__FLOW_KEY_MAX,
  };
  
  #define FLOW_KEY_MAX	(__FLOW_KEY_MAX - 1)
d94d9fee9   Eric Dumazet   net: cleanup incl...
321
  enum {
e5dfb8151   Patrick McHardy   [NET_SCHED]: Add ...
322
323
324
  	FLOW_MODE_MAP,
  	FLOW_MODE_HASH,
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
325
  enum {
e5dfb8151   Patrick McHardy   [NET_SCHED]: Add ...
326
327
328
329
330
331
332
333
334
335
336
337
  	TCA_FLOW_UNSPEC,
  	TCA_FLOW_KEYS,
  	TCA_FLOW_MODE,
  	TCA_FLOW_BASECLASS,
  	TCA_FLOW_RSHIFT,
  	TCA_FLOW_ADDEND,
  	TCA_FLOW_MASK,
  	TCA_FLOW_XOR,
  	TCA_FLOW_DIVISOR,
  	TCA_FLOW_ACT,
  	TCA_FLOW_POLICE,
  	TCA_FLOW_EMATCHES,
72d9794f4   Patrick McHardy   net-sched: cls_fl...
338
  	TCA_FLOW_PERTURB,
e5dfb8151   Patrick McHardy   [NET_SCHED]: Add ...
339
340
341
342
  	__TCA_FLOW_MAX
  };
  
  #define TCA_FLOW_MAX	(__TCA_FLOW_MAX - 1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
343
  /* Basic filter */
d94d9fee9   Eric Dumazet   net: cleanup incl...
344
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
345
346
347
348
349
350
351
352
353
  	TCA_BASIC_UNSPEC,
  	TCA_BASIC_CLASSID,
  	TCA_BASIC_EMATCHES,
  	TCA_BASIC_ACT,
  	TCA_BASIC_POLICE,
  	__TCA_BASIC_MAX
  };
  
  #define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
f40092373   Thomas Graf   pkt_sched: Contro...
354
355
  
  /* Cgroup classifier */
d94d9fee9   Eric Dumazet   net: cleanup incl...
356
  enum {
f40092373   Thomas Graf   pkt_sched: Contro...
357
358
359
360
361
362
363
364
  	TCA_CGROUP_UNSPEC,
  	TCA_CGROUP_ACT,
  	TCA_CGROUP_POLICE,
  	TCA_CGROUP_EMATCHES,
  	__TCA_CGROUP_MAX,
  };
  
  #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
365
  /* Extended Matches */
d94d9fee9   Eric Dumazet   net: cleanup incl...
366
  struct tcf_ematch_tree_hdr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
367
368
369
  	__u16		nmatches;
  	__u16		progid;
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
370
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
371
372
373
374
375
376
  	TCA_EMATCH_TREE_UNSPEC,
  	TCA_EMATCH_TREE_HDR,
  	TCA_EMATCH_TREE_LIST,
  	__TCA_EMATCH_TREE_MAX
  };
  #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
d94d9fee9   Eric Dumazet   net: cleanup incl...
377
  struct tcf_ematch_hdr {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
  	__u16		matchid;
  	__u16		kind;
  	__u16		flags;
  	__u16		pad; /* currently unused */
  };
  
  /*  0                   1
   *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
   * +-----------------------+-+-+---+
   * |         Unused        |S|I| R |
   * +-----------------------+-+-+---+
   *
   * R(2) ::= relation to next ematch
   *          where: 0 0 END (last ematch)
   *                 0 1 AND
   *                 1 0 OR
   *                 1 1 Unused (invalid)
   * I(1) ::= invert result
   * S(1) ::= simple payload
   */
  #define TCF_EM_REL_END	0
  #define TCF_EM_REL_AND	(1<<0)
  #define TCF_EM_REL_OR	(1<<1)
  #define TCF_EM_INVERT	(1<<2)
  #define TCF_EM_SIMPLE	(1<<3)
  
  #define TCF_EM_REL_MASK	3
  #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
d94d9fee9   Eric Dumazet   net: cleanup incl...
406
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
407
408
409
410
411
412
413
414
415
416
417
  	TCF_LAYER_LINK,
  	TCF_LAYER_NETWORK,
  	TCF_LAYER_TRANSPORT,
  	__TCF_LAYER_MAX
  };
  #define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
  
  /* Ematch type assignments
   *   1..32767		Reserved for ematches inside kernel tree
   *   32768..65535	Free to use, not reliable
   */
db3d99c09   Patrick McHardy   [NET_SCHED]: emat...
418
419
420
421
422
423
  #define	TCF_EM_CONTAINER	0
  #define	TCF_EM_CMP		1
  #define	TCF_EM_NBYTE		2
  #define	TCF_EM_U32		3
  #define	TCF_EM_META		4
  #define	TCF_EM_TEXT		5
3113e88c3   Stephen Hemminger   [PKT_SCHED]: vlan...
424
425
  #define        TCF_EM_VLAN		6
  #define	TCF_EM_MAX		6
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
426

d94d9fee9   Eric Dumazet   net: cleanup incl...
427
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
428
429
  	TCF_EM_PROG_TC
  };
d94d9fee9   Eric Dumazet   net: cleanup incl...
430
  enum {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
431
432
433
434
435
436
  	TCF_EM_OPND_EQ,
  	TCF_EM_OPND_GT,
  	TCF_EM_OPND_LT
  };
  
  #endif