1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __LINUX_PKT_CLS_H
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __LINUX_PKT_CLS_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/pkt_sched.h>
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* I think i could have done better macros ; for now this is stolen from
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * some arch/mips code - jhs
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng*/
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKE32(x) ((x))
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKEMASK1(n) (_TC_MAKE32(1) << _TC_MAKE32(n))
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKEMASK(v,n) (_TC_MAKE32((_TC_MAKE32(1)<<(v))-1) << _TC_MAKE32(n))
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_MAKEVALUE(v,n) (_TC_MAKE32(v) << _TC_MAKE32(n))
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _TC_GETVALUE(v,n,m) ((_TC_MAKE32(v) & _TC_MAKE32(m)) >> _TC_MAKE32(n))
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* verdict bit breakdown
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 0: when set -> this packet has been munged already
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 1: when set -> It is ok to munge this packet
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 2,3,4,5: Reclassify counter - sort of reverse TTL - if exceeded
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengassume loop
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 6,7: Where this packet was last seen
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng0: Above the transmit example at the socket level
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng1: on the Ingress
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng2: on the Egress
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbit 8: when set --> Request not to classify on ingress.
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengbits 9,10,11: redirect counter -  redirect TTL. Loop avoidance
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * */
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_MUNGED          _TC_MAKEMASK1(0)
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_MUNGED(v)   ( TC_MUNGED | (v & ~TC_MUNGED))
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CLR_TC_MUNGED(v)   ( v & ~TC_MUNGED)
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_OK2MUNGE        _TC_MAKEMASK1(1)
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_OK2MUNGE(v)   ( TC_OK2MUNGE | (v & ~TC_OK2MUNGE))
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CLR_TC_OK2MUNGE(v)   ( v & ~TC_OK2MUNGE)
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_VERD          _TC_MAKE32(2)
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_VERD          _TC_MAKEMASK(4,S_TC_VERD)
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_VERD(x)       _TC_GETVALUE(x,S_TC_VERD,M_TC_VERD)
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_VERD(x)       _TC_MAKEVALUE(x,S_TC_VERD)
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_VERD(v,n)   ((V_TC_VERD(n)) | (v & ~M_TC_VERD))
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_FROM          _TC_MAKE32(6)
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_FROM          _TC_MAKEMASK(2,S_TC_FROM)
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_FROM(x)       _TC_GETVALUE(x,S_TC_FROM,M_TC_FROM)
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_FROM(x)       _TC_MAKEVALUE(x,S_TC_FROM)
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_FROM(v,n)   ((V_TC_FROM(n)) | (v & ~M_TC_FROM))
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define AT_STACK	0x0
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define AT_INGRESS	0x1
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define AT_EGRESS	0x2
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_NCLS          _TC_MAKEMASK1(8)
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_NCLS(v)   ( TC_NCLS | (v & ~TC_NCLS))
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define CLR_TC_NCLS(v)   ( v & ~TC_NCLS)
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_RTTL          _TC_MAKE32(9)
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_RTTL          _TC_MAKEMASK(3,S_TC_RTTL)
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_RTTL(x)       _TC_GETVALUE(x,S_TC_RTTL,M_TC_RTTL)
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_RTTL(x)       _TC_MAKEVALUE(x,S_TC_RTTL)
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_RTTL(v,n)   ((V_TC_RTTL(n)) | (v & ~M_TC_RTTL))
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define S_TC_AT          _TC_MAKE32(12)
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define M_TC_AT          _TC_MAKEMASK(2,S_TC_AT)
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define G_TC_AT(x)       _TC_GETVALUE(x,S_TC_AT,M_TC_AT)
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define V_TC_AT(x)       _TC_MAKEVALUE(x,S_TC_AT)
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define SET_TC_AT(v,n)   ((V_TC_AT(n)) | (v & ~M_TC_AT))
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Action attributes */
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_UNSPEC,
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_KIND,
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_OPTIONS,
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_INDEX,
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ACT_STATS,
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_ACT_MAX
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_MAX __TCA_ACT_MAX
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_MAX_PRIO 32
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_BIND	1
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOBIND	0
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_UNBIND	1
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOUNBIND	0
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_REPLACE		1
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_NOREPLACE	0
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MAX_REC_LOOP 4
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define MAX_RED_LOOP 4
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_UNSPEC	(-1)
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_OK		0
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_RECLASSIFY	1
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_SHOT		2
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_PIPE		3
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_STOLEN		4
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_QUEUED		5
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_REPEAT		6
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_ACT_JUMP		0x10000000
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Action type identifiers*/
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ID_UNSPEC=0,
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ID_POLICE=1,
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* other actions go here */
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_ID_MAX=255
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ID_MAX __TCA_ID_MAX
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_police {
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			index;
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int			action;
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_UNSPEC	TC_ACT_UNSPEC
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_OK		TC_ACT_OK
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_RECLASSIFY	TC_ACT_RECLASSIFY
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_SHOT		TC_ACT_SHOT
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_POLICE_PIPE		TC_ACT_PIPE
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			limit;
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			burst;
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			mtu;
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_ratespec	rate;
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_ratespec	peakrate;
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int 			refcnt;
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int 			bindcnt;
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			capab;
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_t {
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64   install;
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64   lastuse;
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64   expires;
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_cnt {
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   refcnt;
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   bindcnt;
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define tc_gen \
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32                 index; \
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32                 capab; \
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   action; \
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   refcnt; \
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int                   bindcnt
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_UNSPEC,
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_TBF,
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_RATE,
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_PEAKRATE,
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_AVRATE,
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_POLICE_RESULT,
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_POLICE_MAX
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_POLICE_RESULT TCA_POLICE_RESULT
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_POLICE_MAX (__TCA_POLICE_MAX - 1)
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* U32 filters */
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_HTID(h) ((h)&0xFFF00000)
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_USERHTID(h) (TC_U32_HTID(h)>>20)
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_HASH(h) (((h)>>12)&0xFF)
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_NODE(h) ((h)&0xFFF)
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_KEY(h) ((h)&0xFFFFF)
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_UNSPEC	0
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_ROOT	(0xFFF00000)
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_UNSPEC,
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_CLASSID,
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_HASH,
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_LINK,
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_DIVISOR,
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_SEL,
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_POLICE,
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_ACT,
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_INDEV,
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_PCNT,
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_U32_MARK,
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_U32_MAX
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_U32_MAX (__TCA_U32_MAX - 1)
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_key {
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be32		mask;
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be32		val;
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		off;
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		offmask;
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_sel {
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		flags;
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		offshift;
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		nkeys;
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be16			offmask;
209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16			off;
210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short			offoff;
211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short			hoff;
213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be32			hmask;
214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_u32_key	keys[0];
215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_mark {
218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		val;
219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		mask;
220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		success;
221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_u32_pcnt {
224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 rcnt;
225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 rhit;
226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 kcnts[0];
227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Flags */
230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_TERMINAL		1
232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_OFFSET		2
233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_VAROFFSET	4
234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_EAT		8
235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TC_U32_MAXDEPTH 8
237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RSVP filter */
240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_UNSPEC,
243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_CLASSID,
244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_DST,
245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_SRC,
246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_PINFO,
247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_POLICE,
248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RSVP_ACT,
249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_RSVP_MAX
250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_RSVP_MAX (__TCA_RSVP_MAX - 1 )
253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_rsvp_gpi {
255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	key;
256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	mask;
257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int	offset;
258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tc_rsvp_pinfo {
261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_rsvp_gpi dpi;
262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct tc_rsvp_gpi spi;
263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	protocol;
264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	tunnelid;
265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	tunnelhdr;
266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	pad;
267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* ROUTE filter */
270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_UNSPEC,
273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_CLASSID,
274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_TO,
275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_FROM,
276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_IIF,
277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_POLICE,
278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_ROUTE4_ACT,
279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_ROUTE4_MAX
280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ROUTE4_MAX (__TCA_ROUTE4_MAX - 1)
283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* FW filter */
286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_UNSPEC,
289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_CLASSID,
290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_POLICE,
291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_INDEV, /*  used by CONFIG_NET_CLS_IND */
292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_ACT, /* used by CONFIG_NET_CLS_ACT */
293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FW_MASK,
294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_FW_MAX
295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_FW_MAX (__TCA_FW_MAX - 1)
298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* TC index filter */
300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_UNSPEC,
303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_HASH,
304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_MASK,
305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_SHIFT,
306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_FALL_THROUGH,
307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_CLASSID,
308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_POLICE,
309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_TCINDEX_ACT,
310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_TCINDEX_MAX
311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_TCINDEX_MAX     (__TCA_TCINDEX_MAX - 1)
314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Flow filter */
316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_SRC,
319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_DST,
320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PROTO,
321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PROTO_SRC,
322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PROTO_DST,
323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_IIF,
324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_PRIORITY,
325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_MARK,
326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT,
327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_SRC,
328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_DST,
329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_PROTO_SRC,
330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_NFCT_PROTO_DST,
331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_RTCLASSID,
332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_SKUID,
333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_SKGID,
334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_VLAN_TAG,
335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_KEY_RXHASH,
336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__FLOW_KEY_MAX,
337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FLOW_KEY_MAX	(__FLOW_KEY_MAX - 1)
340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_MODE_MAP,
343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	FLOW_MODE_HASH,
344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_UNSPEC,
348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_KEYS,
349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_MODE,
350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_BASECLASS,
351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_RSHIFT,
352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_ADDEND,
353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_MASK,
354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_XOR,
355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_DIVISOR,
356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_ACT,
357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_POLICE,
358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_EMATCHES,
359224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FLOW_PERTURB,
360224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_FLOW_MAX
361224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
362224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
363224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_FLOW_MAX	(__TCA_FLOW_MAX - 1)
364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Basic filter */
366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_UNSPEC,
369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_CLASSID,
370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_EMATCHES,
371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_ACT,
372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_BASIC_POLICE,
373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_BASIC_MAX
374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
376224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_BASIC_MAX (__TCA_BASIC_MAX - 1)
377224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
378224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
379224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Cgroup classifier */
380224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
381224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_UNSPEC,
383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_ACT,
384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_POLICE,
385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_CGROUP_EMATCHES,
386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_CGROUP_MAX,
387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
389224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_CGROUP_MAX (__TCA_CGROUP_MAX - 1)
390224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
391e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris/* BPF classifier */
392e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
393e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferrisenum {
394e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_UNSPEC,
395e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_ACT,
396e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_POLICE,
397e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_CLASSID,
398e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_OPS_LEN,
399e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_BPF_OPS,
400e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__TCA_BPF_MAX,
401e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris};
402e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
403e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define TCA_BPF_MAX (__TCA_BPF_MAX - 1)
404e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Extended Matches */
406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_ematch_tree_hdr {
408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		nmatches;
409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		progid;
410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_EMATCH_TREE_UNSPEC,
414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_EMATCH_TREE_HDR,
415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_EMATCH_TREE_LIST,
416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_EMATCH_TREE_MAX
417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_EMATCH_TREE_MAX (__TCA_EMATCH_TREE_MAX - 1)
419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcf_ematch_hdr {
421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		matchid;
422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		kind;
423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		flags;
424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16		pad; /* currently unused */
425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*  0                   1
428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * +-----------------------+-+-+---+
430224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * |         Unused        |S|I| R |
431224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * +-----------------------+-+-+---+
432224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
433224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * R(2) ::= relation to next ematch
434224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *          where: 0 0 END (last ematch)
435224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *                 0 1 AND
436224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *                 1 0 OR
437224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *                 1 1 Unused (invalid)
438224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * I(1) ::= invert result
439224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * S(1) ::= simple payload
440224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
441224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_END	0
442224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_AND	(1<<0)
443224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_OR	(1<<1)
444224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_INVERT	(1<<2)
445224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_SIMPLE	(1<<3)
446224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
447224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_MASK	3
448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_EM_REL_VALID(v) (((v) & TCF_EM_REL_MASK) != TCF_EM_REL_MASK)
449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_LAYER_LINK,
452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_LAYER_NETWORK,
453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_LAYER_TRANSPORT,
454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCF_LAYER_MAX
455224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
456224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCF_LAYER_MAX (__TCF_LAYER_MAX - 1)
457224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
458224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Ematch type assignments
459224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *   1..32767		Reserved for ematches inside kernel tree
460224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *   32768..65535	Free to use, not reliable
461224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_CONTAINER	0
463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_CMP		1
464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_NBYTE		2
465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_U32		3
466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_META		4
467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_TEXT		5
468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_VLAN		6
469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_CANID		7
470224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_IPSET		8
471224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	TCF_EM_MAX		8
472224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
473224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
474224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_PROG_TC
475224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
476224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
477224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_OPND_EQ,
479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_OPND_GT,
480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCF_EM_OPND_LT
481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
484