0001
0002 #ifndef __LINUX_PKT_CLS_H
0003 #define __LINUX_PKT_CLS_H
0004
0005 #include <linux/types.h>
0006 #include <linux/pkt_sched.h>
0007
0008 #define TC_COOKIE_MAX_SIZE 16
0009
0010
0011 enum {
0012 TCA_ACT_UNSPEC,
0013 TCA_ACT_KIND,
0014 TCA_ACT_OPTIONS,
0015 TCA_ACT_INDEX,
0016 TCA_ACT_STATS,
0017 TCA_ACT_PAD,
0018 TCA_ACT_COOKIE,
0019 __TCA_ACT_MAX
0020 };
0021
0022 #define TCA_ACT_MAX __TCA_ACT_MAX
0023 #define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
0024 #define TCA_ACT_MAX_PRIO 32
0025 #define TCA_ACT_BIND 1
0026 #define TCA_ACT_NOBIND 0
0027 #define TCA_ACT_UNBIND 1
0028 #define TCA_ACT_NOUNBIND 0
0029 #define TCA_ACT_REPLACE 1
0030 #define TCA_ACT_NOREPLACE 0
0031
0032 #define TC_ACT_UNSPEC (-1)
0033 #define TC_ACT_OK 0
0034 #define TC_ACT_RECLASSIFY 1
0035 #define TC_ACT_SHOT 2
0036 #define TC_ACT_PIPE 3
0037 #define TC_ACT_STOLEN 4
0038 #define TC_ACT_QUEUED 5
0039 #define TC_ACT_REPEAT 6
0040 #define TC_ACT_REDIRECT 7
0041 #define TC_ACT_TRAP 8
0042
0043
0044
0045
0046
0047
0048 #define TC_ACT_VALUE_MAX TC_ACT_TRAP
0049
0050
0051
0052
0053
0054
0055
0056 #define __TC_ACT_EXT_SHIFT 28
0057 #define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
0058 #define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
0059 #define TC_ACT_EXT_OPCODE(combined) ((combined) & (~TC_ACT_EXT_VAL_MASK))
0060 #define TC_ACT_EXT_CMP(combined, opcode) (TC_ACT_EXT_OPCODE(combined) == opcode)
0061
0062 #define TC_ACT_JUMP __TC_ACT_EXT(1)
0063 #define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
0064 #define TC_ACT_EXT_OPCODE_MAX TC_ACT_GOTO_CHAIN
0065
0066
0067 enum {
0068 TCA_ID_UNSPEC=0,
0069 TCA_ID_POLICE=1,
0070
0071 __TCA_ID_MAX=255
0072 };
0073
0074 #define TCA_ID_MAX __TCA_ID_MAX
0075
0076 struct tc_police {
0077 __u32 index;
0078 int action;
0079 #define TC_POLICE_UNSPEC TC_ACT_UNSPEC
0080 #define TC_POLICE_OK TC_ACT_OK
0081 #define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY
0082 #define TC_POLICE_SHOT TC_ACT_SHOT
0083 #define TC_POLICE_PIPE TC_ACT_PIPE
0084
0085 __u32 limit;
0086 __u32 burst;
0087 __u32 mtu;
0088 struct tc_ratespec rate;
0089 struct tc_ratespec peakrate;
0090 int refcnt;
0091 int bindcnt;
0092 __u32 capab;
0093 };
0094
0095 struct tcf_t {
0096 __u64 install;
0097 __u64 lastuse;
0098 __u64 expires;
0099 __u64 firstuse;
0100 };
0101
0102 struct tc_cnt {
0103 int refcnt;
0104 int bindcnt;
0105 };
0106
0107 #define tc_gen \
0108 __u32 index; \
0109 __u32 capab; \
0110 int action; \
0111 int refcnt; \
0112 int bindcnt
0113
0114 enum {
0115 TCA_POLICE_UNSPEC,
0116 TCA_POLICE_TBF,
0117 TCA_POLICE_RATE,
0118 TCA_POLICE_PEAKRATE,
0119 TCA_POLICE_AVRATE,
0120 TCA_POLICE_RESULT,
0121 TCA_POLICE_TM,
0122 TCA_POLICE_PAD,
0123 __TCA_POLICE_MAX
0124 #define TCA_POLICE_RESULT TCA_POLICE_RESULT
0125 };
0126
0127 #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
0128
0129
0130 #define TCA_CLS_FLAGS_SKIP_HW (1 << 0)
0131 #define TCA_CLS_FLAGS_SKIP_SW (1 << 1)
0132 #define TCA_CLS_FLAGS_IN_HW (1 << 2)
0133 #define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3)
0134 #define TCA_CLS_FLAGS_VERBOSE (1 << 4)
0135
0136
0137
0138 #define TC_U32_HTID(h) ((h)&0xFFF00000)
0139 #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
0140 #define TC_U32_HASH(h) (((h)>>12)&0xFF)
0141 #define TC_U32_NODE(h) ((h)&0xFFF)
0142 #define TC_U32_KEY(h) ((h)&0xFFFFF)
0143 #define TC_U32_UNSPEC 0
0144 #define TC_U32_ROOT (0xFFF00000)
0145
0146 enum {
0147 TCA_U32_UNSPEC,
0148 TCA_U32_CLASSID,
0149 TCA_U32_HASH,
0150 TCA_U32_LINK,
0151 TCA_U32_DIVISOR,
0152 TCA_U32_SEL,
0153 TCA_U32_POLICE,
0154 TCA_U32_ACT,
0155 TCA_U32_INDEV,
0156 TCA_U32_PCNT,
0157 TCA_U32_MARK,
0158 TCA_U32_FLAGS,
0159 TCA_U32_PAD,
0160 __TCA_U32_MAX
0161 };
0162
0163 #define TCA_U32_MAX (__TCA_U32_MAX - 1)
0164
0165 struct tc_u32_key {
0166 __be32 mask;
0167 __be32 val;
0168 int off;
0169 int offmask;
0170 };
0171
0172 struct tc_u32_sel {
0173 unsigned char flags;
0174 unsigned char offshift;
0175 unsigned char nkeys;
0176
0177 __be16 offmask;
0178 __u16 off;
0179 short offoff;
0180
0181 short hoff;
0182 __be32 hmask;
0183 struct tc_u32_key keys[];
0184 };
0185
0186 struct tc_u32_mark {
0187 __u32 val;
0188 __u32 mask;
0189 __u32 success;
0190 };
0191
0192 struct tc_u32_pcnt {
0193 __u64 rcnt;
0194 __u64 rhit;
0195 __u64 kcnts[];
0196 };
0197
0198
0199
0200 #define TC_U32_TERMINAL 1
0201 #define TC_U32_OFFSET 2
0202 #define TC_U32_VAROFFSET 4
0203 #define TC_U32_EAT 8
0204
0205 #define TC_U32_MAXDEPTH 8
0206
0207
0208
0209
0210 enum {
0211 TCA_RSVP_UNSPEC,
0212 TCA_RSVP_CLASSID,
0213 TCA_RSVP_DST,
0214 TCA_RSVP_SRC,
0215 TCA_RSVP_PINFO,
0216 TCA_RSVP_POLICE,
0217 TCA_RSVP_ACT,
0218 __TCA_RSVP_MAX
0219 };
0220
0221 #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
0222
0223 struct tc_rsvp_gpi {
0224 __u32 key;
0225 __u32 mask;
0226 int offset;
0227 };
0228
0229 struct tc_rsvp_pinfo {
0230 struct tc_rsvp_gpi dpi;
0231 struct tc_rsvp_gpi spi;
0232 __u8 protocol;
0233 __u8 tunnelid;
0234 __u8 tunnelhdr;
0235 __u8 pad;
0236 };
0237
0238
0239
0240 enum {
0241 TCA_ROUTE4_UNSPEC,
0242 TCA_ROUTE4_CLASSID,
0243 TCA_ROUTE4_TO,
0244 TCA_ROUTE4_FROM,
0245 TCA_ROUTE4_IIF,
0246 TCA_ROUTE4_POLICE,
0247 TCA_ROUTE4_ACT,
0248 __TCA_ROUTE4_MAX
0249 };
0250
0251 #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
0252
0253
0254
0255
0256 enum {
0257 TCA_FW_UNSPEC,
0258 TCA_FW_CLASSID,
0259 TCA_FW_POLICE,
0260 TCA_FW_INDEV,
0261 TCA_FW_ACT,
0262 TCA_FW_MASK,
0263 __TCA_FW_MAX
0264 };
0265
0266 #define TCA_FW_MAX (__TCA_FW_MAX - 1)
0267
0268
0269
0270 enum {
0271 TCA_TCINDEX_UNSPEC,
0272 TCA_TCINDEX_HASH,
0273 TCA_TCINDEX_MASK,
0274 TCA_TCINDEX_SHIFT,
0275 TCA_TCINDEX_FALL_THROUGH,
0276 TCA_TCINDEX_CLASSID,
0277 TCA_TCINDEX_POLICE,
0278 TCA_TCINDEX_ACT,
0279 __TCA_TCINDEX_MAX
0280 };
0281
0282 #define TCA_TCINDEX_MAX (__TCA_TCINDEX_MAX - 1)
0283
0284
0285
0286 enum {
0287 FLOW_KEY_SRC,
0288 FLOW_KEY_DST,
0289 FLOW_KEY_PROTO,
0290 FLOW_KEY_PROTO_SRC,
0291 FLOW_KEY_PROTO_DST,
0292 FLOW_KEY_IIF,
0293 FLOW_KEY_PRIORITY,
0294 FLOW_KEY_MARK,
0295 FLOW_KEY_NFCT,
0296 FLOW_KEY_NFCT_SRC,
0297 FLOW_KEY_NFCT_DST,
0298 FLOW_KEY_NFCT_PROTO_SRC,
0299 FLOW_KEY_NFCT_PROTO_DST,
0300 FLOW_KEY_RTCLASSID,
0301 FLOW_KEY_SKUID,
0302 FLOW_KEY_SKGID,
0303 FLOW_KEY_VLAN_TAG,
0304 FLOW_KEY_RXHASH,
0305 __FLOW_KEY_MAX,
0306 };
0307
0308 #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1)
0309
0310 enum {
0311 FLOW_MODE_MAP,
0312 FLOW_MODE_HASH,
0313 };
0314
0315 enum {
0316 TCA_FLOW_UNSPEC,
0317 TCA_FLOW_KEYS,
0318 TCA_FLOW_MODE,
0319 TCA_FLOW_BASECLASS,
0320 TCA_FLOW_RSHIFT,
0321 TCA_FLOW_ADDEND,
0322 TCA_FLOW_MASK,
0323 TCA_FLOW_XOR,
0324 TCA_FLOW_DIVISOR,
0325 TCA_FLOW_ACT,
0326 TCA_FLOW_POLICE,
0327 TCA_FLOW_EMATCHES,
0328 TCA_FLOW_PERTURB,
0329 __TCA_FLOW_MAX
0330 };
0331
0332 #define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1)
0333
0334
0335
0336 enum {
0337 TCA_BASIC_UNSPEC,
0338 TCA_BASIC_CLASSID,
0339 TCA_BASIC_EMATCHES,
0340 TCA_BASIC_ACT,
0341 TCA_BASIC_POLICE,
0342 __TCA_BASIC_MAX
0343 };
0344
0345 #define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
0346
0347
0348
0349
0350 enum {
0351 TCA_CGROUP_UNSPEC,
0352 TCA_CGROUP_ACT,
0353 TCA_CGROUP_POLICE,
0354 TCA_CGROUP_EMATCHES,
0355 __TCA_CGROUP_MAX,
0356 };
0357
0358 #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
0359
0360
0361
0362 #define TCA_BPF_FLAG_ACT_DIRECT (1 << 0)
0363
0364 enum {
0365 TCA_BPF_UNSPEC,
0366 TCA_BPF_ACT,
0367 TCA_BPF_POLICE,
0368 TCA_BPF_CLASSID,
0369 TCA_BPF_OPS_LEN,
0370 TCA_BPF_OPS,
0371 TCA_BPF_FD,
0372 TCA_BPF_NAME,
0373 TCA_BPF_FLAGS,
0374 TCA_BPF_FLAGS_GEN,
0375 TCA_BPF_TAG,
0376 TCA_BPF_ID,
0377 __TCA_BPF_MAX,
0378 };
0379
0380 #define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
0381
0382
0383
0384 enum {
0385 TCA_FLOWER_UNSPEC,
0386 TCA_FLOWER_CLASSID,
0387 TCA_FLOWER_INDEV,
0388 TCA_FLOWER_ACT,
0389 TCA_FLOWER_KEY_ETH_DST,
0390 TCA_FLOWER_KEY_ETH_DST_MASK,
0391 TCA_FLOWER_KEY_ETH_SRC,
0392 TCA_FLOWER_KEY_ETH_SRC_MASK,
0393 TCA_FLOWER_KEY_ETH_TYPE,
0394 TCA_FLOWER_KEY_IP_PROTO,
0395 TCA_FLOWER_KEY_IPV4_SRC,
0396 TCA_FLOWER_KEY_IPV4_SRC_MASK,
0397 TCA_FLOWER_KEY_IPV4_DST,
0398 TCA_FLOWER_KEY_IPV4_DST_MASK,
0399 TCA_FLOWER_KEY_IPV6_SRC,
0400 TCA_FLOWER_KEY_IPV6_SRC_MASK,
0401 TCA_FLOWER_KEY_IPV6_DST,
0402 TCA_FLOWER_KEY_IPV6_DST_MASK,
0403 TCA_FLOWER_KEY_TCP_SRC,
0404 TCA_FLOWER_KEY_TCP_DST,
0405 TCA_FLOWER_KEY_UDP_SRC,
0406 TCA_FLOWER_KEY_UDP_DST,
0407
0408 TCA_FLOWER_FLAGS,
0409 TCA_FLOWER_KEY_VLAN_ID,
0410 TCA_FLOWER_KEY_VLAN_PRIO,
0411 TCA_FLOWER_KEY_VLAN_ETH_TYPE,
0412
0413 TCA_FLOWER_KEY_ENC_KEY_ID,
0414 TCA_FLOWER_KEY_ENC_IPV4_SRC,
0415 TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,
0416 TCA_FLOWER_KEY_ENC_IPV4_DST,
0417 TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,
0418 TCA_FLOWER_KEY_ENC_IPV6_SRC,
0419 TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,
0420 TCA_FLOWER_KEY_ENC_IPV6_DST,
0421 TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,
0422
0423 TCA_FLOWER_KEY_TCP_SRC_MASK,
0424 TCA_FLOWER_KEY_TCP_DST_MASK,
0425 TCA_FLOWER_KEY_UDP_SRC_MASK,
0426 TCA_FLOWER_KEY_UDP_DST_MASK,
0427 TCA_FLOWER_KEY_SCTP_SRC_MASK,
0428 TCA_FLOWER_KEY_SCTP_DST_MASK,
0429
0430 TCA_FLOWER_KEY_SCTP_SRC,
0431 TCA_FLOWER_KEY_SCTP_DST,
0432
0433 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,
0434 TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,
0435 TCA_FLOWER_KEY_ENC_UDP_DST_PORT,
0436 TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,
0437
0438 TCA_FLOWER_KEY_FLAGS,
0439 TCA_FLOWER_KEY_FLAGS_MASK,
0440
0441 TCA_FLOWER_KEY_ICMPV4_CODE,
0442 TCA_FLOWER_KEY_ICMPV4_CODE_MASK,
0443 TCA_FLOWER_KEY_ICMPV4_TYPE,
0444 TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,
0445 TCA_FLOWER_KEY_ICMPV6_CODE,
0446 TCA_FLOWER_KEY_ICMPV6_CODE_MASK,
0447 TCA_FLOWER_KEY_ICMPV6_TYPE,
0448 TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,
0449
0450 TCA_FLOWER_KEY_ARP_SIP,
0451 TCA_FLOWER_KEY_ARP_SIP_MASK,
0452 TCA_FLOWER_KEY_ARP_TIP,
0453 TCA_FLOWER_KEY_ARP_TIP_MASK,
0454 TCA_FLOWER_KEY_ARP_OP,
0455 TCA_FLOWER_KEY_ARP_OP_MASK,
0456 TCA_FLOWER_KEY_ARP_SHA,
0457 TCA_FLOWER_KEY_ARP_SHA_MASK,
0458 TCA_FLOWER_KEY_ARP_THA,
0459 TCA_FLOWER_KEY_ARP_THA_MASK,
0460
0461 TCA_FLOWER_KEY_MPLS_TTL,
0462 TCA_FLOWER_KEY_MPLS_BOS,
0463 TCA_FLOWER_KEY_MPLS_TC,
0464 TCA_FLOWER_KEY_MPLS_LABEL,
0465
0466 TCA_FLOWER_KEY_TCP_FLAGS,
0467 TCA_FLOWER_KEY_TCP_FLAGS_MASK,
0468
0469 TCA_FLOWER_KEY_IP_TOS,
0470 TCA_FLOWER_KEY_IP_TOS_MASK,
0471 TCA_FLOWER_KEY_IP_TTL,
0472 TCA_FLOWER_KEY_IP_TTL_MASK,
0473
0474 TCA_FLOWER_KEY_CVLAN_ID,
0475 TCA_FLOWER_KEY_CVLAN_PRIO,
0476 TCA_FLOWER_KEY_CVLAN_ETH_TYPE,
0477
0478 TCA_FLOWER_KEY_ENC_IP_TOS,
0479 TCA_FLOWER_KEY_ENC_IP_TOS_MASK,
0480 TCA_FLOWER_KEY_ENC_IP_TTL,
0481 TCA_FLOWER_KEY_ENC_IP_TTL_MASK,
0482
0483 TCA_FLOWER_KEY_ENC_OPTS,
0484 TCA_FLOWER_KEY_ENC_OPTS_MASK,
0485
0486 TCA_FLOWER_IN_HW_COUNT,
0487
0488 __TCA_FLOWER_MAX,
0489 };
0490
0491 #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
0492
0493 enum {
0494 TCA_FLOWER_KEY_ENC_OPTS_UNSPEC,
0495 TCA_FLOWER_KEY_ENC_OPTS_GENEVE,
0496
0497
0498
0499 __TCA_FLOWER_KEY_ENC_OPTS_MAX,
0500 };
0501
0502 #define TCA_FLOWER_KEY_ENC_OPTS_MAX (__TCA_FLOWER_KEY_ENC_OPTS_MAX - 1)
0503
0504 enum {
0505 TCA_FLOWER_KEY_ENC_OPT_GENEVE_UNSPEC,
0506 TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS,
0507 TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE,
0508 TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA,
0509
0510 __TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX,
0511 };
0512
0513 #define TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX \
0514 (__TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX - 1)
0515
0516 enum {
0517 TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
0518 TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = (1 << 1),
0519 };
0520
0521
0522
0523 enum {
0524 TCA_MATCHALL_UNSPEC,
0525 TCA_MATCHALL_CLASSID,
0526 TCA_MATCHALL_ACT,
0527 TCA_MATCHALL_FLAGS,
0528 __TCA_MATCHALL_MAX,
0529 };
0530
0531 #define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1)
0532
0533
0534
0535 struct tcf_ematch_tree_hdr {
0536 __u16 nmatches;
0537 __u16 progid;
0538 };
0539
0540 enum {
0541 TCA_EMATCH_TREE_UNSPEC,
0542 TCA_EMATCH_TREE_HDR,
0543 TCA_EMATCH_TREE_LIST,
0544 __TCA_EMATCH_TREE_MAX
0545 };
0546 #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
0547
0548 struct tcf_ematch_hdr {
0549 __u16 matchid;
0550 __u16 kind;
0551 __u16 flags;
0552 __u16 pad;
0553 };
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569 #define TCF_EM_REL_END 0
0570 #define TCF_EM_REL_AND (1<<0)
0571 #define TCF_EM_REL_OR (1<<1)
0572 #define TCF_EM_INVERT (1<<2)
0573 #define TCF_EM_SIMPLE (1<<3)
0574
0575 #define TCF_EM_REL_MASK 3
0576 #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
0577
0578 enum {
0579 TCF_LAYER_LINK,
0580 TCF_LAYER_NETWORK,
0581 TCF_LAYER_TRANSPORT,
0582 __TCF_LAYER_MAX
0583 };
0584 #define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
0585
0586
0587
0588
0589
0590 #define TCF_EM_CONTAINER 0
0591 #define TCF_EM_CMP 1
0592 #define TCF_EM_NBYTE 2
0593 #define TCF_EM_U32 3
0594 #define TCF_EM_META 4
0595 #define TCF_EM_TEXT 5
0596 #define TCF_EM_VLAN 6
0597 #define TCF_EM_CANID 7
0598 #define TCF_EM_IPSET 8
0599 #define TCF_EM_IPT 9
0600 #define TCF_EM_MAX 9
0601
0602 enum {
0603 TCF_EM_PROG_TC
0604 };
0605
0606 enum {
0607 TCF_EM_OPND_EQ,
0608 TCF_EM_OPND_GT,
0609 TCF_EM_OPND_LT
0610 };
0611
0612 #endif