Blame view
include/linux/pkt_cls.h
9.09 KB
1da177e4c
|
1 2 |
#ifndef __LINUX_PKT_CLS_H #define __LINUX_PKT_CLS_H |
ed307444d
|
3 |
#include <linux/types.h> |
1da177e4c
|
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
|
77 |
enum { |
1da177e4c
|
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
|
109 |
enum { |
1da177e4c
|
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
|
117 |
struct tc_police { |
1da177e4c
|
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
|
135 |
struct tcf_t { |
1da177e4c
|
136 137 138 139 |
__u64 install; __u64 lastuse; __u64 expires; }; |
d94d9fee9
|
140 |
struct tc_cnt { |
1da177e4c
|
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
|
151 |
enum { |
1da177e4c
|
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
|
173 |
enum { |
1da177e4c
|
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
|
189 |
struct tc_u32_key { |
0382b9c35
|
190 191 |
__be32 mask; __be32 val; |
1da177e4c
|
192 193 194 |
int off; int offmask; }; |
d94d9fee9
|
195 |
struct tc_u32_sel { |
1da177e4c
|
196 197 198 |
unsigned char flags; unsigned char offshift; unsigned char nkeys; |
0382b9c35
|
199 |
__be16 offmask; |
1da177e4c
|
200 201 202 203 |
__u16 off; short offoff; short hoff; |
0382b9c35
|
204 |
__be32 hmask; |
1da177e4c
|
205 206 |
struct tc_u32_key keys[0]; }; |
d94d9fee9
|
207 |
struct tc_u32_mark { |
1da177e4c
|
208 209 210 211 |
__u32 val; __u32 mask; __u32 success; }; |
d94d9fee9
|
212 |
struct tc_u32_pcnt { |
1da177e4c
|
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
|
229 |
enum { |
1da177e4c
|
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
|
241 |
struct tc_rsvp_gpi { |
1da177e4c
|
242 243 244 245 |
__u32 key; __u32 mask; int offset; }; |
d94d9fee9
|
246 |
struct tc_rsvp_pinfo { |
1da177e4c
|
247 248 249 250 251 |
struct tc_rsvp_gpi dpi; struct tc_rsvp_gpi spi; __u8 protocol; __u8 tunnelid; __u8 tunnelhdr; |
8a47077a0
|
252 |
__u8 pad; |
1da177e4c
|
253 254 255 |
}; /* ROUTE filter */ |
d94d9fee9
|
256 |
enum { |
1da177e4c
|
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
|
271 |
enum { |
1da177e4c
|
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
|
277 |
TCA_FW_MASK, |
1da177e4c
|
278 279 280 281 282 283 |
__TCA_FW_MAX }; #define TCA_FW_MAX (__TCA_FW_MAX - 1) /* TC index filter */ |
d94d9fee9
|
284 |
enum { |
1da177e4c
|
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
|
297 |
/* Flow filter */ |
d94d9fee9
|
298 |
enum { |
e5dfb8151
|
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
|
315 |
FLOW_KEY_VLAN_TAG, |
739a91ef0
|
316 |
FLOW_KEY_RXHASH, |
e5dfb8151
|
317 318 319 320 |
__FLOW_KEY_MAX, }; #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1) |
d94d9fee9
|
321 |
enum { |
e5dfb8151
|
322 323 324 |
FLOW_MODE_MAP, FLOW_MODE_HASH, }; |
d94d9fee9
|
325 |
enum { |
e5dfb8151
|
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
|
338 |
TCA_FLOW_PERTURB, |
e5dfb8151
|
339 340 341 342 |
__TCA_FLOW_MAX }; #define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1) |
1da177e4c
|
343 |
/* Basic filter */ |
d94d9fee9
|
344 |
enum { |
1da177e4c
|
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
|
354 355 |
/* Cgroup classifier */ |
d94d9fee9
|
356 |
enum { |
f40092373
|
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
|
365 |
/* Extended Matches */ |
d94d9fee9
|
366 |
struct tcf_ematch_tree_hdr { |
1da177e4c
|
367 368 369 |
__u16 nmatches; __u16 progid; }; |
d94d9fee9
|
370 |
enum { |
1da177e4c
|
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
|
377 |
struct tcf_ematch_hdr { |
1da177e4c
|
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
|
406 |
enum { |
1da177e4c
|
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
|
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
|
424 425 |
#define TCF_EM_VLAN 6 #define TCF_EM_MAX 6 |
1da177e4c
|
426 |
|
d94d9fee9
|
427 |
enum { |
1da177e4c
|
428 429 |
TCF_EM_PROG_TC }; |
d94d9fee9
|
430 |
enum { |
1da177e4c
|
431 432 433 434 435 436 |
TCF_EM_OPND_EQ, TCF_EM_OPND_GT, TCF_EM_OPND_LT }; #endif |