linux-headers (unknown)

(root)/
include/
linux/
pkt_cls.h
       1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
       2  #ifndef __LINUX_PKT_CLS_H
       3  #define __LINUX_PKT_CLS_H
       4  
       5  #include <linux/types.h>
       6  #include <linux/pkt_sched.h>
       7  
       8  #define TC_COOKIE_MAX_SIZE 16
       9  
      10  /* Action attributes */
      11  enum {
      12  	TCA_ACT_UNSPEC,
      13  	TCA_ACT_KIND,
      14  	TCA_ACT_OPTIONS,
      15  	TCA_ACT_INDEX,
      16  	TCA_ACT_STATS,
      17  	TCA_ACT_PAD,
      18  	TCA_ACT_COOKIE,
      19  	TCA_ACT_FLAGS,
      20  	TCA_ACT_HW_STATS,
      21  	TCA_ACT_USED_HW_STATS,
      22  	TCA_ACT_IN_HW_COUNT,
      23  	__TCA_ACT_MAX
      24  };
      25  
      26  /* See other TCA_ACT_FLAGS_ * flags in include/net/act_api.h. */
      27  #define TCA_ACT_FLAGS_NO_PERCPU_STATS (1 << 0) /* Don't use percpu allocator for
      28  						* actions stats.
      29  						*/
      30  #define TCA_ACT_FLAGS_SKIP_HW	(1 << 1) /* don't offload action to HW */
      31  #define TCA_ACT_FLAGS_SKIP_SW	(1 << 2) /* don't use action in SW */
      32  
      33  /* tca HW stats type
      34   * When user does not pass the attribute, he does not care.
      35   * It is the same as if he would pass the attribute with
      36   * all supported bits set.
      37   * In case no bits are set, user is not interested in getting any HW statistics.
      38   */
      39  #define TCA_ACT_HW_STATS_IMMEDIATE (1 << 0) /* Means that in dump, user
      40  					     * gets the current HW stats
      41  					     * state from the device
      42  					     * queried at the dump time.
      43  					     */
      44  #define TCA_ACT_HW_STATS_DELAYED (1 << 1) /* Means that in dump, user gets
      45  					   * HW stats that might be out of date
      46  					   * for some time, maybe couple of
      47  					   * seconds. This is the case when
      48  					   * driver polls stats updates
      49  					   * periodically or when it gets async
      50  					   * stats update from the device.
      51  					   */
      52  
      53  #define TCA_ACT_MAX __TCA_ACT_MAX
      54  #define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
      55  #define TCA_ACT_MAX_PRIO 32
      56  #define TCA_ACT_BIND	1
      57  #define TCA_ACT_NOBIND	0
      58  #define TCA_ACT_UNBIND	1
      59  #define TCA_ACT_NOUNBIND	0
      60  #define TCA_ACT_REPLACE		1
      61  #define TCA_ACT_NOREPLACE	0
      62  
      63  #define TC_ACT_UNSPEC	(-1)
      64  #define TC_ACT_OK		0
      65  #define TC_ACT_RECLASSIFY	1
      66  #define TC_ACT_SHOT		2
      67  #define TC_ACT_PIPE		3
      68  #define TC_ACT_STOLEN		4
      69  #define TC_ACT_QUEUED		5
      70  #define TC_ACT_REPEAT		6
      71  #define TC_ACT_REDIRECT		7
      72  #define TC_ACT_TRAP		8 /* For hw path, this means "trap to cpu"
      73  				   * and don't further process the frame
      74  				   * in hardware. For sw path, this is
      75  				   * equivalent of TC_ACT_STOLEN - drop
      76  				   * the skb and act like everything
      77  				   * is alright.
      78  				   */
      79  #define TC_ACT_VALUE_MAX	TC_ACT_TRAP
      80  
      81  /* There is a special kind of actions called "extended actions",
      82   * which need a value parameter. These have a local opcode located in
      83   * the highest nibble, starting from 1. The rest of the bits
      84   * are used to carry the value. These two parts together make
      85   * a combined opcode.
      86   */
      87  #define __TC_ACT_EXT_SHIFT 28
      88  #define __TC_ACT_EXT(local) ((local) << __TC_ACT_EXT_SHIFT)
      89  #define TC_ACT_EXT_VAL_MASK ((1 << __TC_ACT_EXT_SHIFT) - 1)
      90  #define TC_ACT_EXT_OPCODE(combined) ((combined) & (~TC_ACT_EXT_VAL_MASK))
      91  #define TC_ACT_EXT_CMP(combined, opcode) (TC_ACT_EXT_OPCODE(combined) == opcode)
      92  
      93  #define TC_ACT_JUMP __TC_ACT_EXT(1)
      94  #define TC_ACT_GOTO_CHAIN __TC_ACT_EXT(2)
      95  #define TC_ACT_EXT_OPCODE_MAX	TC_ACT_GOTO_CHAIN
      96  
      97  /* These macros are put here for binary compatibility with userspace apps that
      98   * make use of them. For kernel code and new userspace apps, use the TCA_ID_*
      99   * versions.
     100   */
     101  #define TCA_ACT_GACT 5
     102  #define TCA_ACT_IPT 6
     103  #define TCA_ACT_PEDIT 7
     104  #define TCA_ACT_MIRRED 8
     105  #define TCA_ACT_NAT 9
     106  #define TCA_ACT_XT 10
     107  #define TCA_ACT_SKBEDIT 11
     108  #define TCA_ACT_VLAN 12
     109  #define TCA_ACT_BPF 13
     110  #define TCA_ACT_CONNMARK 14
     111  #define TCA_ACT_SKBMOD 15
     112  #define TCA_ACT_CSUM 16
     113  #define TCA_ACT_TUNNEL_KEY 17
     114  #define TCA_ACT_SIMP 22
     115  #define TCA_ACT_IFE 25
     116  #define TCA_ACT_SAMPLE 26
     117  
     118  /* Action type identifiers*/
     119  enum tca_id {
     120  	TCA_ID_UNSPEC = 0,
     121  	TCA_ID_POLICE = 1,
     122  	TCA_ID_GACT = TCA_ACT_GACT,
     123  	TCA_ID_IPT = TCA_ACT_IPT,
     124  	TCA_ID_PEDIT = TCA_ACT_PEDIT,
     125  	TCA_ID_MIRRED = TCA_ACT_MIRRED,
     126  	TCA_ID_NAT = TCA_ACT_NAT,
     127  	TCA_ID_XT = TCA_ACT_XT,
     128  	TCA_ID_SKBEDIT = TCA_ACT_SKBEDIT,
     129  	TCA_ID_VLAN = TCA_ACT_VLAN,
     130  	TCA_ID_BPF = TCA_ACT_BPF,
     131  	TCA_ID_CONNMARK = TCA_ACT_CONNMARK,
     132  	TCA_ID_SKBMOD = TCA_ACT_SKBMOD,
     133  	TCA_ID_CSUM = TCA_ACT_CSUM,
     134  	TCA_ID_TUNNEL_KEY = TCA_ACT_TUNNEL_KEY,
     135  	TCA_ID_SIMP = TCA_ACT_SIMP,
     136  	TCA_ID_IFE = TCA_ACT_IFE,
     137  	TCA_ID_SAMPLE = TCA_ACT_SAMPLE,
     138  	TCA_ID_CTINFO,
     139  	TCA_ID_MPLS,
     140  	TCA_ID_CT,
     141  	TCA_ID_GATE,
     142  	/* other actions go here */
     143  	__TCA_ID_MAX = 255
     144  };
     145  
     146  #define TCA_ID_MAX __TCA_ID_MAX
     147  
     148  struct tc_police {
     149  	__u32			index;
     150  	int			action;
     151  #define TC_POLICE_UNSPEC	TC_ACT_UNSPEC
     152  #define TC_POLICE_OK		TC_ACT_OK
     153  #define TC_POLICE_RECLASSIFY	TC_ACT_RECLASSIFY
     154  #define TC_POLICE_SHOT		TC_ACT_SHOT
     155  #define TC_POLICE_PIPE		TC_ACT_PIPE
     156  
     157  	__u32			limit;
     158  	__u32			burst;
     159  	__u32			mtu;
     160  	struct tc_ratespec	rate;
     161  	struct tc_ratespec	peakrate;
     162  	int			refcnt;
     163  	int			bindcnt;
     164  	__u32			capab;
     165  };
     166  
     167  struct tcf_t {
     168  	__u64   install;
     169  	__u64   lastuse;
     170  	__u64   expires;
     171  	__u64   firstuse;
     172  };
     173  
     174  struct tc_cnt {
     175  	int                   refcnt;
     176  	int                   bindcnt;
     177  };
     178  
     179  #define tc_gen \
     180  	__u32                 index; \
     181  	__u32                 capab; \
     182  	int                   action; \
     183  	int                   refcnt; \
     184  	int                   bindcnt
     185  
     186  enum {
     187  	TCA_POLICE_UNSPEC,
     188  	TCA_POLICE_TBF,
     189  	TCA_POLICE_RATE,
     190  	TCA_POLICE_PEAKRATE,
     191  	TCA_POLICE_AVRATE,
     192  	TCA_POLICE_RESULT,
     193  	TCA_POLICE_TM,
     194  	TCA_POLICE_PAD,
     195  	TCA_POLICE_RATE64,
     196  	TCA_POLICE_PEAKRATE64,
     197  	TCA_POLICE_PKTRATE64,
     198  	TCA_POLICE_PKTBURST64,
     199  	__TCA_POLICE_MAX
     200  #define TCA_POLICE_RESULT TCA_POLICE_RESULT
     201  };
     202  
     203  #define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
     204  
     205  /* tca flags definitions */
     206  #define TCA_CLS_FLAGS_SKIP_HW	(1 << 0) /* don't offload filter to HW */
     207  #define TCA_CLS_FLAGS_SKIP_SW	(1 << 1) /* don't use filter in SW */
     208  #define TCA_CLS_FLAGS_IN_HW	(1 << 2) /* filter is offloaded to HW */
     209  #define TCA_CLS_FLAGS_NOT_IN_HW (1 << 3) /* filter isn't offloaded to HW */
     210  #define TCA_CLS_FLAGS_VERBOSE	(1 << 4) /* verbose logging */
     211  
     212  /* U32 filters */
     213  
     214  #define TC_U32_HTID(h) ((h)&0xFFF00000)
     215  #define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
     216  #define TC_U32_HASH(h) (((h)>>12)&0xFF)
     217  #define TC_U32_NODE(h) ((h)&0xFFF)
     218  #define TC_U32_KEY(h) ((h)&0xFFFFF)
     219  #define TC_U32_UNSPEC	0
     220  #define TC_U32_ROOT	(0xFFF00000)
     221  
     222  enum {
     223  	TCA_U32_UNSPEC,
     224  	TCA_U32_CLASSID,
     225  	TCA_U32_HASH,
     226  	TCA_U32_LINK,
     227  	TCA_U32_DIVISOR,
     228  	TCA_U32_SEL,
     229  	TCA_U32_POLICE,
     230  	TCA_U32_ACT,
     231  	TCA_U32_INDEV,
     232  	TCA_U32_PCNT,
     233  	TCA_U32_MARK,
     234  	TCA_U32_FLAGS,
     235  	TCA_U32_PAD,
     236  	__TCA_U32_MAX
     237  };
     238  
     239  #define TCA_U32_MAX (__TCA_U32_MAX - 1)
     240  
     241  struct tc_u32_key {
     242  	__be32		mask;
     243  	__be32		val;
     244  	int		off;
     245  	int		offmask;
     246  };
     247  
     248  struct tc_u32_sel {
     249  	unsigned char		flags;
     250  	unsigned char		offshift;
     251  	unsigned char		nkeys;
     252  
     253  	__be16			offmask;
     254  	__u16			off;
     255  	short			offoff;
     256  
     257  	short			hoff;
     258  	__be32			hmask;
     259  	struct tc_u32_key	keys[];
     260  };
     261  
     262  struct tc_u32_mark {
     263  	__u32		val;
     264  	__u32		mask;
     265  	__u32		success;
     266  };
     267  
     268  struct tc_u32_pcnt {
     269  	__u64 rcnt;
     270  	__u64 rhit;
     271  	__u64 kcnts[];
     272  };
     273  
     274  /* Flags */
     275  
     276  #define TC_U32_TERMINAL		1
     277  #define TC_U32_OFFSET		2
     278  #define TC_U32_VAROFFSET	4
     279  #define TC_U32_EAT		8
     280  
     281  #define TC_U32_MAXDEPTH 8
     282  
     283  
     284  /* RSVP filter */
     285  
     286  enum {
     287  	TCA_RSVP_UNSPEC,
     288  	TCA_RSVP_CLASSID,
     289  	TCA_RSVP_DST,
     290  	TCA_RSVP_SRC,
     291  	TCA_RSVP_PINFO,
     292  	TCA_RSVP_POLICE,
     293  	TCA_RSVP_ACT,
     294  	__TCA_RSVP_MAX
     295  };
     296  
     297  #define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
     298  
     299  struct tc_rsvp_gpi {
     300  	__u32	key;
     301  	__u32	mask;
     302  	int	offset;
     303  };
     304  
     305  struct tc_rsvp_pinfo {
     306  	struct tc_rsvp_gpi dpi;
     307  	struct tc_rsvp_gpi spi;
     308  	__u8	protocol;
     309  	__u8	tunnelid;
     310  	__u8	tunnelhdr;
     311  	__u8	pad;
     312  };
     313  
     314  /* ROUTE filter */
     315  
     316  enum {
     317  	TCA_ROUTE4_UNSPEC,
     318  	TCA_ROUTE4_CLASSID,
     319  	TCA_ROUTE4_TO,
     320  	TCA_ROUTE4_FROM,
     321  	TCA_ROUTE4_IIF,
     322  	TCA_ROUTE4_POLICE,
     323  	TCA_ROUTE4_ACT,
     324  	__TCA_ROUTE4_MAX
     325  };
     326  
     327  #define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
     328  
     329  
     330  /* FW filter */
     331  
     332  enum {
     333  	TCA_FW_UNSPEC,
     334  	TCA_FW_CLASSID,
     335  	TCA_FW_POLICE,
     336  	TCA_FW_INDEV,
     337  	TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
     338  	TCA_FW_MASK,
     339  	__TCA_FW_MAX
     340  };
     341  
     342  #define TCA_FW_MAX (__TCA_FW_MAX - 1)
     343  
     344  /* TC index filter */
     345  
     346  enum {
     347  	TCA_TCINDEX_UNSPEC,
     348  	TCA_TCINDEX_HASH,
     349  	TCA_TCINDEX_MASK,
     350  	TCA_TCINDEX_SHIFT,
     351  	TCA_TCINDEX_FALL_THROUGH,
     352  	TCA_TCINDEX_CLASSID,
     353  	TCA_TCINDEX_POLICE,
     354  	TCA_TCINDEX_ACT,
     355  	__TCA_TCINDEX_MAX
     356  };
     357  
     358  #define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1)
     359  
     360  /* Flow filter */
     361  
     362  enum {
     363  	FLOW_KEY_SRC,
     364  	FLOW_KEY_DST,
     365  	FLOW_KEY_PROTO,
     366  	FLOW_KEY_PROTO_SRC,
     367  	FLOW_KEY_PROTO_DST,
     368  	FLOW_KEY_IIF,
     369  	FLOW_KEY_PRIORITY,
     370  	FLOW_KEY_MARK,
     371  	FLOW_KEY_NFCT,
     372  	FLOW_KEY_NFCT_SRC,
     373  	FLOW_KEY_NFCT_DST,
     374  	FLOW_KEY_NFCT_PROTO_SRC,
     375  	FLOW_KEY_NFCT_PROTO_DST,
     376  	FLOW_KEY_RTCLASSID,
     377  	FLOW_KEY_SKUID,
     378  	FLOW_KEY_SKGID,
     379  	FLOW_KEY_VLAN_TAG,
     380  	FLOW_KEY_RXHASH,
     381  	__FLOW_KEY_MAX,
     382  };
     383  
     384  #define FLOW_KEY_MAX	(__FLOW_KEY_MAX - 1)
     385  
     386  enum {
     387  	FLOW_MODE_MAP,
     388  	FLOW_MODE_HASH,
     389  };
     390  
     391  enum {
     392  	TCA_FLOW_UNSPEC,
     393  	TCA_FLOW_KEYS,
     394  	TCA_FLOW_MODE,
     395  	TCA_FLOW_BASECLASS,
     396  	TCA_FLOW_RSHIFT,
     397  	TCA_FLOW_ADDEND,
     398  	TCA_FLOW_MASK,
     399  	TCA_FLOW_XOR,
     400  	TCA_FLOW_DIVISOR,
     401  	TCA_FLOW_ACT,
     402  	TCA_FLOW_POLICE,
     403  	TCA_FLOW_EMATCHES,
     404  	TCA_FLOW_PERTURB,
     405  	__TCA_FLOW_MAX
     406  };
     407  
     408  #define TCA_FLOW_MAX	(__TCA_FLOW_MAX - 1)
     409  
     410  /* Basic filter */
     411  
     412  struct tc_basic_pcnt {
     413  	__u64 rcnt;
     414  	__u64 rhit;
     415  };
     416  
     417  enum {
     418  	TCA_BASIC_UNSPEC,
     419  	TCA_BASIC_CLASSID,
     420  	TCA_BASIC_EMATCHES,
     421  	TCA_BASIC_ACT,
     422  	TCA_BASIC_POLICE,
     423  	TCA_BASIC_PCNT,
     424  	TCA_BASIC_PAD,
     425  	__TCA_BASIC_MAX
     426  };
     427  
     428  #define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
     429  
     430  
     431  /* Cgroup classifier */
     432  
     433  enum {
     434  	TCA_CGROUP_UNSPEC,
     435  	TCA_CGROUP_ACT,
     436  	TCA_CGROUP_POLICE,
     437  	TCA_CGROUP_EMATCHES,
     438  	__TCA_CGROUP_MAX,
     439  };
     440  
     441  #define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
     442  
     443  /* BPF classifier */
     444  
     445  #define TCA_BPF_FLAG_ACT_DIRECT		(1 << 0)
     446  
     447  enum {
     448  	TCA_BPF_UNSPEC,
     449  	TCA_BPF_ACT,
     450  	TCA_BPF_POLICE,
     451  	TCA_BPF_CLASSID,
     452  	TCA_BPF_OPS_LEN,
     453  	TCA_BPF_OPS,
     454  	TCA_BPF_FD,
     455  	TCA_BPF_NAME,
     456  	TCA_BPF_FLAGS,
     457  	TCA_BPF_FLAGS_GEN,
     458  	TCA_BPF_TAG,
     459  	TCA_BPF_ID,
     460  	__TCA_BPF_MAX,
     461  };
     462  
     463  #define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
     464  
     465  /* Flower classifier */
     466  
     467  enum {
     468  	TCA_FLOWER_UNSPEC,
     469  	TCA_FLOWER_CLASSID,
     470  	TCA_FLOWER_INDEV,
     471  	TCA_FLOWER_ACT,
     472  	TCA_FLOWER_KEY_ETH_DST,		/* ETH_ALEN */
     473  	TCA_FLOWER_KEY_ETH_DST_MASK,	/* ETH_ALEN */
     474  	TCA_FLOWER_KEY_ETH_SRC,		/* ETH_ALEN */
     475  	TCA_FLOWER_KEY_ETH_SRC_MASK,	/* ETH_ALEN */
     476  	TCA_FLOWER_KEY_ETH_TYPE,	/* be16 */
     477  	TCA_FLOWER_KEY_IP_PROTO,	/* u8 */
     478  	TCA_FLOWER_KEY_IPV4_SRC,	/* be32 */
     479  	TCA_FLOWER_KEY_IPV4_SRC_MASK,	/* be32 */
     480  	TCA_FLOWER_KEY_IPV4_DST,	/* be32 */
     481  	TCA_FLOWER_KEY_IPV4_DST_MASK,	/* be32 */
     482  	TCA_FLOWER_KEY_IPV6_SRC,	/* struct in6_addr */
     483  	TCA_FLOWER_KEY_IPV6_SRC_MASK,	/* struct in6_addr */
     484  	TCA_FLOWER_KEY_IPV6_DST,	/* struct in6_addr */
     485  	TCA_FLOWER_KEY_IPV6_DST_MASK,	/* struct in6_addr */
     486  	TCA_FLOWER_KEY_TCP_SRC,		/* be16 */
     487  	TCA_FLOWER_KEY_TCP_DST,		/* be16 */
     488  	TCA_FLOWER_KEY_UDP_SRC,		/* be16 */
     489  	TCA_FLOWER_KEY_UDP_DST,		/* be16 */
     490  
     491  	TCA_FLOWER_FLAGS,
     492  	TCA_FLOWER_KEY_VLAN_ID,		/* be16 */
     493  	TCA_FLOWER_KEY_VLAN_PRIO,	/* u8   */
     494  	TCA_FLOWER_KEY_VLAN_ETH_TYPE,	/* be16 */
     495  
     496  	TCA_FLOWER_KEY_ENC_KEY_ID,	/* be32 */
     497  	TCA_FLOWER_KEY_ENC_IPV4_SRC,	/* be32 */
     498  	TCA_FLOWER_KEY_ENC_IPV4_SRC_MASK,/* be32 */
     499  	TCA_FLOWER_KEY_ENC_IPV4_DST,	/* be32 */
     500  	TCA_FLOWER_KEY_ENC_IPV4_DST_MASK,/* be32 */
     501  	TCA_FLOWER_KEY_ENC_IPV6_SRC,	/* struct in6_addr */
     502  	TCA_FLOWER_KEY_ENC_IPV6_SRC_MASK,/* struct in6_addr */
     503  	TCA_FLOWER_KEY_ENC_IPV6_DST,	/* struct in6_addr */
     504  	TCA_FLOWER_KEY_ENC_IPV6_DST_MASK,/* struct in6_addr */
     505  
     506  	TCA_FLOWER_KEY_TCP_SRC_MASK,	/* be16 */
     507  	TCA_FLOWER_KEY_TCP_DST_MASK,	/* be16 */
     508  	TCA_FLOWER_KEY_UDP_SRC_MASK,	/* be16 */
     509  	TCA_FLOWER_KEY_UDP_DST_MASK,	/* be16 */
     510  	TCA_FLOWER_KEY_SCTP_SRC_MASK,	/* be16 */
     511  	TCA_FLOWER_KEY_SCTP_DST_MASK,	/* be16 */
     512  
     513  	TCA_FLOWER_KEY_SCTP_SRC,	/* be16 */
     514  	TCA_FLOWER_KEY_SCTP_DST,	/* be16 */
     515  
     516  	TCA_FLOWER_KEY_ENC_UDP_SRC_PORT,	/* be16 */
     517  	TCA_FLOWER_KEY_ENC_UDP_SRC_PORT_MASK,	/* be16 */
     518  	TCA_FLOWER_KEY_ENC_UDP_DST_PORT,	/* be16 */
     519  	TCA_FLOWER_KEY_ENC_UDP_DST_PORT_MASK,	/* be16 */
     520  
     521  	TCA_FLOWER_KEY_FLAGS,		/* be32 */
     522  	TCA_FLOWER_KEY_FLAGS_MASK,	/* be32 */
     523  
     524  	TCA_FLOWER_KEY_ICMPV4_CODE,	/* u8 */
     525  	TCA_FLOWER_KEY_ICMPV4_CODE_MASK,/* u8 */
     526  	TCA_FLOWER_KEY_ICMPV4_TYPE,	/* u8 */
     527  	TCA_FLOWER_KEY_ICMPV4_TYPE_MASK,/* u8 */
     528  	TCA_FLOWER_KEY_ICMPV6_CODE,	/* u8 */
     529  	TCA_FLOWER_KEY_ICMPV6_CODE_MASK,/* u8 */
     530  	TCA_FLOWER_KEY_ICMPV6_TYPE,	/* u8 */
     531  	TCA_FLOWER_KEY_ICMPV6_TYPE_MASK,/* u8 */
     532  
     533  	TCA_FLOWER_KEY_ARP_SIP,		/* be32 */
     534  	TCA_FLOWER_KEY_ARP_SIP_MASK,	/* be32 */
     535  	TCA_FLOWER_KEY_ARP_TIP,		/* be32 */
     536  	TCA_FLOWER_KEY_ARP_TIP_MASK,	/* be32 */
     537  	TCA_FLOWER_KEY_ARP_OP,		/* u8 */
     538  	TCA_FLOWER_KEY_ARP_OP_MASK,	/* u8 */
     539  	TCA_FLOWER_KEY_ARP_SHA,		/* ETH_ALEN */
     540  	TCA_FLOWER_KEY_ARP_SHA_MASK,	/* ETH_ALEN */
     541  	TCA_FLOWER_KEY_ARP_THA,		/* ETH_ALEN */
     542  	TCA_FLOWER_KEY_ARP_THA_MASK,	/* ETH_ALEN */
     543  
     544  	TCA_FLOWER_KEY_MPLS_TTL,	/* u8 - 8 bits */
     545  	TCA_FLOWER_KEY_MPLS_BOS,	/* u8 - 1 bit */
     546  	TCA_FLOWER_KEY_MPLS_TC,		/* u8 - 3 bits */
     547  	TCA_FLOWER_KEY_MPLS_LABEL,	/* be32 - 20 bits */
     548  
     549  	TCA_FLOWER_KEY_TCP_FLAGS,	/* be16 */
     550  	TCA_FLOWER_KEY_TCP_FLAGS_MASK,	/* be16 */
     551  
     552  	TCA_FLOWER_KEY_IP_TOS,		/* u8 */
     553  	TCA_FLOWER_KEY_IP_TOS_MASK,	/* u8 */
     554  	TCA_FLOWER_KEY_IP_TTL,		/* u8 */
     555  	TCA_FLOWER_KEY_IP_TTL_MASK,	/* u8 */
     556  
     557  	TCA_FLOWER_KEY_CVLAN_ID,	/* be16 */
     558  	TCA_FLOWER_KEY_CVLAN_PRIO,	/* u8   */
     559  	TCA_FLOWER_KEY_CVLAN_ETH_TYPE,	/* be16 */
     560  
     561  	TCA_FLOWER_KEY_ENC_IP_TOS,	/* u8 */
     562  	TCA_FLOWER_KEY_ENC_IP_TOS_MASK,	/* u8 */
     563  	TCA_FLOWER_KEY_ENC_IP_TTL,	/* u8 */
     564  	TCA_FLOWER_KEY_ENC_IP_TTL_MASK,	/* u8 */
     565  
     566  	TCA_FLOWER_KEY_ENC_OPTS,
     567  	TCA_FLOWER_KEY_ENC_OPTS_MASK,
     568  
     569  	TCA_FLOWER_IN_HW_COUNT,
     570  
     571  	TCA_FLOWER_KEY_PORT_SRC_MIN,	/* be16 */
     572  	TCA_FLOWER_KEY_PORT_SRC_MAX,	/* be16 */
     573  	TCA_FLOWER_KEY_PORT_DST_MIN,	/* be16 */
     574  	TCA_FLOWER_KEY_PORT_DST_MAX,	/* be16 */
     575  
     576  	TCA_FLOWER_KEY_CT_STATE,	/* u16 */
     577  	TCA_FLOWER_KEY_CT_STATE_MASK,	/* u16 */
     578  	TCA_FLOWER_KEY_CT_ZONE,		/* u16 */
     579  	TCA_FLOWER_KEY_CT_ZONE_MASK,	/* u16 */
     580  	TCA_FLOWER_KEY_CT_MARK,		/* u32 */
     581  	TCA_FLOWER_KEY_CT_MARK_MASK,	/* u32 */
     582  	TCA_FLOWER_KEY_CT_LABELS,	/* u128 */
     583  	TCA_FLOWER_KEY_CT_LABELS_MASK,	/* u128 */
     584  
     585  	TCA_FLOWER_KEY_MPLS_OPTS,
     586  
     587  	TCA_FLOWER_KEY_HASH,		/* u32 */
     588  	TCA_FLOWER_KEY_HASH_MASK,	/* u32 */
     589  
     590  	TCA_FLOWER_KEY_NUM_OF_VLANS,    /* u8 */
     591  
     592  	TCA_FLOWER_KEY_PPPOE_SID,	/* be16 */
     593  	TCA_FLOWER_KEY_PPP_PROTO,	/* be16 */
     594  
     595  	TCA_FLOWER_KEY_L2TPV3_SID,	/* be32 */
     596  
     597  	__TCA_FLOWER_MAX,
     598  };
     599  
     600  #define TCA_FLOWER_MAX (__TCA_FLOWER_MAX - 1)
     601  
     602  enum {
     603  	TCA_FLOWER_KEY_CT_FLAGS_NEW = 1 << 0, /* Beginning of a new connection. */
     604  	TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED = 1 << 1, /* Part of an existing connection. */
     605  	TCA_FLOWER_KEY_CT_FLAGS_RELATED = 1 << 2, /* Related to an established connection. */
     606  	TCA_FLOWER_KEY_CT_FLAGS_TRACKED = 1 << 3, /* Conntrack has occurred. */
     607  	TCA_FLOWER_KEY_CT_FLAGS_INVALID = 1 << 4, /* Conntrack is invalid. */
     608  	TCA_FLOWER_KEY_CT_FLAGS_REPLY = 1 << 5, /* Packet is in the reply direction. */
     609  	__TCA_FLOWER_KEY_CT_FLAGS_MAX,
     610  };
     611  
     612  enum {
     613  	TCA_FLOWER_KEY_ENC_OPTS_UNSPEC,
     614  	TCA_FLOWER_KEY_ENC_OPTS_GENEVE, /* Nested
     615  					 * TCA_FLOWER_KEY_ENC_OPT_GENEVE_
     616  					 * attributes
     617  					 */
     618  	TCA_FLOWER_KEY_ENC_OPTS_VXLAN,	/* Nested
     619  					 * TCA_FLOWER_KEY_ENC_OPT_VXLAN_
     620  					 * attributes
     621  					 */
     622  	TCA_FLOWER_KEY_ENC_OPTS_ERSPAN,	/* Nested
     623  					 * TCA_FLOWER_KEY_ENC_OPT_ERSPAN_
     624  					 * attributes
     625  					 */
     626  	TCA_FLOWER_KEY_ENC_OPTS_GTP,	/* Nested
     627  					 * TCA_FLOWER_KEY_ENC_OPT_GTP_
     628  					 * attributes
     629  					 */
     630  	__TCA_FLOWER_KEY_ENC_OPTS_MAX,
     631  };
     632  
     633  #define TCA_FLOWER_KEY_ENC_OPTS_MAX (__TCA_FLOWER_KEY_ENC_OPTS_MAX - 1)
     634  
     635  enum {
     636  	TCA_FLOWER_KEY_ENC_OPT_GENEVE_UNSPEC,
     637  	TCA_FLOWER_KEY_ENC_OPT_GENEVE_CLASS,            /* u16 */
     638  	TCA_FLOWER_KEY_ENC_OPT_GENEVE_TYPE,             /* u8 */
     639  	TCA_FLOWER_KEY_ENC_OPT_GENEVE_DATA,             /* 4 to 128 bytes */
     640  
     641  	__TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX,
     642  };
     643  
     644  #define TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX \
     645  		(__TCA_FLOWER_KEY_ENC_OPT_GENEVE_MAX - 1)
     646  
     647  enum {
     648  	TCA_FLOWER_KEY_ENC_OPT_VXLAN_UNSPEC,
     649  	TCA_FLOWER_KEY_ENC_OPT_VXLAN_GBP,		/* u32 */
     650  	__TCA_FLOWER_KEY_ENC_OPT_VXLAN_MAX,
     651  };
     652  
     653  #define TCA_FLOWER_KEY_ENC_OPT_VXLAN_MAX \
     654  		(__TCA_FLOWER_KEY_ENC_OPT_VXLAN_MAX - 1)
     655  
     656  enum {
     657  	TCA_FLOWER_KEY_ENC_OPT_ERSPAN_UNSPEC,
     658  	TCA_FLOWER_KEY_ENC_OPT_ERSPAN_VER,              /* u8 */
     659  	TCA_FLOWER_KEY_ENC_OPT_ERSPAN_INDEX,            /* be32 */
     660  	TCA_FLOWER_KEY_ENC_OPT_ERSPAN_DIR,              /* u8 */
     661  	TCA_FLOWER_KEY_ENC_OPT_ERSPAN_HWID,             /* u8 */
     662  	__TCA_FLOWER_KEY_ENC_OPT_ERSPAN_MAX,
     663  };
     664  
     665  #define TCA_FLOWER_KEY_ENC_OPT_ERSPAN_MAX \
     666  		(__TCA_FLOWER_KEY_ENC_OPT_ERSPAN_MAX - 1)
     667  
     668  enum {
     669  	TCA_FLOWER_KEY_ENC_OPT_GTP_UNSPEC,
     670  	TCA_FLOWER_KEY_ENC_OPT_GTP_PDU_TYPE,		/* u8 */
     671  	TCA_FLOWER_KEY_ENC_OPT_GTP_QFI,			/* u8 */
     672  
     673  	__TCA_FLOWER_KEY_ENC_OPT_GTP_MAX,
     674  };
     675  
     676  #define TCA_FLOWER_KEY_ENC_OPT_GTP_MAX \
     677  		(__TCA_FLOWER_KEY_ENC_OPT_GTP_MAX - 1)
     678  
     679  enum {
     680  	TCA_FLOWER_KEY_MPLS_OPTS_UNSPEC,
     681  	TCA_FLOWER_KEY_MPLS_OPTS_LSE,
     682  	__TCA_FLOWER_KEY_MPLS_OPTS_MAX,
     683  };
     684  
     685  #define TCA_FLOWER_KEY_MPLS_OPTS_MAX (__TCA_FLOWER_KEY_MPLS_OPTS_MAX - 1)
     686  
     687  enum {
     688  	TCA_FLOWER_KEY_MPLS_OPT_LSE_UNSPEC,
     689  	TCA_FLOWER_KEY_MPLS_OPT_LSE_DEPTH,
     690  	TCA_FLOWER_KEY_MPLS_OPT_LSE_TTL,
     691  	TCA_FLOWER_KEY_MPLS_OPT_LSE_BOS,
     692  	TCA_FLOWER_KEY_MPLS_OPT_LSE_TC,
     693  	TCA_FLOWER_KEY_MPLS_OPT_LSE_LABEL,
     694  	__TCA_FLOWER_KEY_MPLS_OPT_LSE_MAX,
     695  };
     696  
     697  #define TCA_FLOWER_KEY_MPLS_OPT_LSE_MAX \
     698  		(__TCA_FLOWER_KEY_MPLS_OPT_LSE_MAX - 1)
     699  
     700  enum {
     701  	TCA_FLOWER_KEY_FLAGS_IS_FRAGMENT = (1 << 0),
     702  	TCA_FLOWER_KEY_FLAGS_FRAG_IS_FIRST = (1 << 1),
     703  };
     704  
     705  #define TCA_FLOWER_MASK_FLAGS_RANGE	(1 << 0) /* Range-based match */
     706  
     707  /* Match-all classifier */
     708  
     709  struct tc_matchall_pcnt {
     710  	__u64 rhit;
     711  };
     712  
     713  enum {
     714  	TCA_MATCHALL_UNSPEC,
     715  	TCA_MATCHALL_CLASSID,
     716  	TCA_MATCHALL_ACT,
     717  	TCA_MATCHALL_FLAGS,
     718  	TCA_MATCHALL_PCNT,
     719  	TCA_MATCHALL_PAD,
     720  	__TCA_MATCHALL_MAX,
     721  };
     722  
     723  #define TCA_MATCHALL_MAX (__TCA_MATCHALL_MAX - 1)
     724  
     725  /* Extended Matches */
     726  
     727  struct tcf_ematch_tree_hdr {
     728  	__u16		nmatches;
     729  	__u16		progid;
     730  };
     731  
     732  enum {
     733  	TCA_EMATCH_TREE_UNSPEC,
     734  	TCA_EMATCH_TREE_HDR,
     735  	TCA_EMATCH_TREE_LIST,
     736  	__TCA_EMATCH_TREE_MAX
     737  };
     738  #define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
     739  
     740  struct tcf_ematch_hdr {
     741  	__u16		matchid;
     742  	__u16		kind;
     743  	__u16		flags;
     744  	__u16		pad; /* currently unused */
     745  };
     746  
     747  /*  0                   1
     748   *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
     749   * +-----------------------+-+-+---+
     750   * |         Unused        |S|I| R |
     751   * +-----------------------+-+-+---+
     752   *
     753   * R(2) ::= relation to next ematch
     754   *          where: 0 0 END (last ematch)
     755   *                 0 1 AND
     756   *                 1 0 OR
     757   *                 1 1 Unused (invalid)
     758   * I(1) ::= invert result
     759   * S(1) ::= simple payload
     760   */
     761  #define TCF_EM_REL_END	0
     762  #define TCF_EM_REL_AND	(1<<0)
     763  #define TCF_EM_REL_OR	(1<<1)
     764  #define TCF_EM_INVERT	(1<<2)
     765  #define TCF_EM_SIMPLE	(1<<3)
     766  
     767  #define TCF_EM_REL_MASK	3
     768  #define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
     769  
     770  enum {
     771  	TCF_LAYER_LINK,
     772  	TCF_LAYER_NETWORK,
     773  	TCF_LAYER_TRANSPORT,
     774  	__TCF_LAYER_MAX
     775  };
     776  #define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
     777  
     778  /* Ematch type assignments
     779   *   1..32767		Reserved for ematches inside kernel tree
     780   *   32768..65535	Free to use, not reliable
     781   */
     782  #define	TCF_EM_CONTAINER	0
     783  #define	TCF_EM_CMP		1
     784  #define	TCF_EM_NBYTE		2
     785  #define	TCF_EM_U32		3
     786  #define	TCF_EM_META		4
     787  #define	TCF_EM_TEXT		5
     788  #define	TCF_EM_VLAN		6
     789  #define	TCF_EM_CANID		7
     790  #define	TCF_EM_IPSET		8
     791  #define	TCF_EM_IPT		9
     792  #define	TCF_EM_MAX		9
     793  
     794  enum {
     795  	TCF_EM_PROG_TC
     796  };
     797  
     798  enum {
     799  	TCF_EM_OPND_EQ,
     800  	TCF_EM_OPND_GT,
     801  	TCF_EM_OPND_LT
     802  };
     803  
     804  #endif