1607ca46eSDavid Howells #ifndef __LINUX_PKT_CLS_H 2607ca46eSDavid Howells #define __LINUX_PKT_CLS_H 3607ca46eSDavid Howells 4607ca46eSDavid Howells #include <linux/types.h> 5607ca46eSDavid Howells #include <linux/pkt_sched.h> 6607ca46eSDavid Howells 71045ba77SJamal Hadi Salim #define TC_COOKIE_MAX_SIZE 16 81045ba77SJamal Hadi Salim 9607ca46eSDavid Howells /* Action attributes */ 10607ca46eSDavid Howells enum { 11607ca46eSDavid Howells TCA_ACT_UNSPEC, 12607ca46eSDavid Howells TCA_ACT_KIND, 13607ca46eSDavid Howells TCA_ACT_OPTIONS, 14607ca46eSDavid Howells TCA_ACT_INDEX, 15607ca46eSDavid Howells TCA_ACT_STATS, 169854518eSNicolas Dichtel TCA_ACT_PAD, 171045ba77SJamal Hadi Salim TCA_ACT_COOKIE, 18607ca46eSDavid Howells __TCA_ACT_MAX 19607ca46eSDavid Howells }; 20607ca46eSDavid Howells 21607ca46eSDavid Howells #define TCA_ACT_MAX __TCA_ACT_MAX 22607ca46eSDavid Howells #define TCA_OLD_COMPAT (TCA_ACT_MAX+1) 23607ca46eSDavid Howells #define TCA_ACT_MAX_PRIO 32 24607ca46eSDavid Howells #define TCA_ACT_BIND 1 25607ca46eSDavid Howells #define TCA_ACT_NOBIND 0 26607ca46eSDavid Howells #define TCA_ACT_UNBIND 1 27607ca46eSDavid Howells #define TCA_ACT_NOUNBIND 0 28607ca46eSDavid Howells #define TCA_ACT_REPLACE 1 29607ca46eSDavid Howells #define TCA_ACT_NOREPLACE 0 30607ca46eSDavid Howells 31607ca46eSDavid Howells #define TC_ACT_UNSPEC (-1) 32607ca46eSDavid Howells #define TC_ACT_OK 0 33607ca46eSDavid Howells #define TC_ACT_RECLASSIFY 1 34607ca46eSDavid Howells #define TC_ACT_SHOT 2 35607ca46eSDavid Howells #define TC_ACT_PIPE 3 36607ca46eSDavid Howells #define TC_ACT_STOLEN 4 37607ca46eSDavid Howells #define TC_ACT_QUEUED 5 38607ca46eSDavid Howells #define TC_ACT_REPEAT 6 3927b29f63SAlexei Starovoitov #define TC_ACT_REDIRECT 7 409da3242eSJiri Pirko 419da3242eSJiri Pirko /* There is a special kind of actions called "extended actions", 429da3242eSJiri Pirko * which need a value parameter. These have a local opcode located in 439da3242eSJiri Pirko * the highest nibble, starting from 1. The rest of the bits 449da3242eSJiri Pirko * are used to carry the value. These two parts together make 459da3242eSJiri Pirko * a combined opcode. 469da3242eSJiri Pirko */ 479da3242eSJiri Pirko #define __TC_ACT_EXT_SHIFT 28 489da3242eSJiri Pirko #define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT) 499da3242eSJiri Pirko #define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1) 509da3242eSJiri Pirko #define TC_ACT_EXT_CMP(combined, opcode) \ 519da3242eSJiri Pirko (((combined) & (~TC_ACT_EXT_VAL_MASK)) == opcode) 529da3242eSJiri Pirko 539da3242eSJiri Pirko #define TC_ACT_JUMP __TC_ACT_EXT(1) 54db50514fSJiri Pirko #define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2) 55607ca46eSDavid Howells 56607ca46eSDavid Howells /* Action type identifiers*/ 57607ca46eSDavid Howells enum { 58607ca46eSDavid Howells TCA_ID_UNSPEC=0, 59607ca46eSDavid Howells TCA_ID_POLICE=1, 60607ca46eSDavid Howells /* other actions go here */ 61607ca46eSDavid Howells __TCA_ID_MAX=255 62607ca46eSDavid Howells }; 63607ca46eSDavid Howells 64607ca46eSDavid Howells #define TCA_ID_MAX __TCA_ID_MAX 65607ca46eSDavid Howells 66607ca46eSDavid Howells struct tc_police { 67607ca46eSDavid Howells __u32 index; 68607ca46eSDavid Howells int action; 69607ca46eSDavid Howells #define TC_POLICE_UNSPEC TC_ACT_UNSPEC 70607ca46eSDavid Howells #define TC_POLICE_OK TC_ACT_OK 71607ca46eSDavid Howells #define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY 72607ca46eSDavid Howells #define TC_POLICE_SHOT TC_ACT_SHOT 73607ca46eSDavid Howells #define TC_POLICE_PIPE TC_ACT_PIPE 74607ca46eSDavid Howells 75607ca46eSDavid Howells __u32 limit; 76607ca46eSDavid Howells __u32 burst; 77607ca46eSDavid Howells __u32 mtu; 78607ca46eSDavid Howells struct tc_ratespec rate; 79607ca46eSDavid Howells struct tc_ratespec peakrate; 80607ca46eSDavid Howells int refcnt; 81607ca46eSDavid Howells int bindcnt; 82607ca46eSDavid Howells __u32 capab; 83607ca46eSDavid Howells }; 84607ca46eSDavid Howells 85607ca46eSDavid Howells struct tcf_t { 86607ca46eSDavid Howells __u64 install; 87607ca46eSDavid Howells __u64 lastuse; 88607ca46eSDavid Howells __u64 expires; 8953eb440fSJamal Hadi Salim __u64 firstuse; 90607ca46eSDavid Howells }; 91607ca46eSDavid Howells 92607ca46eSDavid Howells struct tc_cnt { 93607ca46eSDavid Howells int refcnt; 94607ca46eSDavid Howells int bindcnt; 95607ca46eSDavid Howells }; 96607ca46eSDavid Howells 97607ca46eSDavid Howells #define tc_gen \ 98607ca46eSDavid Howells __u32 index; \ 99607ca46eSDavid Howells __u32 capab; \ 100607ca46eSDavid Howells int action; \ 101607ca46eSDavid Howells int refcnt; \ 102607ca46eSDavid Howells int bindcnt 103607ca46eSDavid Howells 104607ca46eSDavid Howells enum { 105607ca46eSDavid Howells TCA_POLICE_UNSPEC, 106607ca46eSDavid Howells TCA_POLICE_TBF, 107607ca46eSDavid Howells TCA_POLICE_RATE, 108607ca46eSDavid Howells TCA_POLICE_PEAKRATE, 109607ca46eSDavid Howells TCA_POLICE_AVRATE, 110607ca46eSDavid Howells TCA_POLICE_RESULT, 1113d3ed181SJamal Hadi Salim TCA_POLICE_TM, 1123d3ed181SJamal Hadi Salim TCA_POLICE_PAD, 113607ca46eSDavid Howells __TCA_POLICE_MAX 114607ca46eSDavid Howells #define TCA_POLICE_RESULT TCA_POLICE_RESULT 115607ca46eSDavid Howells }; 116607ca46eSDavid Howells 117607ca46eSDavid Howells #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1) 118607ca46eSDavid Howells 119760edee8SSamudrala, Sridhar /* tca flags definitions */ 120e696028aSOr Gerlitz #define TCA_CLS_FLAGS_SKIP_HW (1 << 0) /* don't offload filter to HW */ 121e696028aSOr Gerlitz #define TCA_CLS_FLAGS_SKIP_SW (1 << 1) /* don't use filter in SW */ 122e696028aSOr Gerlitz #define TCA_CLS_FLAGS_IN_HW (1 << 2) /* filter is offloaded to HW */ 123e696028aSOr Gerlitz #define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */ 124760edee8SSamudrala, Sridhar 125607ca46eSDavid Howells /* U32 filters */ 126607ca46eSDavid Howells 127607ca46eSDavid Howells #define TC_U32_HTID(h) ((h)&0xFFF00000) 128607ca46eSDavid Howells #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20) 129607ca46eSDavid Howells #define TC_U32_HASH(h) (((h)>>12)&0xFF) 130607ca46eSDavid Howells #define TC_U32_NODE(h) ((h)&0xFFF) 131607ca46eSDavid Howells #define TC_U32_KEY(h) ((h)&0xFFFFF) 132607ca46eSDavid Howells #define TC_U32_UNSPEC 0 133607ca46eSDavid Howells #define TC_U32_ROOT (0xFFF00000) 134607ca46eSDavid Howells 135607ca46eSDavid Howells enum { 136607ca46eSDavid Howells TCA_U32_UNSPEC, 137607ca46eSDavid Howells TCA_U32_CLASSID, 138607ca46eSDavid Howells TCA_U32_HASH, 139607ca46eSDavid Howells TCA_U32_LINK, 140607ca46eSDavid Howells TCA_U32_DIVISOR, 141607ca46eSDavid Howells TCA_U32_SEL, 142607ca46eSDavid Howells TCA_U32_POLICE, 143607ca46eSDavid Howells TCA_U32_ACT, 144607ca46eSDavid Howells TCA_U32_INDEV, 145607ca46eSDavid Howells TCA_U32_PCNT, 146607ca46eSDavid Howells TCA_U32_MARK, 1479e8ce79cSJohn Fastabend TCA_U32_FLAGS, 1489854518eSNicolas Dichtel TCA_U32_PAD, 149607ca46eSDavid Howells __TCA_U32_MAX 150607ca46eSDavid Howells }; 151607ca46eSDavid Howells 152607ca46eSDavid Howells #define TCA_U32_MAX (__TCA_U32_MAX - 1) 153607ca46eSDavid Howells 154607ca46eSDavid Howells struct tc_u32_key { 155607ca46eSDavid Howells __be32 mask; 156607ca46eSDavid Howells __be32 val; 157607ca46eSDavid Howells int off; 158607ca46eSDavid Howells int offmask; 159607ca46eSDavid Howells }; 160607ca46eSDavid Howells 161607ca46eSDavid Howells struct tc_u32_sel { 162607ca46eSDavid Howells unsigned char flags; 163607ca46eSDavid Howells unsigned char offshift; 164607ca46eSDavid Howells unsigned char nkeys; 165607ca46eSDavid Howells 166607ca46eSDavid Howells __be16 offmask; 167607ca46eSDavid Howells __u16 off; 168607ca46eSDavid Howells short offoff; 169607ca46eSDavid Howells 170607ca46eSDavid Howells short hoff; 171607ca46eSDavid Howells __be32 hmask; 172607ca46eSDavid Howells struct tc_u32_key keys[0]; 173607ca46eSDavid Howells }; 174607ca46eSDavid Howells 175607ca46eSDavid Howells struct tc_u32_mark { 176607ca46eSDavid Howells __u32 val; 177607ca46eSDavid Howells __u32 mask; 178607ca46eSDavid Howells __u32 success; 179607ca46eSDavid Howells }; 180607ca46eSDavid Howells 181607ca46eSDavid Howells struct tc_u32_pcnt { 182607ca46eSDavid Howells __u64 rcnt; 183607ca46eSDavid Howells __u64 rhit; 184607ca46eSDavid Howells __u64 kcnts[0]; 185607ca46eSDavid Howells }; 186607ca46eSDavid Howells 187607ca46eSDavid Howells /* Flags */ 188607ca46eSDavid Howells 189607ca46eSDavid Howells #define TC_U32_TERMINAL 1 190607ca46eSDavid Howells #define TC_U32_OFFSET 2 191607ca46eSDavid Howells #define TC_U32_VAROFFSET 4 192607ca46eSDavid Howells #define TC_U32_EAT 8 193607ca46eSDavid Howells 194607ca46eSDavid Howells #define TC_U32_MAXDEPTH 8 195607ca46eSDavid Howells 196607ca46eSDavid Howells 197607ca46eSDavid Howells /* RSVP filter */ 198607ca46eSDavid Howells 199607ca46eSDavid Howells enum { 200607ca46eSDavid Howells TCA_RSVP_UNSPEC, 201607ca46eSDavid Howells TCA_RSVP_CLASSID, 202607ca46eSDavid Howells TCA_RSVP_DST, 203607ca46eSDavid Howells TCA_RSVP_SRC, 204607ca46eSDavid Howells TCA_RSVP_PINFO, 205607ca46eSDavid Howells TCA_RSVP_POLICE, 206607ca46eSDavid Howells TCA_RSVP_ACT, 207607ca46eSDavid Howells __TCA_RSVP_MAX 208607ca46eSDavid Howells }; 209607ca46eSDavid Howells 210607ca46eSDavid Howells #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) 211607ca46eSDavid Howells 212607ca46eSDavid Howells struct tc_rsvp_gpi { 213607ca46eSDavid Howells __u32 key; 214607ca46eSDavid Howells __u32 mask; 215607ca46eSDavid Howells int offset; 216607ca46eSDavid Howells }; 217607ca46eSDavid Howells 218607ca46eSDavid Howells struct tc_rsvp_pinfo { 219607ca46eSDavid Howells struct tc_rsvp_gpi dpi; 220607ca46eSDavid Howells struct tc_rsvp_gpi spi; 221607ca46eSDavid Howells __u8 protocol; 222607ca46eSDavid Howells __u8 tunnelid; 223607ca46eSDavid Howells __u8 tunnelhdr; 224607ca46eSDavid Howells __u8 pad; 225607ca46eSDavid Howells }; 226607ca46eSDavid Howells 227607ca46eSDavid Howells /* ROUTE filter */ 228607ca46eSDavid Howells 229607ca46eSDavid Howells enum { 230607ca46eSDavid Howells TCA_ROUTE4_UNSPEC, 231607ca46eSDavid Howells TCA_ROUTE4_CLASSID, 232607ca46eSDavid Howells TCA_ROUTE4_TO, 233607ca46eSDavid Howells TCA_ROUTE4_FROM, 234607ca46eSDavid Howells TCA_ROUTE4_IIF, 235607ca46eSDavid Howells TCA_ROUTE4_POLICE, 236607ca46eSDavid Howells TCA_ROUTE4_ACT, 237607ca46eSDavid Howells __TCA_ROUTE4_MAX 238607ca46eSDavid Howells }; 239607ca46eSDavid Howells 240607ca46eSDavid Howells #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1) 241607ca46eSDavid Howells 242607ca46eSDavid Howells 243607ca46eSDavid Howells /* FW filter */ 244607ca46eSDavid Howells 245607ca46eSDavid Howells enum { 246607ca46eSDavid Howells TCA_FW_UNSPEC, 247607ca46eSDavid Howells TCA_FW_CLASSID, 248607ca46eSDavid Howells TCA_FW_POLICE, 249607ca46eSDavid Howells TCA_FW_INDEV, /* used by CONFIG_NET_CLS_IND */ 250607ca46eSDavid Howells TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */ 251607ca46eSDavid Howells TCA_FW_MASK, 252607ca46eSDavid Howells __TCA_FW_MAX 253607ca46eSDavid Howells }; 254607ca46eSDavid Howells 255607ca46eSDavid Howells #define TCA_FW_MAX (__TCA_FW_MAX - 1) 256607ca46eSDavid Howells 257607ca46eSDavid Howells /* TC index filter */ 258607ca46eSDavid Howells 259607ca46eSDavid Howells enum { 260607ca46eSDavid Howells TCA_TCINDEX_UNSPEC, 261607ca46eSDavid Howells TCA_TCINDEX_HASH, 262607ca46eSDavid Howells TCA_TCINDEX_MASK, 263607ca46eSDavid Howells TCA_TCINDEX_SHIFT, 264607ca46eSDavid Howells TCA_TCINDEX_FALL_THROUGH, 265607ca46eSDavid Howells TCA_TCINDEX_CLASSID, 266607ca46eSDavid Howells TCA_TCINDEX_POLICE, 267607ca46eSDavid Howells TCA_TCINDEX_ACT, 268607ca46eSDavid Howells __TCA_TCINDEX_MAX 269607ca46eSDavid Howells }; 270607ca46eSDavid Howells 271607ca46eSDavid Howells #define TCA_TCINDEX_MAX (__TCA_TCINDEX_MAX - 1) 272607ca46eSDavid Howells 273607ca46eSDavid Howells /* Flow filter */ 274607ca46eSDavid Howells 275607ca46eSDavid Howells enum { 276607ca46eSDavid Howells FLOW_KEY_SRC, 277607ca46eSDavid Howells FLOW_KEY_DST, 278607ca46eSDavid Howells FLOW_KEY_PROTO, 279607ca46eSDavid Howells FLOW_KEY_PROTO_SRC, 280607ca46eSDavid Howells FLOW_KEY_PROTO_DST, 281607ca46eSDavid Howells FLOW_KEY_IIF, 282607ca46eSDavid Howells FLOW_KEY_PRIORITY, 283607ca46eSDavid Howells FLOW_KEY_MARK, 284607ca46eSDavid Howells FLOW_KEY_NFCT, 285607ca46eSDavid Howells FLOW_KEY_NFCT_SRC, 286607ca46eSDavid Howells FLOW_KEY_NFCT_DST, 287607ca46eSDavid Howells FLOW_KEY_NFCT_PROTO_SRC, 288607ca46eSDavid Howells FLOW_KEY_NFCT_PROTO_DST, 289607ca46eSDavid Howells FLOW_KEY_RTCLASSID, 290607ca46eSDavid Howells FLOW_KEY_SKUID, 291607ca46eSDavid Howells FLOW_KEY_SKGID, 292607ca46eSDavid Howells FLOW_KEY_VLAN_TAG, 293607ca46eSDavid Howells FLOW_KEY_RXHASH, 294607ca46eSDavid Howells __FLOW_KEY_MAX, 295607ca46eSDavid Howells }; 296607ca46eSDavid Howells 297607ca46eSDavid Howells #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1) 298607ca46eSDavid Howells 299607ca46eSDavid Howells enum { 300607ca46eSDavid Howells FLOW_MODE_MAP, 301607ca46eSDavid Howells FLOW_MODE_HASH, 302607ca46eSDavid Howells }; 303607ca46eSDavid Howells 304607ca46eSDavid Howells enum { 305607ca46eSDavid Howells TCA_FLOW_UNSPEC, 306607ca46eSDavid Howells TCA_FLOW_KEYS, 307607ca46eSDavid Howells TCA_FLOW_MODE, 308607ca46eSDavid Howells TCA_FLOW_BASECLASS, 309607ca46eSDavid Howells TCA_FLOW_RSHIFT, 310607ca46eSDavid Howells TCA_FLOW_ADDEND, 311607ca46eSDavid Howells TCA_FLOW_MASK, 312607ca46eSDavid Howells TCA_FLOW_XOR, 313607ca46eSDavid Howells TCA_FLOW_DIVISOR, 314607ca46eSDavid Howells TCA_FLOW_ACT, 315607ca46eSDavid Howells TCA_FLOW_POLICE, 316607ca46eSDavid Howells TCA_FLOW_EMATCHES, 317607ca46eSDavid Howells TCA_FLOW_PERTURB, 318607ca46eSDavid Howells __TCA_FLOW_MAX 319607ca46eSDavid Howells }; 320607ca46eSDavid Howells 321607ca46eSDavid Howells #define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1) 322607ca46eSDavid Howells 323607ca46eSDavid Howells /* Basic filter */ 324607ca46eSDavid Howells 325607ca46eSDavid Howells enum { 326607ca46eSDavid Howells TCA_BASIC_UNSPEC, 327607ca46eSDavid Howells TCA_BASIC_CLASSID, 328607ca46eSDavid Howells TCA_BASIC_EMATCHES, 329607ca46eSDavid Howells TCA_BASIC_ACT, 330607ca46eSDavid Howells TCA_BASIC_POLICE, 331607ca46eSDavid Howells __TCA_BASIC_MAX 332607ca46eSDavid Howells }; 333607ca46eSDavid Howells 334607ca46eSDavid Howells #define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1) 335607ca46eSDavid Howells 336607ca46eSDavid Howells 337607ca46eSDavid Howells /* Cgroup classifier */ 338607ca46eSDavid Howells 339607ca46eSDavid Howells enum { 340607ca46eSDavid Howells TCA_CGROUP_UNSPEC, 341607ca46eSDavid Howells TCA_CGROUP_ACT, 342607ca46eSDavid Howells TCA_CGROUP_POLICE, 343607ca46eSDavid Howells TCA_CGROUP_EMATCHES, 344607ca46eSDavid Howells __TCA_CGROUP_MAX, 345607ca46eSDavid Howells }; 346607ca46eSDavid Howells 347607ca46eSDavid Howells #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1) 348607ca46eSDavid Howells 3497d1d65cbSDaniel Borkmann /* BPF classifier */ 3507d1d65cbSDaniel Borkmann 351045efa82SDaniel Borkmann #define TCA_BPF_FLAG_ACT_DIRECT (1 << 0) 352045efa82SDaniel Borkmann 3537d1d65cbSDaniel Borkmann enum { 3547d1d65cbSDaniel Borkmann TCA_BPF_UNSPEC, 3557d1d65cbSDaniel Borkmann TCA_BPF_ACT, 3567d1d65cbSDaniel Borkmann TCA_BPF_POLICE, 3577d1d65cbSDaniel Borkmann TCA_BPF_CLASSID, 3587d1d65cbSDaniel Borkmann TCA_BPF_OPS_LEN, 3597d1d65cbSDaniel Borkmann TCA_BPF_OPS, 360e2e9b654SDaniel Borkmann TCA_BPF_FD, 361e2e9b654SDaniel Borkmann TCA_BPF_NAME, 362045efa82SDaniel Borkmann TCA_BPF_FLAGS, 3630d01d45fSJakub Kicinski TCA_BPF_FLAGS_GEN, 364f1f7714eSDaniel Borkmann TCA_BPF_TAG, 3657d1d65cbSDaniel Borkmann __TCA_BPF_MAX, 3667d1d65cbSDaniel Borkmann }; 3677d1d65cbSDaniel Borkmann 3687d1d65cbSDaniel Borkmann #define TCA_BPF_MAX (__TCA_BPF_MAX - 1) 3697d1d65cbSDaniel Borkmann 37077b9900eSJiri Pirko /* Flower classifier */ 37177b9900eSJiri Pirko 37277b9900eSJiri Pirko enum { 37377b9900eSJiri Pirko TCA_FLOWER_UNSPEC, 37477b9900eSJiri Pirko TCA_FLOWER_CLASSID, 37577b9900eSJiri Pirko TCA_FLOWER_INDEV, 37677b9900eSJiri Pirko TCA_FLOWER_ACT, 37777b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_DST, /* ETH_ALEN */ 37877b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_DST_MASK, /* ETH_ALEN */ 37977b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_SRC, /* ETH_ALEN */ 38077b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_SRC_MASK, /* ETH_ALEN */ 38177b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_TYPE, /* be16 */ 38277b9900eSJiri Pirko TCA_FLOWER_KEY_IP_PROTO, /* u8 */ 38377b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_SRC, /* be32 */ 38477b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_SRC_MASK, /* be32 */ 38577b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_DST, /* be32 */ 38677b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_DST_MASK, /* be32 */ 38777b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_SRC, /* struct in6_addr */ 38877b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_SRC_MASK, /* struct in6_addr */ 38977b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_DST, /* struct in6_addr */ 39077b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_DST_MASK, /* struct in6_addr */ 39177b9900eSJiri Pirko TCA_FLOWER_KEY_TCP_SRC, /* be16 */ 39277b9900eSJiri Pirko TCA_FLOWER_KEY_TCP_DST, /* be16 */ 39377b9900eSJiri Pirko TCA_FLOWER_KEY_UDP_SRC, /* be16 */ 39477b9900eSJiri Pirko TCA_FLOWER_KEY_UDP_DST, /* be16 */ 3955b33f488SAmir Vadai 3965b33f488SAmir Vadai TCA_FLOWER_FLAGS, 39737a6c151SOr Gerlitz TCA_FLOWER_KEY_VLAN_ID, /* be16 */ 39837a6c151SOr Gerlitz TCA_FLOWER_KEY_VLAN_PRIO, /* u8 */ 39937a6c151SOr Gerlitz TCA_FLOWER_KEY_VLAN_ETH_TYPE, /* be16 */ 400bc3103f1SAmir Vadai 401bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_KEY_ID, /* be32 */ 402bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_SRC, /* be32 */ 403bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */ 404bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_DST, /* be32 */ 405bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */ 406bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_SRC, /* struct in6_addr */ 407bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */ 408bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_DST, /* struct in6_addr */ 409bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */ 410bc3103f1SAmir Vadai 411aa72d708SOr Gerlitz TCA_FLOWER_KEY_TCP_SRC_MASK, /* be16 */ 412aa72d708SOr Gerlitz TCA_FLOWER_KEY_TCP_DST_MASK, /* be16 */ 413aa72d708SOr Gerlitz TCA_FLOWER_KEY_UDP_SRC_MASK, /* be16 */ 414aa72d708SOr Gerlitz TCA_FLOWER_KEY_UDP_DST_MASK, /* be16 */ 4155976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_SRC_MASK, /* be16 */ 4165976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_DST_MASK, /* be16 */ 4175976c5f4SSimon Horman 4185976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_SRC, /* be16 */ 4195976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_DST, /* be16 */ 420f4d997fdSHadar Hen Zion 421f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_SRC_PORT, /* be16 */ 422f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK, /* be16 */ 423f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_DST_PORT, /* be16 */ 424f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK, /* be16 */ 425faa3ffceSOr Gerlitz 426faa3ffceSOr Gerlitz TCA_FLOWER_KEY_FLAGS, /* be32 */ 427faa3ffceSOr Gerlitz TCA_FLOWER_KEY_FLAGS_MASK, /* be32 */ 4287b684884SSimon Horman 4297b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_CODE, /* u8 */ 4307b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */ 4317b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_TYPE, /* u8 */ 4327b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */ 4337b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_CODE, /* u8 */ 4347b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */ 4357b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_TYPE, /* u8 */ 4367b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */ 4377b684884SSimon Horman 43899d31326SSimon Horman TCA_FLOWER_KEY_ARP_SIP, /* be32 */ 43999d31326SSimon Horman TCA_FLOWER_KEY_ARP_SIP_MASK, /* be32 */ 44099d31326SSimon Horman TCA_FLOWER_KEY_ARP_TIP, /* be32 */ 44199d31326SSimon Horman TCA_FLOWER_KEY_ARP_TIP_MASK, /* be32 */ 44299d31326SSimon Horman TCA_FLOWER_KEY_ARP_OP, /* u8 */ 44399d31326SSimon Horman TCA_FLOWER_KEY_ARP_OP_MASK, /* u8 */ 44499d31326SSimon Horman TCA_FLOWER_KEY_ARP_SHA, /* ETH_ALEN */ 44599d31326SSimon Horman TCA_FLOWER_KEY_ARP_SHA_MASK, /* ETH_ALEN */ 44699d31326SSimon Horman TCA_FLOWER_KEY_ARP_THA, /* ETH_ALEN */ 44799d31326SSimon Horman TCA_FLOWER_KEY_ARP_THA_MASK, /* ETH_ALEN */ 44899d31326SSimon Horman 449a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_TTL, /* u8 - 8 bits */ 450a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_BOS, /* u8 - 1 bit */ 451a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_TC, /* u8 - 3 bits */ 452a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_LABEL, /* be32 - 20 bits */ 453a577d8f7SBenjamin LaHaise 454*fdfc7dd6SJiri Pirko TCA_FLOWER_KEY_TCP_FLAGS, /* be16 */ 455*fdfc7dd6SJiri Pirko TCA_FLOWER_KEY_TCP_FLAGS_MASK, /* be16 */ 456*fdfc7dd6SJiri Pirko 45777b9900eSJiri Pirko __TCA_FLOWER_MAX, 45877b9900eSJiri Pirko }; 45977b9900eSJiri Pirko 46077b9900eSJiri Pirko #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1) 46177b9900eSJiri Pirko 462faa3ffceSOr Gerlitz enum { 463faa3ffceSOr Gerlitz TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0), 464faa3ffceSOr Gerlitz }; 465faa3ffceSOr Gerlitz 466bf3994d2SJiri Pirko /* Match-all classifier */ 467bf3994d2SJiri Pirko 468bf3994d2SJiri Pirko enum { 469bf3994d2SJiri Pirko TCA_MATCHALL_UNSPEC, 470bf3994d2SJiri Pirko TCA_MATCHALL_CLASSID, 471bf3994d2SJiri Pirko TCA_MATCHALL_ACT, 472b87f7936SYotam Gigi TCA_MATCHALL_FLAGS, 473bf3994d2SJiri Pirko __TCA_MATCHALL_MAX, 474bf3994d2SJiri Pirko }; 475bf3994d2SJiri Pirko 476bf3994d2SJiri Pirko #define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1) 477bf3994d2SJiri Pirko 478607ca46eSDavid Howells /* Extended Matches */ 479607ca46eSDavid Howells 480607ca46eSDavid Howells struct tcf_ematch_tree_hdr { 481607ca46eSDavid Howells __u16 nmatches; 482607ca46eSDavid Howells __u16 progid; 483607ca46eSDavid Howells }; 484607ca46eSDavid Howells 485607ca46eSDavid Howells enum { 486607ca46eSDavid Howells TCA_EMATCH_TREE_UNSPEC, 487607ca46eSDavid Howells TCA_EMATCH_TREE_HDR, 488607ca46eSDavid Howells TCA_EMATCH_TREE_LIST, 489607ca46eSDavid Howells __TCA_EMATCH_TREE_MAX 490607ca46eSDavid Howells }; 491607ca46eSDavid Howells #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1) 492607ca46eSDavid Howells 493607ca46eSDavid Howells struct tcf_ematch_hdr { 494607ca46eSDavid Howells __u16 matchid; 495607ca46eSDavid Howells __u16 kind; 496607ca46eSDavid Howells __u16 flags; 497607ca46eSDavid Howells __u16 pad; /* currently unused */ 498607ca46eSDavid Howells }; 499607ca46eSDavid Howells 500607ca46eSDavid Howells /* 0 1 501607ca46eSDavid Howells * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 502607ca46eSDavid Howells * +-----------------------+-+-+---+ 503607ca46eSDavid Howells * | Unused |S|I| R | 504607ca46eSDavid Howells * +-----------------------+-+-+---+ 505607ca46eSDavid Howells * 506607ca46eSDavid Howells * R(2) ::= relation to next ematch 507607ca46eSDavid Howells * where: 0 0 END (last ematch) 508607ca46eSDavid Howells * 0 1 AND 509607ca46eSDavid Howells * 1 0 OR 510607ca46eSDavid Howells * 1 1 Unused (invalid) 511607ca46eSDavid Howells * I(1) ::= invert result 512607ca46eSDavid Howells * S(1) ::= simple payload 513607ca46eSDavid Howells */ 514607ca46eSDavid Howells #define TCF_EM_REL_END 0 515607ca46eSDavid Howells #define TCF_EM_REL_AND (1<<0) 516607ca46eSDavid Howells #define TCF_EM_REL_OR (1<<1) 517607ca46eSDavid Howells #define TCF_EM_INVERT (1<<2) 518607ca46eSDavid Howells #define TCF_EM_SIMPLE (1<<3) 519607ca46eSDavid Howells 520607ca46eSDavid Howells #define TCF_EM_REL_MASK 3 521607ca46eSDavid Howells #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK) 522607ca46eSDavid Howells 523607ca46eSDavid Howells enum { 524607ca46eSDavid Howells TCF_LAYER_LINK, 525607ca46eSDavid Howells TCF_LAYER_NETWORK, 526607ca46eSDavid Howells TCF_LAYER_TRANSPORT, 527607ca46eSDavid Howells __TCF_LAYER_MAX 528607ca46eSDavid Howells }; 529607ca46eSDavid Howells #define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1) 530607ca46eSDavid Howells 531607ca46eSDavid Howells /* Ematch type assignments 532607ca46eSDavid Howells * 1..32767 Reserved for ematches inside kernel tree 533607ca46eSDavid Howells * 32768..65535 Free to use, not reliable 534607ca46eSDavid Howells */ 535607ca46eSDavid Howells #define TCF_EM_CONTAINER 0 536607ca46eSDavid Howells #define TCF_EM_CMP 1 537607ca46eSDavid Howells #define TCF_EM_NBYTE 2 538607ca46eSDavid Howells #define TCF_EM_U32 3 539607ca46eSDavid Howells #define TCF_EM_META 4 540607ca46eSDavid Howells #define TCF_EM_TEXT 5 541607ca46eSDavid Howells #define TCF_EM_VLAN 6 542607ca46eSDavid Howells #define TCF_EM_CANID 7 543607ca46eSDavid Howells #define TCF_EM_IPSET 8 544607ca46eSDavid Howells #define TCF_EM_MAX 8 545607ca46eSDavid Howells 546607ca46eSDavid Howells enum { 547607ca46eSDavid Howells TCF_EM_PROG_TC 548607ca46eSDavid Howells }; 549607ca46eSDavid Howells 550607ca46eSDavid Howells enum { 551607ca46eSDavid Howells TCF_EM_OPND_EQ, 552607ca46eSDavid Howells TCF_EM_OPND_GT, 553607ca46eSDavid Howells TCF_EM_OPND_LT 554607ca46eSDavid Howells }; 555607ca46eSDavid Howells 556607ca46eSDavid Howells #endif 557