16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2607ca46eSDavid Howells #ifndef __LINUX_PKT_CLS_H 3607ca46eSDavid Howells #define __LINUX_PKT_CLS_H 4607ca46eSDavid Howells 5607ca46eSDavid Howells #include <linux/types.h> 6607ca46eSDavid Howells #include <linux/pkt_sched.h> 7607ca46eSDavid Howells 81045ba77SJamal Hadi Salim #define TC_COOKIE_MAX_SIZE 16 91045ba77SJamal Hadi Salim 10607ca46eSDavid Howells /* Action attributes */ 11607ca46eSDavid Howells enum { 12607ca46eSDavid Howells TCA_ACT_UNSPEC, 13607ca46eSDavid Howells TCA_ACT_KIND, 14607ca46eSDavid Howells TCA_ACT_OPTIONS, 15607ca46eSDavid Howells TCA_ACT_INDEX, 16607ca46eSDavid Howells TCA_ACT_STATS, 179854518eSNicolas Dichtel TCA_ACT_PAD, 181045ba77SJamal Hadi Salim TCA_ACT_COOKIE, 19607ca46eSDavid Howells __TCA_ACT_MAX 20607ca46eSDavid Howells }; 21607ca46eSDavid Howells 22607ca46eSDavid Howells #define TCA_ACT_MAX __TCA_ACT_MAX 23607ca46eSDavid Howells #define TCA_OLD_COMPAT (TCA_ACT_MAX+1) 24607ca46eSDavid Howells #define TCA_ACT_MAX_PRIO 32 25607ca46eSDavid Howells #define TCA_ACT_BIND 1 26607ca46eSDavid Howells #define TCA_ACT_NOBIND 0 27607ca46eSDavid Howells #define TCA_ACT_UNBIND 1 28607ca46eSDavid Howells #define TCA_ACT_NOUNBIND 0 29607ca46eSDavid Howells #define TCA_ACT_REPLACE 1 30607ca46eSDavid Howells #define TCA_ACT_NOREPLACE 0 31607ca46eSDavid Howells 32607ca46eSDavid Howells #define TC_ACT_UNSPEC (-1) 33607ca46eSDavid Howells #define TC_ACT_OK 0 34607ca46eSDavid Howells #define TC_ACT_RECLASSIFY 1 35607ca46eSDavid Howells #define TC_ACT_SHOT 2 36607ca46eSDavid Howells #define TC_ACT_PIPE 3 37607ca46eSDavid Howells #define TC_ACT_STOLEN 4 38607ca46eSDavid Howells #define TC_ACT_QUEUED 5 39607ca46eSDavid Howells #define TC_ACT_REPEAT 6 4027b29f63SAlexei Starovoitov #define TC_ACT_REDIRECT 7 41e25ea21fSJiri Pirko #define TC_ACT_TRAP 8 /* For hw path, this means "trap to cpu" 42e25ea21fSJiri Pirko * and don't further process the frame 43e25ea21fSJiri Pirko * in hardware. For sw path, this is 44e25ea21fSJiri Pirko * equivalent of TC_ACT_STOLEN - drop 45e25ea21fSJiri Pirko * the skb and act like everything 46e25ea21fSJiri Pirko * is alright. 47e25ea21fSJiri Pirko */ 48802bfb19SPaolo Abeni #define TC_ACT_VALUE_MAX TC_ACT_TRAP 499da3242eSJiri Pirko 509da3242eSJiri Pirko /* There is a special kind of actions called "extended actions", 519da3242eSJiri Pirko * which need a value parameter. These have a local opcode located in 529da3242eSJiri Pirko * the highest nibble, starting from 1. The rest of the bits 539da3242eSJiri Pirko * are used to carry the value. These two parts together make 549da3242eSJiri Pirko * a combined opcode. 559da3242eSJiri Pirko */ 569da3242eSJiri Pirko #define __TC_ACT_EXT_SHIFT 28 579da3242eSJiri Pirko #define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT) 589da3242eSJiri Pirko #define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1) 59802bfb19SPaolo Abeni #define TC_ACT_EXT_OPCODE(combined) ((combined) & (~TC_ACT_EXT_VAL_MASK)) 60802bfb19SPaolo Abeni #define TC_ACT_EXT_CMP(combined, opcode) (TC_ACT_EXT_OPCODE(combined) == opcode) 619da3242eSJiri Pirko 629da3242eSJiri Pirko #define TC_ACT_JUMP __TC_ACT_EXT(1) 63db50514fSJiri Pirko #define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2) 64802bfb19SPaolo Abeni #define TC_ACT_EXT_OPCODE_MAX TC_ACT_GOTO_CHAIN 65607ca46eSDavid Howells 66607ca46eSDavid Howells /* Action type identifiers*/ 67607ca46eSDavid Howells enum { 68607ca46eSDavid Howells TCA_ID_UNSPEC=0, 69607ca46eSDavid Howells TCA_ID_POLICE=1, 70607ca46eSDavid Howells /* other actions go here */ 71607ca46eSDavid Howells __TCA_ID_MAX=255 72607ca46eSDavid Howells }; 73607ca46eSDavid Howells 74607ca46eSDavid Howells #define TCA_ID_MAX __TCA_ID_MAX 75607ca46eSDavid Howells 76607ca46eSDavid Howells struct tc_police { 77607ca46eSDavid Howells __u32 index; 78607ca46eSDavid Howells int action; 79607ca46eSDavid Howells #define TC_POLICE_UNSPEC TC_ACT_UNSPEC 80607ca46eSDavid Howells #define TC_POLICE_OK TC_ACT_OK 81607ca46eSDavid Howells #define TC_POLICE_RECLASSIFY TC_ACT_RECLASSIFY 82607ca46eSDavid Howells #define TC_POLICE_SHOT TC_ACT_SHOT 83607ca46eSDavid Howells #define TC_POLICE_PIPE TC_ACT_PIPE 84607ca46eSDavid Howells 85607ca46eSDavid Howells __u32 limit; 86607ca46eSDavid Howells __u32 burst; 87607ca46eSDavid Howells __u32 mtu; 88607ca46eSDavid Howells struct tc_ratespec rate; 89607ca46eSDavid Howells struct tc_ratespec peakrate; 90607ca46eSDavid Howells int refcnt; 91607ca46eSDavid Howells int bindcnt; 92607ca46eSDavid Howells __u32 capab; 93607ca46eSDavid Howells }; 94607ca46eSDavid Howells 95607ca46eSDavid Howells struct tcf_t { 96607ca46eSDavid Howells __u64 install; 97607ca46eSDavid Howells __u64 lastuse; 98607ca46eSDavid Howells __u64 expires; 9953eb440fSJamal Hadi Salim __u64 firstuse; 100607ca46eSDavid Howells }; 101607ca46eSDavid Howells 102607ca46eSDavid Howells struct tc_cnt { 103607ca46eSDavid Howells int refcnt; 104607ca46eSDavid Howells int bindcnt; 105607ca46eSDavid Howells }; 106607ca46eSDavid Howells 107607ca46eSDavid Howells #define tc_gen \ 108607ca46eSDavid Howells __u32 index; \ 109607ca46eSDavid Howells __u32 capab; \ 110607ca46eSDavid Howells int action; \ 111607ca46eSDavid Howells int refcnt; \ 112607ca46eSDavid Howells int bindcnt 113607ca46eSDavid Howells 114607ca46eSDavid Howells enum { 115607ca46eSDavid Howells TCA_POLICE_UNSPEC, 116607ca46eSDavid Howells TCA_POLICE_TBF, 117607ca46eSDavid Howells TCA_POLICE_RATE, 118607ca46eSDavid Howells TCA_POLICE_PEAKRATE, 119607ca46eSDavid Howells TCA_POLICE_AVRATE, 120607ca46eSDavid Howells TCA_POLICE_RESULT, 1213d3ed181SJamal Hadi Salim TCA_POLICE_TM, 1223d3ed181SJamal Hadi Salim TCA_POLICE_PAD, 123607ca46eSDavid Howells __TCA_POLICE_MAX 124607ca46eSDavid Howells #define TCA_POLICE_RESULT TCA_POLICE_RESULT 125607ca46eSDavid Howells }; 126607ca46eSDavid Howells 127607ca46eSDavid Howells #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1) 128607ca46eSDavid Howells 129760edee8SSamudrala, Sridhar /* tca flags definitions */ 130e696028aSOr Gerlitz #define TCA_CLS_FLAGS_SKIP_HW (1 << 0) /* don't offload filter to HW */ 131e696028aSOr Gerlitz #define TCA_CLS_FLAGS_SKIP_SW (1 << 1) /* don't use filter in SW */ 132e696028aSOr Gerlitz #define TCA_CLS_FLAGS_IN_HW (1 << 2) /* filter is offloaded to HW */ 133e696028aSOr Gerlitz #define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */ 13481c7288bSMarcelo Ricardo Leitner #define TCA_CLS_FLAGS_VERBOSE (1 << 4) /* verbose logging */ 135760edee8SSamudrala, Sridhar 136607ca46eSDavid Howells /* U32 filters */ 137607ca46eSDavid Howells 138607ca46eSDavid Howells #define TC_U32_HTID(h) ((h)&0xFFF00000) 139607ca46eSDavid Howells #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20) 140607ca46eSDavid Howells #define TC_U32_HASH(h) (((h)>>12)&0xFF) 141607ca46eSDavid Howells #define TC_U32_NODE(h) ((h)&0xFFF) 142607ca46eSDavid Howells #define TC_U32_KEY(h) ((h)&0xFFFFF) 143607ca46eSDavid Howells #define TC_U32_UNSPEC 0 144607ca46eSDavid Howells #define TC_U32_ROOT (0xFFF00000) 145607ca46eSDavid Howells 146607ca46eSDavid Howells enum { 147607ca46eSDavid Howells TCA_U32_UNSPEC, 148607ca46eSDavid Howells TCA_U32_CLASSID, 149607ca46eSDavid Howells TCA_U32_HASH, 150607ca46eSDavid Howells TCA_U32_LINK, 151607ca46eSDavid Howells TCA_U32_DIVISOR, 152607ca46eSDavid Howells TCA_U32_SEL, 153607ca46eSDavid Howells TCA_U32_POLICE, 154607ca46eSDavid Howells TCA_U32_ACT, 155607ca46eSDavid Howells TCA_U32_INDEV, 156607ca46eSDavid Howells TCA_U32_PCNT, 157607ca46eSDavid Howells TCA_U32_MARK, 1589e8ce79cSJohn Fastabend TCA_U32_FLAGS, 1599854518eSNicolas Dichtel TCA_U32_PAD, 160607ca46eSDavid Howells __TCA_U32_MAX 161607ca46eSDavid Howells }; 162607ca46eSDavid Howells 163607ca46eSDavid Howells #define TCA_U32_MAX (__TCA_U32_MAX - 1) 164607ca46eSDavid Howells 165607ca46eSDavid Howells struct tc_u32_key { 166607ca46eSDavid Howells __be32 mask; 167607ca46eSDavid Howells __be32 val; 168607ca46eSDavid Howells int off; 169607ca46eSDavid Howells int offmask; 170607ca46eSDavid Howells }; 171607ca46eSDavid Howells 172607ca46eSDavid Howells struct tc_u32_sel { 173607ca46eSDavid Howells unsigned char flags; 174607ca46eSDavid Howells unsigned char offshift; 175607ca46eSDavid Howells unsigned char nkeys; 176607ca46eSDavid Howells 177607ca46eSDavid Howells __be16 offmask; 178607ca46eSDavid Howells __u16 off; 179607ca46eSDavid Howells short offoff; 180607ca46eSDavid Howells 181607ca46eSDavid Howells short hoff; 182607ca46eSDavid Howells __be32 hmask; 183607ca46eSDavid Howells struct tc_u32_key keys[0]; 184607ca46eSDavid Howells }; 185607ca46eSDavid Howells 186607ca46eSDavid Howells struct tc_u32_mark { 187607ca46eSDavid Howells __u32 val; 188607ca46eSDavid Howells __u32 mask; 189607ca46eSDavid Howells __u32 success; 190607ca46eSDavid Howells }; 191607ca46eSDavid Howells 192607ca46eSDavid Howells struct tc_u32_pcnt { 193607ca46eSDavid Howells __u64 rcnt; 194607ca46eSDavid Howells __u64 rhit; 195607ca46eSDavid Howells __u64 kcnts[0]; 196607ca46eSDavid Howells }; 197607ca46eSDavid Howells 198607ca46eSDavid Howells /* Flags */ 199607ca46eSDavid Howells 200607ca46eSDavid Howells #define TC_U32_TERMINAL 1 201607ca46eSDavid Howells #define TC_U32_OFFSET 2 202607ca46eSDavid Howells #define TC_U32_VAROFFSET 4 203607ca46eSDavid Howells #define TC_U32_EAT 8 204607ca46eSDavid Howells 205607ca46eSDavid Howells #define TC_U32_MAXDEPTH 8 206607ca46eSDavid Howells 207607ca46eSDavid Howells 208607ca46eSDavid Howells /* RSVP filter */ 209607ca46eSDavid Howells 210607ca46eSDavid Howells enum { 211607ca46eSDavid Howells TCA_RSVP_UNSPEC, 212607ca46eSDavid Howells TCA_RSVP_CLASSID, 213607ca46eSDavid Howells TCA_RSVP_DST, 214607ca46eSDavid Howells TCA_RSVP_SRC, 215607ca46eSDavid Howells TCA_RSVP_PINFO, 216607ca46eSDavid Howells TCA_RSVP_POLICE, 217607ca46eSDavid Howells TCA_RSVP_ACT, 218607ca46eSDavid Howells __TCA_RSVP_MAX 219607ca46eSDavid Howells }; 220607ca46eSDavid Howells 221607ca46eSDavid Howells #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 ) 222607ca46eSDavid Howells 223607ca46eSDavid Howells struct tc_rsvp_gpi { 224607ca46eSDavid Howells __u32 key; 225607ca46eSDavid Howells __u32 mask; 226607ca46eSDavid Howells int offset; 227607ca46eSDavid Howells }; 228607ca46eSDavid Howells 229607ca46eSDavid Howells struct tc_rsvp_pinfo { 230607ca46eSDavid Howells struct tc_rsvp_gpi dpi; 231607ca46eSDavid Howells struct tc_rsvp_gpi spi; 232607ca46eSDavid Howells __u8 protocol; 233607ca46eSDavid Howells __u8 tunnelid; 234607ca46eSDavid Howells __u8 tunnelhdr; 235607ca46eSDavid Howells __u8 pad; 236607ca46eSDavid Howells }; 237607ca46eSDavid Howells 238607ca46eSDavid Howells /* ROUTE filter */ 239607ca46eSDavid Howells 240607ca46eSDavid Howells enum { 241607ca46eSDavid Howells TCA_ROUTE4_UNSPEC, 242607ca46eSDavid Howells TCA_ROUTE4_CLASSID, 243607ca46eSDavid Howells TCA_ROUTE4_TO, 244607ca46eSDavid Howells TCA_ROUTE4_FROM, 245607ca46eSDavid Howells TCA_ROUTE4_IIF, 246607ca46eSDavid Howells TCA_ROUTE4_POLICE, 247607ca46eSDavid Howells TCA_ROUTE4_ACT, 248607ca46eSDavid Howells __TCA_ROUTE4_MAX 249607ca46eSDavid Howells }; 250607ca46eSDavid Howells 251607ca46eSDavid Howells #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1) 252607ca46eSDavid Howells 253607ca46eSDavid Howells 254607ca46eSDavid Howells /* FW filter */ 255607ca46eSDavid Howells 256607ca46eSDavid Howells enum { 257607ca46eSDavid Howells TCA_FW_UNSPEC, 258607ca46eSDavid Howells TCA_FW_CLASSID, 259607ca46eSDavid Howells TCA_FW_POLICE, 260607ca46eSDavid Howells TCA_FW_INDEV, /* used by CONFIG_NET_CLS_IND */ 261607ca46eSDavid Howells TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */ 262607ca46eSDavid Howells TCA_FW_MASK, 263607ca46eSDavid Howells __TCA_FW_MAX 264607ca46eSDavid Howells }; 265607ca46eSDavid Howells 266607ca46eSDavid Howells #define TCA_FW_MAX (__TCA_FW_MAX - 1) 267607ca46eSDavid Howells 268607ca46eSDavid Howells /* TC index filter */ 269607ca46eSDavid Howells 270607ca46eSDavid Howells enum { 271607ca46eSDavid Howells TCA_TCINDEX_UNSPEC, 272607ca46eSDavid Howells TCA_TCINDEX_HASH, 273607ca46eSDavid Howells TCA_TCINDEX_MASK, 274607ca46eSDavid Howells TCA_TCINDEX_SHIFT, 275607ca46eSDavid Howells TCA_TCINDEX_FALL_THROUGH, 276607ca46eSDavid Howells TCA_TCINDEX_CLASSID, 277607ca46eSDavid Howells TCA_TCINDEX_POLICE, 278607ca46eSDavid Howells TCA_TCINDEX_ACT, 279607ca46eSDavid Howells __TCA_TCINDEX_MAX 280607ca46eSDavid Howells }; 281607ca46eSDavid Howells 282607ca46eSDavid Howells #define TCA_TCINDEX_MAX (__TCA_TCINDEX_MAX - 1) 283607ca46eSDavid Howells 284607ca46eSDavid Howells /* Flow filter */ 285607ca46eSDavid Howells 286607ca46eSDavid Howells enum { 287607ca46eSDavid Howells FLOW_KEY_SRC, 288607ca46eSDavid Howells FLOW_KEY_DST, 289607ca46eSDavid Howells FLOW_KEY_PROTO, 290607ca46eSDavid Howells FLOW_KEY_PROTO_SRC, 291607ca46eSDavid Howells FLOW_KEY_PROTO_DST, 292607ca46eSDavid Howells FLOW_KEY_IIF, 293607ca46eSDavid Howells FLOW_KEY_PRIORITY, 294607ca46eSDavid Howells FLOW_KEY_MARK, 295607ca46eSDavid Howells FLOW_KEY_NFCT, 296607ca46eSDavid Howells FLOW_KEY_NFCT_SRC, 297607ca46eSDavid Howells FLOW_KEY_NFCT_DST, 298607ca46eSDavid Howells FLOW_KEY_NFCT_PROTO_SRC, 299607ca46eSDavid Howells FLOW_KEY_NFCT_PROTO_DST, 300607ca46eSDavid Howells FLOW_KEY_RTCLASSID, 301607ca46eSDavid Howells FLOW_KEY_SKUID, 302607ca46eSDavid Howells FLOW_KEY_SKGID, 303607ca46eSDavid Howells FLOW_KEY_VLAN_TAG, 304607ca46eSDavid Howells FLOW_KEY_RXHASH, 305607ca46eSDavid Howells __FLOW_KEY_MAX, 306607ca46eSDavid Howells }; 307607ca46eSDavid Howells 308607ca46eSDavid Howells #define FLOW_KEY_MAX (__FLOW_KEY_MAX - 1) 309607ca46eSDavid Howells 310607ca46eSDavid Howells enum { 311607ca46eSDavid Howells FLOW_MODE_MAP, 312607ca46eSDavid Howells FLOW_MODE_HASH, 313607ca46eSDavid Howells }; 314607ca46eSDavid Howells 315607ca46eSDavid Howells enum { 316607ca46eSDavid Howells TCA_FLOW_UNSPEC, 317607ca46eSDavid Howells TCA_FLOW_KEYS, 318607ca46eSDavid Howells TCA_FLOW_MODE, 319607ca46eSDavid Howells TCA_FLOW_BASECLASS, 320607ca46eSDavid Howells TCA_FLOW_RSHIFT, 321607ca46eSDavid Howells TCA_FLOW_ADDEND, 322607ca46eSDavid Howells TCA_FLOW_MASK, 323607ca46eSDavid Howells TCA_FLOW_XOR, 324607ca46eSDavid Howells TCA_FLOW_DIVISOR, 325607ca46eSDavid Howells TCA_FLOW_ACT, 326607ca46eSDavid Howells TCA_FLOW_POLICE, 327607ca46eSDavid Howells TCA_FLOW_EMATCHES, 328607ca46eSDavid Howells TCA_FLOW_PERTURB, 329607ca46eSDavid Howells __TCA_FLOW_MAX 330607ca46eSDavid Howells }; 331607ca46eSDavid Howells 332607ca46eSDavid Howells #define TCA_FLOW_MAX (__TCA_FLOW_MAX - 1) 333607ca46eSDavid Howells 334607ca46eSDavid Howells /* Basic filter */ 335607ca46eSDavid Howells 336607ca46eSDavid Howells enum { 337607ca46eSDavid Howells TCA_BASIC_UNSPEC, 338607ca46eSDavid Howells TCA_BASIC_CLASSID, 339607ca46eSDavid Howells TCA_BASIC_EMATCHES, 340607ca46eSDavid Howells TCA_BASIC_ACT, 341607ca46eSDavid Howells TCA_BASIC_POLICE, 342607ca46eSDavid Howells __TCA_BASIC_MAX 343607ca46eSDavid Howells }; 344607ca46eSDavid Howells 345607ca46eSDavid Howells #define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1) 346607ca46eSDavid Howells 347607ca46eSDavid Howells 348607ca46eSDavid Howells /* Cgroup classifier */ 349607ca46eSDavid Howells 350607ca46eSDavid Howells enum { 351607ca46eSDavid Howells TCA_CGROUP_UNSPEC, 352607ca46eSDavid Howells TCA_CGROUP_ACT, 353607ca46eSDavid Howells TCA_CGROUP_POLICE, 354607ca46eSDavid Howells TCA_CGROUP_EMATCHES, 355607ca46eSDavid Howells __TCA_CGROUP_MAX, 356607ca46eSDavid Howells }; 357607ca46eSDavid Howells 358607ca46eSDavid Howells #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1) 359607ca46eSDavid Howells 3607d1d65cbSDaniel Borkmann /* BPF classifier */ 3617d1d65cbSDaniel Borkmann 362045efa82SDaniel Borkmann #define TCA_BPF_FLAG_ACT_DIRECT (1 << 0) 363045efa82SDaniel Borkmann 3647d1d65cbSDaniel Borkmann enum { 3657d1d65cbSDaniel Borkmann TCA_BPF_UNSPEC, 3667d1d65cbSDaniel Borkmann TCA_BPF_ACT, 3677d1d65cbSDaniel Borkmann TCA_BPF_POLICE, 3687d1d65cbSDaniel Borkmann TCA_BPF_CLASSID, 3697d1d65cbSDaniel Borkmann TCA_BPF_OPS_LEN, 3707d1d65cbSDaniel Borkmann TCA_BPF_OPS, 371e2e9b654SDaniel Borkmann TCA_BPF_FD, 372e2e9b654SDaniel Borkmann TCA_BPF_NAME, 373045efa82SDaniel Borkmann TCA_BPF_FLAGS, 3740d01d45fSJakub Kicinski TCA_BPF_FLAGS_GEN, 375f1f7714eSDaniel Borkmann TCA_BPF_TAG, 376e8628307SDaniel Borkmann TCA_BPF_ID, 3777d1d65cbSDaniel Borkmann __TCA_BPF_MAX, 3787d1d65cbSDaniel Borkmann }; 3797d1d65cbSDaniel Borkmann 3807d1d65cbSDaniel Borkmann #define TCA_BPF_MAX (__TCA_BPF_MAX - 1) 3817d1d65cbSDaniel Borkmann 38277b9900eSJiri Pirko /* Flower classifier */ 38377b9900eSJiri Pirko 38477b9900eSJiri Pirko enum { 38577b9900eSJiri Pirko TCA_FLOWER_UNSPEC, 38677b9900eSJiri Pirko TCA_FLOWER_CLASSID, 38777b9900eSJiri Pirko TCA_FLOWER_INDEV, 38877b9900eSJiri Pirko TCA_FLOWER_ACT, 38977b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_DST, /* ETH_ALEN */ 39077b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_DST_MASK, /* ETH_ALEN */ 39177b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_SRC, /* ETH_ALEN */ 39277b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_SRC_MASK, /* ETH_ALEN */ 39377b9900eSJiri Pirko TCA_FLOWER_KEY_ETH_TYPE, /* be16 */ 39477b9900eSJiri Pirko TCA_FLOWER_KEY_IP_PROTO, /* u8 */ 39577b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_SRC, /* be32 */ 39677b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_SRC_MASK, /* be32 */ 39777b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_DST, /* be32 */ 39877b9900eSJiri Pirko TCA_FLOWER_KEY_IPV4_DST_MASK, /* be32 */ 39977b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_SRC, /* struct in6_addr */ 40077b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_SRC_MASK, /* struct in6_addr */ 40177b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_DST, /* struct in6_addr */ 40277b9900eSJiri Pirko TCA_FLOWER_KEY_IPV6_DST_MASK, /* struct in6_addr */ 40377b9900eSJiri Pirko TCA_FLOWER_KEY_TCP_SRC, /* be16 */ 40477b9900eSJiri Pirko TCA_FLOWER_KEY_TCP_DST, /* be16 */ 40577b9900eSJiri Pirko TCA_FLOWER_KEY_UDP_SRC, /* be16 */ 40677b9900eSJiri Pirko TCA_FLOWER_KEY_UDP_DST, /* be16 */ 4075b33f488SAmir Vadai 4085b33f488SAmir Vadai TCA_FLOWER_FLAGS, 40937a6c151SOr Gerlitz TCA_FLOWER_KEY_VLAN_ID, /* be16 */ 41037a6c151SOr Gerlitz TCA_FLOWER_KEY_VLAN_PRIO, /* u8 */ 41137a6c151SOr Gerlitz TCA_FLOWER_KEY_VLAN_ETH_TYPE, /* be16 */ 412bc3103f1SAmir Vadai 413bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_KEY_ID, /* be32 */ 414bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_SRC, /* be32 */ 415bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */ 416bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_DST, /* be32 */ 417bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */ 418bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_SRC, /* struct in6_addr */ 419bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */ 420bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_DST, /* struct in6_addr */ 421bc3103f1SAmir Vadai TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */ 422bc3103f1SAmir Vadai 423aa72d708SOr Gerlitz TCA_FLOWER_KEY_TCP_SRC_MASK, /* be16 */ 424aa72d708SOr Gerlitz TCA_FLOWER_KEY_TCP_DST_MASK, /* be16 */ 425aa72d708SOr Gerlitz TCA_FLOWER_KEY_UDP_SRC_MASK, /* be16 */ 426aa72d708SOr Gerlitz TCA_FLOWER_KEY_UDP_DST_MASK, /* be16 */ 4275976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_SRC_MASK, /* be16 */ 4285976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_DST_MASK, /* be16 */ 4295976c5f4SSimon Horman 4305976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_SRC, /* be16 */ 4315976c5f4SSimon Horman TCA_FLOWER_KEY_SCTP_DST, /* be16 */ 432f4d997fdSHadar Hen Zion 433f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_SRC_PORT, /* be16 */ 434f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK, /* be16 */ 435f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_DST_PORT, /* be16 */ 436f4d997fdSHadar Hen Zion TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK, /* be16 */ 437faa3ffceSOr Gerlitz 438faa3ffceSOr Gerlitz TCA_FLOWER_KEY_FLAGS, /* be32 */ 439faa3ffceSOr Gerlitz TCA_FLOWER_KEY_FLAGS_MASK, /* be32 */ 4407b684884SSimon Horman 4417b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_CODE, /* u8 */ 4427b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */ 4437b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_TYPE, /* u8 */ 4447b684884SSimon Horman TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */ 4457b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_CODE, /* u8 */ 4467b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */ 4477b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_TYPE, /* u8 */ 4487b684884SSimon Horman TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */ 4497b684884SSimon Horman 45099d31326SSimon Horman TCA_FLOWER_KEY_ARP_SIP, /* be32 */ 45199d31326SSimon Horman TCA_FLOWER_KEY_ARP_SIP_MASK, /* be32 */ 45299d31326SSimon Horman TCA_FLOWER_KEY_ARP_TIP, /* be32 */ 45399d31326SSimon Horman TCA_FLOWER_KEY_ARP_TIP_MASK, /* be32 */ 45499d31326SSimon Horman TCA_FLOWER_KEY_ARP_OP, /* u8 */ 45599d31326SSimon Horman TCA_FLOWER_KEY_ARP_OP_MASK, /* u8 */ 45699d31326SSimon Horman TCA_FLOWER_KEY_ARP_SHA, /* ETH_ALEN */ 45799d31326SSimon Horman TCA_FLOWER_KEY_ARP_SHA_MASK, /* ETH_ALEN */ 45899d31326SSimon Horman TCA_FLOWER_KEY_ARP_THA, /* ETH_ALEN */ 45999d31326SSimon Horman TCA_FLOWER_KEY_ARP_THA_MASK, /* ETH_ALEN */ 46099d31326SSimon Horman 461a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_TTL, /* u8 - 8 bits */ 462a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_BOS, /* u8 - 1 bit */ 463a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_TC, /* u8 - 3 bits */ 464a577d8f7SBenjamin LaHaise TCA_FLOWER_KEY_MPLS_LABEL, /* be32 - 20 bits */ 465a577d8f7SBenjamin LaHaise 466fdfc7dd6SJiri Pirko TCA_FLOWER_KEY_TCP_FLAGS, /* be16 */ 467fdfc7dd6SJiri Pirko TCA_FLOWER_KEY_TCP_FLAGS_MASK, /* be16 */ 468fdfc7dd6SJiri Pirko 4694d80cc0aSOr Gerlitz TCA_FLOWER_KEY_IP_TOS, /* u8 */ 4704d80cc0aSOr Gerlitz TCA_FLOWER_KEY_IP_TOS_MASK, /* u8 */ 4714d80cc0aSOr Gerlitz TCA_FLOWER_KEY_IP_TTL, /* u8 */ 4724d80cc0aSOr Gerlitz TCA_FLOWER_KEY_IP_TTL_MASK, /* u8 */ 4734d80cc0aSOr Gerlitz 474d64efd09SJianbo Liu TCA_FLOWER_KEY_CVLAN_ID, /* be16 */ 475d64efd09SJianbo Liu TCA_FLOWER_KEY_CVLAN_PRIO, /* u8 */ 476d64efd09SJianbo Liu TCA_FLOWER_KEY_CVLAN_ETH_TYPE, /* be16 */ 477d64efd09SJianbo Liu 4780e2c17b6SOr Gerlitz TCA_FLOWER_KEY_ENC_IP_TOS, /* u8 */ 4790e2c17b6SOr Gerlitz TCA_FLOWER_KEY_ENC_IP_TOS_MASK, /* u8 */ 4800e2c17b6SOr Gerlitz TCA_FLOWER_KEY_ENC_IP_TTL, /* u8 */ 4810e2c17b6SOr Gerlitz TCA_FLOWER_KEY_ENC_IP_TTL_MASK, /* u8 */ 4820e2c17b6SOr Gerlitz 4830a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPTS, 4840a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPTS_MASK, 4850a6e7778SPieter Jansen van Vuuren 486*86c55361SVlad Buslov TCA_FLOWER_IN_HW_COUNT, 487*86c55361SVlad Buslov 48877b9900eSJiri Pirko __TCA_FLOWER_MAX, 48977b9900eSJiri Pirko }; 49077b9900eSJiri Pirko 49177b9900eSJiri Pirko #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1) 49277b9900eSJiri Pirko 493faa3ffceSOr Gerlitz enum { 4940a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPTS_UNSPEC, 4950a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPTS_GENEVE, /* Nested 4960a6e7778SPieter Jansen van Vuuren * TCA_FLOWER_KEY_ENC_OPT_GENEVE_ 4970a6e7778SPieter Jansen van Vuuren * attributes 4980a6e7778SPieter Jansen van Vuuren */ 4990a6e7778SPieter Jansen van Vuuren __TCA_FLOWER_KEY_ENC_OPTS_MAX, 5000a6e7778SPieter Jansen van Vuuren }; 5010a6e7778SPieter Jansen van Vuuren 5020a6e7778SPieter Jansen van Vuuren #define TCA_FLOWER_KEY_ENC_OPTS_MAX (__TCA_FLOWER_KEY_ENC_OPTS_MAX - 1) 5030a6e7778SPieter Jansen van Vuuren 5040a6e7778SPieter Jansen van Vuuren enum { 5050a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPT_GENEVE_UNSPEC, 5060a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS, /* u16 */ 5070a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE, /* u8 */ 5080a6e7778SPieter Jansen van Vuuren TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA, /* 4 to 128 bytes */ 5090a6e7778SPieter Jansen van Vuuren 5100a6e7778SPieter Jansen van Vuuren __TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX, 5110a6e7778SPieter Jansen van Vuuren }; 5120a6e7778SPieter Jansen van Vuuren 5130a6e7778SPieter Jansen van Vuuren #define TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX \ 5140a6e7778SPieter Jansen van Vuuren (__TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX - 1) 5150a6e7778SPieter Jansen van Vuuren 5160a6e7778SPieter Jansen van Vuuren enum { 517faa3ffceSOr Gerlitz TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0), 518459d153dSPieter Jansen van Vuuren TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = (1 << 1), 519faa3ffceSOr Gerlitz }; 520faa3ffceSOr Gerlitz 521bf3994d2SJiri Pirko /* Match-all classifier */ 522bf3994d2SJiri Pirko 523bf3994d2SJiri Pirko enum { 524bf3994d2SJiri Pirko TCA_MATCHALL_UNSPEC, 525bf3994d2SJiri Pirko TCA_MATCHALL_CLASSID, 526bf3994d2SJiri Pirko TCA_MATCHALL_ACT, 527b87f7936SYotam Gigi TCA_MATCHALL_FLAGS, 528bf3994d2SJiri Pirko __TCA_MATCHALL_MAX, 529bf3994d2SJiri Pirko }; 530bf3994d2SJiri Pirko 531bf3994d2SJiri Pirko #define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1) 532bf3994d2SJiri Pirko 533607ca46eSDavid Howells /* Extended Matches */ 534607ca46eSDavid Howells 535607ca46eSDavid Howells struct tcf_ematch_tree_hdr { 536607ca46eSDavid Howells __u16 nmatches; 537607ca46eSDavid Howells __u16 progid; 538607ca46eSDavid Howells }; 539607ca46eSDavid Howells 540607ca46eSDavid Howells enum { 541607ca46eSDavid Howells TCA_EMATCH_TREE_UNSPEC, 542607ca46eSDavid Howells TCA_EMATCH_TREE_HDR, 543607ca46eSDavid Howells TCA_EMATCH_TREE_LIST, 544607ca46eSDavid Howells __TCA_EMATCH_TREE_MAX 545607ca46eSDavid Howells }; 546607ca46eSDavid Howells #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1) 547607ca46eSDavid Howells 548607ca46eSDavid Howells struct tcf_ematch_hdr { 549607ca46eSDavid Howells __u16 matchid; 550607ca46eSDavid Howells __u16 kind; 551607ca46eSDavid Howells __u16 flags; 552607ca46eSDavid Howells __u16 pad; /* currently unused */ 553607ca46eSDavid Howells }; 554607ca46eSDavid Howells 555607ca46eSDavid Howells /* 0 1 556607ca46eSDavid Howells * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 557607ca46eSDavid Howells * +-----------------------+-+-+---+ 558607ca46eSDavid Howells * | Unused |S|I| R | 559607ca46eSDavid Howells * +-----------------------+-+-+---+ 560607ca46eSDavid Howells * 561607ca46eSDavid Howells * R(2) ::= relation to next ematch 562607ca46eSDavid Howells * where: 0 0 END (last ematch) 563607ca46eSDavid Howells * 0 1 AND 564607ca46eSDavid Howells * 1 0 OR 565607ca46eSDavid Howells * 1 1 Unused (invalid) 566607ca46eSDavid Howells * I(1) ::= invert result 567607ca46eSDavid Howells * S(1) ::= simple payload 568607ca46eSDavid Howells */ 569607ca46eSDavid Howells #define TCF_EM_REL_END 0 570607ca46eSDavid Howells #define TCF_EM_REL_AND (1<<0) 571607ca46eSDavid Howells #define TCF_EM_REL_OR (1<<1) 572607ca46eSDavid Howells #define TCF_EM_INVERT (1<<2) 573607ca46eSDavid Howells #define TCF_EM_SIMPLE (1<<3) 574607ca46eSDavid Howells 575607ca46eSDavid Howells #define TCF_EM_REL_MASK 3 576607ca46eSDavid Howells #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK) 577607ca46eSDavid Howells 578607ca46eSDavid Howells enum { 579607ca46eSDavid Howells TCF_LAYER_LINK, 580607ca46eSDavid Howells TCF_LAYER_NETWORK, 581607ca46eSDavid Howells TCF_LAYER_TRANSPORT, 582607ca46eSDavid Howells __TCF_LAYER_MAX 583607ca46eSDavid Howells }; 584607ca46eSDavid Howells #define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1) 585607ca46eSDavid Howells 586607ca46eSDavid Howells /* Ematch type assignments 587607ca46eSDavid Howells * 1..32767 Reserved for ematches inside kernel tree 588607ca46eSDavid Howells * 32768..65535 Free to use, not reliable 589607ca46eSDavid Howells */ 590607ca46eSDavid Howells #define TCF_EM_CONTAINER 0 591607ca46eSDavid Howells #define TCF_EM_CMP 1 592607ca46eSDavid Howells #define TCF_EM_NBYTE 2 593607ca46eSDavid Howells #define TCF_EM_U32 3 594607ca46eSDavid Howells #define TCF_EM_META 4 595607ca46eSDavid Howells #define TCF_EM_TEXT 5 596607ca46eSDavid Howells #define TCF_EM_VLAN 6 597607ca46eSDavid Howells #define TCF_EM_CANID 7 598607ca46eSDavid Howells #define TCF_EM_IPSET 8 599ccc007e4SEyal Birger #define TCF_EM_IPT 9 600ccc007e4SEyal Birger #define TCF_EM_MAX 9 601607ca46eSDavid Howells 602607ca46eSDavid Howells enum { 603607ca46eSDavid Howells TCF_EM_PROG_TC 604607ca46eSDavid Howells }; 605607ca46eSDavid Howells 606607ca46eSDavid Howells enum { 607607ca46eSDavid Howells TCF_EM_OPND_EQ, 608607ca46eSDavid Howells TCF_EM_OPND_GT, 609607ca46eSDavid Howells TCF_EM_OPND_LT 610607ca46eSDavid Howells }; 611607ca46eSDavid Howells 612607ca46eSDavid Howells #endif 613