Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
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 /* Action attributes */
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 /* For hw path, this means "trap to cpu"
0042                    * and don't further process the frame
0043                    * in hardware. For sw path, this is
0044                    * equivalent of TC_ACT_STOLEN - drop
0045                    * the skb and act like everything
0046                    * is alright.
0047                    */
0048 #define TC_ACT_VALUE_MAX    TC_ACT_TRAP
0049 
0050 /* There is a special kind of actions called "extended actions",
0051  * which need a value parameter. These have a local opcode located in
0052  * the highest nibble, starting from 1. The rest of the bits
0053  * are used to carry the value. These two parts together make
0054  * a combined opcode.
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 /* Action type identifiers*/
0067 enum {
0068     TCA_ID_UNSPEC=0,
0069     TCA_ID_POLICE=1,
0070     /* other actions go here */
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 /* tca flags definitions */
0130 #define TCA_CLS_FLAGS_SKIP_HW   (1 << 0) /* don't offload filter to HW */
0131 #define TCA_CLS_FLAGS_SKIP_SW   (1 << 1) /* don't use filter in SW */
0132 #define TCA_CLS_FLAGS_IN_HW (1 << 2) /* filter is offloaded to HW */
0133 #define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */
0134 #define TCA_CLS_FLAGS_VERBOSE   (1 << 4) /* verbose logging */
0135 
0136 /* U32 filters */
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 /* Flags */
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 /* RSVP filter */
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 /* ROUTE filter */
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 /* FW filter */
0255 
0256 enum {
0257     TCA_FW_UNSPEC,
0258     TCA_FW_CLASSID,
0259     TCA_FW_POLICE,
0260     TCA_FW_INDEV,
0261     TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
0262     TCA_FW_MASK,
0263     __TCA_FW_MAX
0264 };
0265 
0266 #define TCA_FW_MAX (__TCA_FW_MAX - 1)
0267 
0268 /* TC index filter */
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 /* Flow filter */
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 /* Basic filter */
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 /* Cgroup classifier */
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 /* BPF classifier */
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 /* Flower classifier */
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,     /* ETH_ALEN */
0390     TCA_FLOWER_KEY_ETH_DST_MASK,    /* ETH_ALEN */
0391     TCA_FLOWER_KEY_ETH_SRC,     /* ETH_ALEN */
0392     TCA_FLOWER_KEY_ETH_SRC_MASK,    /* ETH_ALEN */
0393     TCA_FLOWER_KEY_ETH_TYPE,    /* be16 */
0394     TCA_FLOWER_KEY_IP_PROTO,    /* u8 */
0395     TCA_FLOWER_KEY_IPV4_SRC,    /* be32 */
0396     TCA_FLOWER_KEY_IPV4_SRC_MASK,   /* be32 */
0397     TCA_FLOWER_KEY_IPV4_DST,    /* be32 */
0398     TCA_FLOWER_KEY_IPV4_DST_MASK,   /* be32 */
0399     TCA_FLOWER_KEY_IPV6_SRC,    /* struct in6_addr */
0400     TCA_FLOWER_KEY_IPV6_SRC_MASK,   /* struct in6_addr */
0401     TCA_FLOWER_KEY_IPV6_DST,    /* struct in6_addr */
0402     TCA_FLOWER_KEY_IPV6_DST_MASK,   /* struct in6_addr */
0403     TCA_FLOWER_KEY_TCP_SRC,     /* be16 */
0404     TCA_FLOWER_KEY_TCP_DST,     /* be16 */
0405     TCA_FLOWER_KEY_UDP_SRC,     /* be16 */
0406     TCA_FLOWER_KEY_UDP_DST,     /* be16 */
0407 
0408     TCA_FLOWER_FLAGS,
0409     TCA_FLOWER_KEY_VLAN_ID,     /* be16 */
0410     TCA_FLOWER_KEY_VLAN_PRIO,   /* u8   */
0411     TCA_FLOWER_KEY_VLAN_ETH_TYPE,   /* be16 */
0412 
0413     TCA_FLOWER_KEY_ENC_KEY_ID,  /* be32 */
0414     TCA_FLOWER_KEY_ENC_IPV4_SRC,    /* be32 */
0415     TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */
0416     TCA_FLOWER_KEY_ENC_IPV4_DST,    /* be32 */
0417     TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */
0418     TCA_FLOWER_KEY_ENC_IPV6_SRC,    /* struct in6_addr */
0419     TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */
0420     TCA_FLOWER_KEY_ENC_IPV6_DST,    /* struct in6_addr */
0421     TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */
0422 
0423     TCA_FLOWER_KEY_TCP_SRC_MASK,    /* be16 */
0424     TCA_FLOWER_KEY_TCP_DST_MASK,    /* be16 */
0425     TCA_FLOWER_KEY_UDP_SRC_MASK,    /* be16 */
0426     TCA_FLOWER_KEY_UDP_DST_MASK,    /* be16 */
0427     TCA_FLOWER_KEY_SCTP_SRC_MASK,   /* be16 */
0428     TCA_FLOWER_KEY_SCTP_DST_MASK,   /* be16 */
0429 
0430     TCA_FLOWER_KEY_SCTP_SRC,    /* be16 */
0431     TCA_FLOWER_KEY_SCTP_DST,    /* be16 */
0432 
0433     TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,    /* be16 */
0434     TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,   /* be16 */
0435     TCA_FLOWER_KEY_ENC_UDP_DST_PORT,    /* be16 */
0436     TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,   /* be16 */
0437 
0438     TCA_FLOWER_KEY_FLAGS,       /* be32 */
0439     TCA_FLOWER_KEY_FLAGS_MASK,  /* be32 */
0440 
0441     TCA_FLOWER_KEY_ICMPV4_CODE, /* u8 */
0442     TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */
0443     TCA_FLOWER_KEY_ICMPV4_TYPE, /* u8 */
0444     TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */
0445     TCA_FLOWER_KEY_ICMPV6_CODE, /* u8 */
0446     TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */
0447     TCA_FLOWER_KEY_ICMPV6_TYPE, /* u8 */
0448     TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */
0449 
0450     TCA_FLOWER_KEY_ARP_SIP,     /* be32 */
0451     TCA_FLOWER_KEY_ARP_SIP_MASK,    /* be32 */
0452     TCA_FLOWER_KEY_ARP_TIP,     /* be32 */
0453     TCA_FLOWER_KEY_ARP_TIP_MASK,    /* be32 */
0454     TCA_FLOWER_KEY_ARP_OP,      /* u8 */
0455     TCA_FLOWER_KEY_ARP_OP_MASK, /* u8 */
0456     TCA_FLOWER_KEY_ARP_SHA,     /* ETH_ALEN */
0457     TCA_FLOWER_KEY_ARP_SHA_MASK,    /* ETH_ALEN */
0458     TCA_FLOWER_KEY_ARP_THA,     /* ETH_ALEN */
0459     TCA_FLOWER_KEY_ARP_THA_MASK,    /* ETH_ALEN */
0460 
0461     TCA_FLOWER_KEY_MPLS_TTL,    /* u8 - 8 bits */
0462     TCA_FLOWER_KEY_MPLS_BOS,    /* u8 - 1 bit */
0463     TCA_FLOWER_KEY_MPLS_TC,     /* u8 - 3 bits */
0464     TCA_FLOWER_KEY_MPLS_LABEL,  /* be32 - 20 bits */
0465 
0466     TCA_FLOWER_KEY_TCP_FLAGS,   /* be16 */
0467     TCA_FLOWER_KEY_TCP_FLAGS_MASK,  /* be16 */
0468 
0469     TCA_FLOWER_KEY_IP_TOS,      /* u8 */
0470     TCA_FLOWER_KEY_IP_TOS_MASK, /* u8 */
0471     TCA_FLOWER_KEY_IP_TTL,      /* u8 */
0472     TCA_FLOWER_KEY_IP_TTL_MASK, /* u8 */
0473 
0474     TCA_FLOWER_KEY_CVLAN_ID,    /* be16 */
0475     TCA_FLOWER_KEY_CVLAN_PRIO,  /* u8   */
0476     TCA_FLOWER_KEY_CVLAN_ETH_TYPE,  /* be16 */
0477 
0478     TCA_FLOWER_KEY_ENC_IP_TOS,  /* u8 */
0479     TCA_FLOWER_KEY_ENC_IP_TOS_MASK, /* u8 */
0480     TCA_FLOWER_KEY_ENC_IP_TTL,  /* u8 */
0481     TCA_FLOWER_KEY_ENC_IP_TTL_MASK, /* u8 */
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, /* Nested
0496                      * TCA_FLOWER_KEY_ENC_OPT_GENEVE_
0497                      * attributes
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,            /* u16 */
0507     TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE,             /* u8 */
0508     TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA,             /* 4 to 128 bytes */
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 /* Match-all classifier */
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 /* Extended Matches */
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; /* currently unused */
0553 };
0554 
0555 /*  0                   1
0556  *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
0557  * +-----------------------+-+-+---+
0558  * |         Unused        |S|I| R |
0559  * +-----------------------+-+-+---+
0560  *
0561  * R(2) ::= relation to next ematch
0562  *          where: 0 0 END (last ematch)
0563  *                 0 1 AND
0564  *                 1 0 OR
0565  *                 1 1 Unused (invalid)
0566  * I(1) ::= invert result
0567  * S(1) ::= simple payload
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 /* Ematch type assignments
0587  *   1..32767       Reserved for ematches inside kernel tree
0588  *   32768..65535   Free to use, not reliable
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