Merge tag 'pinctrl-v5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[sfrench/cifs-2.6.git] / include / uapi / linux / netfilter / nf_tables.h
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 #ifndef _LINUX_NF_TABLES_H
3 #define _LINUX_NF_TABLES_H
4
5 #define NFT_NAME_MAXLEN         256
6 #define NFT_TABLE_MAXNAMELEN    NFT_NAME_MAXLEN
7 #define NFT_CHAIN_MAXNAMELEN    NFT_NAME_MAXLEN
8 #define NFT_SET_MAXNAMELEN      NFT_NAME_MAXLEN
9 #define NFT_OBJ_MAXNAMELEN      NFT_NAME_MAXLEN
10 #define NFT_USERDATA_MAXLEN     256
11 #define NFT_OSF_MAXGENRELEN     16
12
13 /**
14  * enum nft_registers - nf_tables registers
15  *
16  * nf_tables used to have five registers: a verdict register and four data
17  * registers of size 16. The data registers have been changed to 16 registers
18  * of size 4. For compatibility reasons, the NFT_REG_[1-4] registers still
19  * map to areas of size 16, the 4 byte registers are addressed using
20  * NFT_REG32_00 - NFT_REG32_15.
21  */
22 enum nft_registers {
23         NFT_REG_VERDICT,
24         NFT_REG_1,
25         NFT_REG_2,
26         NFT_REG_3,
27         NFT_REG_4,
28         __NFT_REG_MAX,
29
30         NFT_REG32_00    = 8,
31         NFT_REG32_01,
32         NFT_REG32_02,
33         NFT_REG32_03,
34         NFT_REG32_04,
35         NFT_REG32_05,
36         NFT_REG32_06,
37         NFT_REG32_07,
38         NFT_REG32_08,
39         NFT_REG32_09,
40         NFT_REG32_10,
41         NFT_REG32_11,
42         NFT_REG32_12,
43         NFT_REG32_13,
44         NFT_REG32_14,
45         NFT_REG32_15,
46 };
47 #define NFT_REG_MAX     (__NFT_REG_MAX - 1)
48
49 #define NFT_REG_SIZE    16
50 #define NFT_REG32_SIZE  4
51 #define NFT_REG32_COUNT (NFT_REG32_15 - NFT_REG32_00 + 1)
52
53 /**
54  * enum nft_verdicts - nf_tables internal verdicts
55  *
56  * @NFT_CONTINUE: continue evaluation of the current rule
57  * @NFT_BREAK: terminate evaluation of the current rule
58  * @NFT_JUMP: push the current chain on the jump stack and jump to a chain
59  * @NFT_GOTO: jump to a chain without pushing the current chain on the jump stack
60  * @NFT_RETURN: return to the topmost chain on the jump stack
61  *
62  * The nf_tables verdicts share their numeric space with the netfilter verdicts.
63  */
64 enum nft_verdicts {
65         NFT_CONTINUE    = -1,
66         NFT_BREAK       = -2,
67         NFT_JUMP        = -3,
68         NFT_GOTO        = -4,
69         NFT_RETURN      = -5,
70 };
71
72 /**
73  * enum nf_tables_msg_types - nf_tables netlink message types
74  *
75  * @NFT_MSG_NEWTABLE: create a new table (enum nft_table_attributes)
76  * @NFT_MSG_GETTABLE: get a table (enum nft_table_attributes)
77  * @NFT_MSG_DELTABLE: delete a table (enum nft_table_attributes)
78  * @NFT_MSG_NEWCHAIN: create a new chain (enum nft_chain_attributes)
79  * @NFT_MSG_GETCHAIN: get a chain (enum nft_chain_attributes)
80  * @NFT_MSG_DELCHAIN: delete a chain (enum nft_chain_attributes)
81  * @NFT_MSG_NEWRULE: create a new rule (enum nft_rule_attributes)
82  * @NFT_MSG_GETRULE: get a rule (enum nft_rule_attributes)
83  * @NFT_MSG_DELRULE: delete a rule (enum nft_rule_attributes)
84  * @NFT_MSG_NEWSET: create a new set (enum nft_set_attributes)
85  * @NFT_MSG_GETSET: get a set (enum nft_set_attributes)
86  * @NFT_MSG_DELSET: delete a set (enum nft_set_attributes)
87  * @NFT_MSG_NEWSETELEM: create a new set element (enum nft_set_elem_attributes)
88  * @NFT_MSG_GETSETELEM: get a set element (enum nft_set_elem_attributes)
89  * @NFT_MSG_DELSETELEM: delete a set element (enum nft_set_elem_attributes)
90  * @NFT_MSG_NEWGEN: announce a new generation, only for events (enum nft_gen_attributes)
91  * @NFT_MSG_GETGEN: get the rule-set generation (enum nft_gen_attributes)
92  * @NFT_MSG_TRACE: trace event (enum nft_trace_attributes)
93  * @NFT_MSG_NEWOBJ: create a stateful object (enum nft_obj_attributes)
94  * @NFT_MSG_GETOBJ: get a stateful object (enum nft_obj_attributes)
95  * @NFT_MSG_DELOBJ: delete a stateful object (enum nft_obj_attributes)
96  * @NFT_MSG_GETOBJ_RESET: get and reset a stateful object (enum nft_obj_attributes)
97  * @NFT_MSG_NEWFLOWTABLE: add new flow table (enum nft_flowtable_attributes)
98  * @NFT_MSG_GETFLOWTABLE: get flow table (enum nft_flowtable_attributes)
99  * @NFT_MSG_DELFLOWTABLE: delete flow table (enum nft_flowtable_attributes)
100  */
101 enum nf_tables_msg_types {
102         NFT_MSG_NEWTABLE,
103         NFT_MSG_GETTABLE,
104         NFT_MSG_DELTABLE,
105         NFT_MSG_NEWCHAIN,
106         NFT_MSG_GETCHAIN,
107         NFT_MSG_DELCHAIN,
108         NFT_MSG_NEWRULE,
109         NFT_MSG_GETRULE,
110         NFT_MSG_DELRULE,
111         NFT_MSG_NEWSET,
112         NFT_MSG_GETSET,
113         NFT_MSG_DELSET,
114         NFT_MSG_NEWSETELEM,
115         NFT_MSG_GETSETELEM,
116         NFT_MSG_DELSETELEM,
117         NFT_MSG_NEWGEN,
118         NFT_MSG_GETGEN,
119         NFT_MSG_TRACE,
120         NFT_MSG_NEWOBJ,
121         NFT_MSG_GETOBJ,
122         NFT_MSG_DELOBJ,
123         NFT_MSG_GETOBJ_RESET,
124         NFT_MSG_NEWFLOWTABLE,
125         NFT_MSG_GETFLOWTABLE,
126         NFT_MSG_DELFLOWTABLE,
127         NFT_MSG_MAX,
128 };
129
130 /**
131  * enum nft_list_attributes - nf_tables generic list netlink attributes
132  *
133  * @NFTA_LIST_ELEM: list element (NLA_NESTED)
134  */
135 enum nft_list_attributes {
136         NFTA_LIST_UNSPEC,
137         NFTA_LIST_ELEM,
138         __NFTA_LIST_MAX
139 };
140 #define NFTA_LIST_MAX           (__NFTA_LIST_MAX - 1)
141
142 /**
143  * enum nft_hook_attributes - nf_tables netfilter hook netlink attributes
144  *
145  * @NFTA_HOOK_HOOKNUM: netfilter hook number (NLA_U32)
146  * @NFTA_HOOK_PRIORITY: netfilter hook priority (NLA_U32)
147  * @NFTA_HOOK_DEV: netdevice name (NLA_STRING)
148  * @NFTA_HOOK_DEVS: list of netdevices (NLA_NESTED)
149  */
150 enum nft_hook_attributes {
151         NFTA_HOOK_UNSPEC,
152         NFTA_HOOK_HOOKNUM,
153         NFTA_HOOK_PRIORITY,
154         NFTA_HOOK_DEV,
155         NFTA_HOOK_DEVS,
156         __NFTA_HOOK_MAX
157 };
158 #define NFTA_HOOK_MAX           (__NFTA_HOOK_MAX - 1)
159
160 /**
161  * enum nft_table_flags - nf_tables table flags
162  *
163  * @NFT_TABLE_F_DORMANT: this table is not active
164  */
165 enum nft_table_flags {
166         NFT_TABLE_F_DORMANT     = 0x1,
167 };
168
169 /**
170  * enum nft_table_attributes - nf_tables table netlink attributes
171  *
172  * @NFTA_TABLE_NAME: name of the table (NLA_STRING)
173  * @NFTA_TABLE_FLAGS: bitmask of enum nft_table_flags (NLA_U32)
174  * @NFTA_TABLE_USE: number of chains in this table (NLA_U32)
175  * @NFTA_TABLE_USERDATA: user data (NLA_BINARY)
176  */
177 enum nft_table_attributes {
178         NFTA_TABLE_UNSPEC,
179         NFTA_TABLE_NAME,
180         NFTA_TABLE_FLAGS,
181         NFTA_TABLE_USE,
182         NFTA_TABLE_HANDLE,
183         NFTA_TABLE_PAD,
184         NFTA_TABLE_USERDATA,
185         __NFTA_TABLE_MAX
186 };
187 #define NFTA_TABLE_MAX          (__NFTA_TABLE_MAX - 1)
188
189 enum nft_chain_flags {
190         NFT_CHAIN_BASE          = (1 << 0),
191         NFT_CHAIN_HW_OFFLOAD    = (1 << 1),
192         NFT_CHAIN_BINDING       = (1 << 2),
193 };
194 #define NFT_CHAIN_FLAGS         (NFT_CHAIN_BASE         | \
195                                  NFT_CHAIN_HW_OFFLOAD   | \
196                                  NFT_CHAIN_BINDING)
197
198 /**
199  * enum nft_chain_attributes - nf_tables chain netlink attributes
200  *
201  * @NFTA_CHAIN_TABLE: name of the table containing the chain (NLA_STRING)
202  * @NFTA_CHAIN_HANDLE: numeric handle of the chain (NLA_U64)
203  * @NFTA_CHAIN_NAME: name of the chain (NLA_STRING)
204  * @NFTA_CHAIN_HOOK: hook specification for basechains (NLA_NESTED: nft_hook_attributes)
205  * @NFTA_CHAIN_POLICY: numeric policy of the chain (NLA_U32)
206  * @NFTA_CHAIN_USE: number of references to this chain (NLA_U32)
207  * @NFTA_CHAIN_TYPE: type name of the string (NLA_NUL_STRING)
208  * @NFTA_CHAIN_COUNTERS: counter specification of the chain (NLA_NESTED: nft_counter_attributes)
209  * @NFTA_CHAIN_FLAGS: chain flags
210  * @NFTA_CHAIN_ID: uniquely identifies a chain in a transaction (NLA_U32)
211  * @NFTA_CHAIN_USERDATA: user data (NLA_BINARY)
212  */
213 enum nft_chain_attributes {
214         NFTA_CHAIN_UNSPEC,
215         NFTA_CHAIN_TABLE,
216         NFTA_CHAIN_HANDLE,
217         NFTA_CHAIN_NAME,
218         NFTA_CHAIN_HOOK,
219         NFTA_CHAIN_POLICY,
220         NFTA_CHAIN_USE,
221         NFTA_CHAIN_TYPE,
222         NFTA_CHAIN_COUNTERS,
223         NFTA_CHAIN_PAD,
224         NFTA_CHAIN_FLAGS,
225         NFTA_CHAIN_ID,
226         NFTA_CHAIN_USERDATA,
227         __NFTA_CHAIN_MAX
228 };
229 #define NFTA_CHAIN_MAX          (__NFTA_CHAIN_MAX - 1)
230
231 /**
232  * enum nft_rule_attributes - nf_tables rule netlink attributes
233  *
234  * @NFTA_RULE_TABLE: name of the table containing the rule (NLA_STRING)
235  * @NFTA_RULE_CHAIN: name of the chain containing the rule (NLA_STRING)
236  * @NFTA_RULE_HANDLE: numeric handle of the rule (NLA_U64)
237  * @NFTA_RULE_EXPRESSIONS: list of expressions (NLA_NESTED: nft_expr_attributes)
238  * @NFTA_RULE_COMPAT: compatibility specifications of the rule (NLA_NESTED: nft_rule_compat_attributes)
239  * @NFTA_RULE_POSITION: numeric handle of the previous rule (NLA_U64)
240  * @NFTA_RULE_USERDATA: user data (NLA_BINARY, NFT_USERDATA_MAXLEN)
241  * @NFTA_RULE_ID: uniquely identifies a rule in a transaction (NLA_U32)
242  * @NFTA_RULE_POSITION_ID: transaction unique identifier of the previous rule (NLA_U32)
243  */
244 enum nft_rule_attributes {
245         NFTA_RULE_UNSPEC,
246         NFTA_RULE_TABLE,
247         NFTA_RULE_CHAIN,
248         NFTA_RULE_HANDLE,
249         NFTA_RULE_EXPRESSIONS,
250         NFTA_RULE_COMPAT,
251         NFTA_RULE_POSITION,
252         NFTA_RULE_USERDATA,
253         NFTA_RULE_PAD,
254         NFTA_RULE_ID,
255         NFTA_RULE_POSITION_ID,
256         NFTA_RULE_CHAIN_ID,
257         __NFTA_RULE_MAX
258 };
259 #define NFTA_RULE_MAX           (__NFTA_RULE_MAX - 1)
260
261 /**
262  * enum nft_rule_compat_flags - nf_tables rule compat flags
263  *
264  * @NFT_RULE_COMPAT_F_INV: invert the check result
265  */
266 enum nft_rule_compat_flags {
267         NFT_RULE_COMPAT_F_INV   = (1 << 1),
268         NFT_RULE_COMPAT_F_MASK  = NFT_RULE_COMPAT_F_INV,
269 };
270
271 /**
272  * enum nft_rule_compat_attributes - nf_tables rule compat attributes
273  *
274  * @NFTA_RULE_COMPAT_PROTO: numeric value of handled protocol (NLA_U32)
275  * @NFTA_RULE_COMPAT_FLAGS: bitmask of enum nft_rule_compat_flags (NLA_U32)
276  */
277 enum nft_rule_compat_attributes {
278         NFTA_RULE_COMPAT_UNSPEC,
279         NFTA_RULE_COMPAT_PROTO,
280         NFTA_RULE_COMPAT_FLAGS,
281         __NFTA_RULE_COMPAT_MAX
282 };
283 #define NFTA_RULE_COMPAT_MAX    (__NFTA_RULE_COMPAT_MAX - 1)
284
285 /**
286  * enum nft_set_flags - nf_tables set flags
287  *
288  * @NFT_SET_ANONYMOUS: name allocation, automatic cleanup on unlink
289  * @NFT_SET_CONSTANT: set contents may not change while bound
290  * @NFT_SET_INTERVAL: set contains intervals
291  * @NFT_SET_MAP: set is used as a dictionary
292  * @NFT_SET_TIMEOUT: set uses timeouts
293  * @NFT_SET_EVAL: set can be updated from the evaluation path
294  * @NFT_SET_OBJECT: set contains stateful objects
295  * @NFT_SET_CONCAT: set contains a concatenation
296  * @NFT_SET_EXPR: set contains expressions
297  */
298 enum nft_set_flags {
299         NFT_SET_ANONYMOUS               = 0x1,
300         NFT_SET_CONSTANT                = 0x2,
301         NFT_SET_INTERVAL                = 0x4,
302         NFT_SET_MAP                     = 0x8,
303         NFT_SET_TIMEOUT                 = 0x10,
304         NFT_SET_EVAL                    = 0x20,
305         NFT_SET_OBJECT                  = 0x40,
306         NFT_SET_CONCAT                  = 0x80,
307         NFT_SET_EXPR                    = 0x100,
308 };
309
310 /**
311  * enum nft_set_policies - set selection policy
312  *
313  * @NFT_SET_POL_PERFORMANCE: prefer high performance over low memory use
314  * @NFT_SET_POL_MEMORY: prefer low memory use over high performance
315  */
316 enum nft_set_policies {
317         NFT_SET_POL_PERFORMANCE,
318         NFT_SET_POL_MEMORY,
319 };
320
321 /**
322  * enum nft_set_desc_attributes - set element description
323  *
324  * @NFTA_SET_DESC_SIZE: number of elements in set (NLA_U32)
325  * @NFTA_SET_DESC_CONCAT: description of field concatenation (NLA_NESTED)
326  */
327 enum nft_set_desc_attributes {
328         NFTA_SET_DESC_UNSPEC,
329         NFTA_SET_DESC_SIZE,
330         NFTA_SET_DESC_CONCAT,
331         __NFTA_SET_DESC_MAX
332 };
333 #define NFTA_SET_DESC_MAX       (__NFTA_SET_DESC_MAX - 1)
334
335 /**
336  * enum nft_set_field_attributes - attributes of concatenated fields
337  *
338  * @NFTA_SET_FIELD_LEN: length of single field, in bits (NLA_U32)
339  */
340 enum nft_set_field_attributes {
341         NFTA_SET_FIELD_UNSPEC,
342         NFTA_SET_FIELD_LEN,
343         __NFTA_SET_FIELD_MAX
344 };
345 #define NFTA_SET_FIELD_MAX      (__NFTA_SET_FIELD_MAX - 1)
346
347 /**
348  * enum nft_set_attributes - nf_tables set netlink attributes
349  *
350  * @NFTA_SET_TABLE: table name (NLA_STRING)
351  * @NFTA_SET_NAME: set name (NLA_STRING)
352  * @NFTA_SET_FLAGS: bitmask of enum nft_set_flags (NLA_U32)
353  * @NFTA_SET_KEY_TYPE: key data type, informational purpose only (NLA_U32)
354  * @NFTA_SET_KEY_LEN: key data length (NLA_U32)
355  * @NFTA_SET_DATA_TYPE: mapping data type (NLA_U32)
356  * @NFTA_SET_DATA_LEN: mapping data length (NLA_U32)
357  * @NFTA_SET_POLICY: selection policy (NLA_U32)
358  * @NFTA_SET_DESC: set description (NLA_NESTED)
359  * @NFTA_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
360  * @NFTA_SET_TIMEOUT: default timeout value (NLA_U64)
361  * @NFTA_SET_GC_INTERVAL: garbage collection interval (NLA_U32)
362  * @NFTA_SET_USERDATA: user data (NLA_BINARY)
363  * @NFTA_SET_OBJ_TYPE: stateful object type (NLA_U32: NFT_OBJECT_*)
364  * @NFTA_SET_HANDLE: set handle (NLA_U64)
365  * @NFTA_SET_EXPR: set expression (NLA_NESTED: nft_expr_attributes)
366  * @NFTA_SET_EXPRESSIONS: list of expressions (NLA_NESTED: nft_list_attributes)
367  */
368 enum nft_set_attributes {
369         NFTA_SET_UNSPEC,
370         NFTA_SET_TABLE,
371         NFTA_SET_NAME,
372         NFTA_SET_FLAGS,
373         NFTA_SET_KEY_TYPE,
374         NFTA_SET_KEY_LEN,
375         NFTA_SET_DATA_TYPE,
376         NFTA_SET_DATA_LEN,
377         NFTA_SET_POLICY,
378         NFTA_SET_DESC,
379         NFTA_SET_ID,
380         NFTA_SET_TIMEOUT,
381         NFTA_SET_GC_INTERVAL,
382         NFTA_SET_USERDATA,
383         NFTA_SET_PAD,
384         NFTA_SET_OBJ_TYPE,
385         NFTA_SET_HANDLE,
386         NFTA_SET_EXPR,
387         NFTA_SET_EXPRESSIONS,
388         __NFTA_SET_MAX
389 };
390 #define NFTA_SET_MAX            (__NFTA_SET_MAX - 1)
391
392 /**
393  * enum nft_set_elem_flags - nf_tables set element flags
394  *
395  * @NFT_SET_ELEM_INTERVAL_END: element ends the previous interval
396  */
397 enum nft_set_elem_flags {
398         NFT_SET_ELEM_INTERVAL_END       = 0x1,
399 };
400
401 /**
402  * enum nft_set_elem_attributes - nf_tables set element netlink attributes
403  *
404  * @NFTA_SET_ELEM_KEY: key value (NLA_NESTED: nft_data)
405  * @NFTA_SET_ELEM_DATA: data value of mapping (NLA_NESTED: nft_data_attributes)
406  * @NFTA_SET_ELEM_FLAGS: bitmask of nft_set_elem_flags (NLA_U32)
407  * @NFTA_SET_ELEM_TIMEOUT: timeout value (NLA_U64)
408  * @NFTA_SET_ELEM_EXPIRATION: expiration time (NLA_U64)
409  * @NFTA_SET_ELEM_USERDATA: user data (NLA_BINARY)
410  * @NFTA_SET_ELEM_EXPR: expression (NLA_NESTED: nft_expr_attributes)
411  * @NFTA_SET_ELEM_OBJREF: stateful object reference (NLA_STRING)
412  * @NFTA_SET_ELEM_KEY_END: closing key value (NLA_NESTED: nft_data)
413  * @NFTA_SET_ELEM_EXPRESSIONS: list of expressions (NLA_NESTED: nft_list_attributes)
414  */
415 enum nft_set_elem_attributes {
416         NFTA_SET_ELEM_UNSPEC,
417         NFTA_SET_ELEM_KEY,
418         NFTA_SET_ELEM_DATA,
419         NFTA_SET_ELEM_FLAGS,
420         NFTA_SET_ELEM_TIMEOUT,
421         NFTA_SET_ELEM_EXPIRATION,
422         NFTA_SET_ELEM_USERDATA,
423         NFTA_SET_ELEM_EXPR,
424         NFTA_SET_ELEM_PAD,
425         NFTA_SET_ELEM_OBJREF,
426         NFTA_SET_ELEM_KEY_END,
427         NFTA_SET_ELEM_EXPRESSIONS,
428         __NFTA_SET_ELEM_MAX
429 };
430 #define NFTA_SET_ELEM_MAX       (__NFTA_SET_ELEM_MAX - 1)
431
432 /**
433  * enum nft_set_elem_list_attributes - nf_tables set element list netlink attributes
434  *
435  * @NFTA_SET_ELEM_LIST_TABLE: table of the set to be changed (NLA_STRING)
436  * @NFTA_SET_ELEM_LIST_SET: name of the set to be changed (NLA_STRING)
437  * @NFTA_SET_ELEM_LIST_ELEMENTS: list of set elements (NLA_NESTED: nft_set_elem_attributes)
438  * @NFTA_SET_ELEM_LIST_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
439  */
440 enum nft_set_elem_list_attributes {
441         NFTA_SET_ELEM_LIST_UNSPEC,
442         NFTA_SET_ELEM_LIST_TABLE,
443         NFTA_SET_ELEM_LIST_SET,
444         NFTA_SET_ELEM_LIST_ELEMENTS,
445         NFTA_SET_ELEM_LIST_SET_ID,
446         __NFTA_SET_ELEM_LIST_MAX
447 };
448 #define NFTA_SET_ELEM_LIST_MAX  (__NFTA_SET_ELEM_LIST_MAX - 1)
449
450 /**
451  * enum nft_data_types - nf_tables data types
452  *
453  * @NFT_DATA_VALUE: generic data
454  * @NFT_DATA_VERDICT: netfilter verdict
455  *
456  * The type of data is usually determined by the kernel directly and is not
457  * explicitly specified by userspace. The only difference are sets, where
458  * userspace specifies the key and mapping data types.
459  *
460  * The values 0xffffff00-0xffffffff are reserved for internally used types.
461  * The remaining range can be freely used by userspace to encode types, all
462  * values are equivalent to NFT_DATA_VALUE.
463  */
464 enum nft_data_types {
465         NFT_DATA_VALUE,
466         NFT_DATA_VERDICT        = 0xffffff00U,
467 };
468
469 #define NFT_DATA_RESERVED_MASK  0xffffff00U
470
471 /**
472  * enum nft_data_attributes - nf_tables data netlink attributes
473  *
474  * @NFTA_DATA_VALUE: generic data (NLA_BINARY)
475  * @NFTA_DATA_VERDICT: nf_tables verdict (NLA_NESTED: nft_verdict_attributes)
476  */
477 enum nft_data_attributes {
478         NFTA_DATA_UNSPEC,
479         NFTA_DATA_VALUE,
480         NFTA_DATA_VERDICT,
481         __NFTA_DATA_MAX
482 };
483 #define NFTA_DATA_MAX           (__NFTA_DATA_MAX - 1)
484
485 /* Maximum length of a value */
486 #define NFT_DATA_VALUE_MAXLEN   64
487
488 /**
489  * enum nft_verdict_attributes - nf_tables verdict netlink attributes
490  *
491  * @NFTA_VERDICT_CODE: nf_tables verdict (NLA_U32: enum nft_verdicts)
492  * @NFTA_VERDICT_CHAIN: jump target chain name (NLA_STRING)
493  * @NFTA_VERDICT_CHAIN_ID: jump target chain ID (NLA_U32)
494  */
495 enum nft_verdict_attributes {
496         NFTA_VERDICT_UNSPEC,
497         NFTA_VERDICT_CODE,
498         NFTA_VERDICT_CHAIN,
499         NFTA_VERDICT_CHAIN_ID,
500         __NFTA_VERDICT_MAX
501 };
502 #define NFTA_VERDICT_MAX        (__NFTA_VERDICT_MAX - 1)
503
504 /**
505  * enum nft_expr_attributes - nf_tables expression netlink attributes
506  *
507  * @NFTA_EXPR_NAME: name of the expression type (NLA_STRING)
508  * @NFTA_EXPR_DATA: type specific data (NLA_NESTED)
509  */
510 enum nft_expr_attributes {
511         NFTA_EXPR_UNSPEC,
512         NFTA_EXPR_NAME,
513         NFTA_EXPR_DATA,
514         __NFTA_EXPR_MAX
515 };
516 #define NFTA_EXPR_MAX           (__NFTA_EXPR_MAX - 1)
517
518 /**
519  * enum nft_immediate_attributes - nf_tables immediate expression netlink attributes
520  *
521  * @NFTA_IMMEDIATE_DREG: destination register to load data into (NLA_U32)
522  * @NFTA_IMMEDIATE_DATA: data to load (NLA_NESTED: nft_data_attributes)
523  */
524 enum nft_immediate_attributes {
525         NFTA_IMMEDIATE_UNSPEC,
526         NFTA_IMMEDIATE_DREG,
527         NFTA_IMMEDIATE_DATA,
528         __NFTA_IMMEDIATE_MAX
529 };
530 #define NFTA_IMMEDIATE_MAX      (__NFTA_IMMEDIATE_MAX - 1)
531
532 /**
533  * enum nft_bitwise_ops - nf_tables bitwise operations
534  *
535  * @NFT_BITWISE_BOOL: mask-and-xor operation used to implement NOT, AND, OR and
536  *                    XOR boolean operations
537  * @NFT_BITWISE_LSHIFT: left-shift operation
538  * @NFT_BITWISE_RSHIFT: right-shift operation
539  */
540 enum nft_bitwise_ops {
541         NFT_BITWISE_BOOL,
542         NFT_BITWISE_LSHIFT,
543         NFT_BITWISE_RSHIFT,
544 };
545
546 /**
547  * enum nft_bitwise_attributes - nf_tables bitwise expression netlink attributes
548  *
549  * @NFTA_BITWISE_SREG: source register (NLA_U32: nft_registers)
550  * @NFTA_BITWISE_DREG: destination register (NLA_U32: nft_registers)
551  * @NFTA_BITWISE_LEN: length of operands (NLA_U32)
552  * @NFTA_BITWISE_MASK: mask value (NLA_NESTED: nft_data_attributes)
553  * @NFTA_BITWISE_XOR: xor value (NLA_NESTED: nft_data_attributes)
554  * @NFTA_BITWISE_OP: type of operation (NLA_U32: nft_bitwise_ops)
555  * @NFTA_BITWISE_DATA: argument for non-boolean operations
556  *                     (NLA_NESTED: nft_data_attributes)
557  *
558  * The bitwise expression supports boolean and shift operations.  It implements
559  * the boolean operations by performing the following operation:
560  *
561  * dreg = (sreg & mask) ^ xor
562  *
563  * with these mask and xor values:
564  *
565  *              mask    xor
566  * NOT:         1       1
567  * OR:          ~x      x
568  * XOR:         1       x
569  * AND:         x       0
570  */
571 enum nft_bitwise_attributes {
572         NFTA_BITWISE_UNSPEC,
573         NFTA_BITWISE_SREG,
574         NFTA_BITWISE_DREG,
575         NFTA_BITWISE_LEN,
576         NFTA_BITWISE_MASK,
577         NFTA_BITWISE_XOR,
578         NFTA_BITWISE_OP,
579         NFTA_BITWISE_DATA,
580         __NFTA_BITWISE_MAX
581 };
582 #define NFTA_BITWISE_MAX        (__NFTA_BITWISE_MAX - 1)
583
584 /**
585  * enum nft_byteorder_ops - nf_tables byteorder operators
586  *
587  * @NFT_BYTEORDER_NTOH: network to host operator
588  * @NFT_BYTEORDER_HTON: host to network operator
589  */
590 enum nft_byteorder_ops {
591         NFT_BYTEORDER_NTOH,
592         NFT_BYTEORDER_HTON,
593 };
594
595 /**
596  * enum nft_byteorder_attributes - nf_tables byteorder expression netlink attributes
597  *
598  * @NFTA_BYTEORDER_SREG: source register (NLA_U32: nft_registers)
599  * @NFTA_BYTEORDER_DREG: destination register (NLA_U32: nft_registers)
600  * @NFTA_BYTEORDER_OP: operator (NLA_U32: enum nft_byteorder_ops)
601  * @NFTA_BYTEORDER_LEN: length of the data (NLA_U32)
602  * @NFTA_BYTEORDER_SIZE: data size in bytes (NLA_U32: 2 or 4)
603  */
604 enum nft_byteorder_attributes {
605         NFTA_BYTEORDER_UNSPEC,
606         NFTA_BYTEORDER_SREG,
607         NFTA_BYTEORDER_DREG,
608         NFTA_BYTEORDER_OP,
609         NFTA_BYTEORDER_LEN,
610         NFTA_BYTEORDER_SIZE,
611         __NFTA_BYTEORDER_MAX
612 };
613 #define NFTA_BYTEORDER_MAX      (__NFTA_BYTEORDER_MAX - 1)
614
615 /**
616  * enum nft_cmp_ops - nf_tables relational operator
617  *
618  * @NFT_CMP_EQ: equal
619  * @NFT_CMP_NEQ: not equal
620  * @NFT_CMP_LT: less than
621  * @NFT_CMP_LTE: less than or equal to
622  * @NFT_CMP_GT: greater than
623  * @NFT_CMP_GTE: greater than or equal to
624  */
625 enum nft_cmp_ops {
626         NFT_CMP_EQ,
627         NFT_CMP_NEQ,
628         NFT_CMP_LT,
629         NFT_CMP_LTE,
630         NFT_CMP_GT,
631         NFT_CMP_GTE,
632 };
633
634 /**
635  * enum nft_cmp_attributes - nf_tables cmp expression netlink attributes
636  *
637  * @NFTA_CMP_SREG: source register of data to compare (NLA_U32: nft_registers)
638  * @NFTA_CMP_OP: cmp operation (NLA_U32: nft_cmp_ops)
639  * @NFTA_CMP_DATA: data to compare against (NLA_NESTED: nft_data_attributes)
640  */
641 enum nft_cmp_attributes {
642         NFTA_CMP_UNSPEC,
643         NFTA_CMP_SREG,
644         NFTA_CMP_OP,
645         NFTA_CMP_DATA,
646         __NFTA_CMP_MAX
647 };
648 #define NFTA_CMP_MAX            (__NFTA_CMP_MAX - 1)
649
650 /**
651  * enum nft_range_ops - nf_tables range operator
652  *
653  * @NFT_RANGE_EQ: equal
654  * @NFT_RANGE_NEQ: not equal
655  */
656 enum nft_range_ops {
657         NFT_RANGE_EQ,
658         NFT_RANGE_NEQ,
659 };
660
661 /**
662  * enum nft_range_attributes - nf_tables range expression netlink attributes
663  *
664  * @NFTA_RANGE_SREG: source register of data to compare (NLA_U32: nft_registers)
665  * @NFTA_RANGE_OP: cmp operation (NLA_U32: nft_cmp_ops)
666  * @NFTA_RANGE_FROM_DATA: data range from (NLA_NESTED: nft_data_attributes)
667  * @NFTA_RANGE_TO_DATA: data range to (NLA_NESTED: nft_data_attributes)
668  */
669 enum nft_range_attributes {
670         NFTA_RANGE_UNSPEC,
671         NFTA_RANGE_SREG,
672         NFTA_RANGE_OP,
673         NFTA_RANGE_FROM_DATA,
674         NFTA_RANGE_TO_DATA,
675         __NFTA_RANGE_MAX
676 };
677 #define NFTA_RANGE_MAX          (__NFTA_RANGE_MAX - 1)
678
679 enum nft_lookup_flags {
680         NFT_LOOKUP_F_INV = (1 << 0),
681 };
682
683 /**
684  * enum nft_lookup_attributes - nf_tables set lookup expression netlink attributes
685  *
686  * @NFTA_LOOKUP_SET: name of the set where to look for (NLA_STRING)
687  * @NFTA_LOOKUP_SREG: source register of the data to look for (NLA_U32: nft_registers)
688  * @NFTA_LOOKUP_DREG: destination register (NLA_U32: nft_registers)
689  * @NFTA_LOOKUP_SET_ID: uniquely identifies a set in a transaction (NLA_U32)
690  * @NFTA_LOOKUP_FLAGS: flags (NLA_U32: enum nft_lookup_flags)
691  */
692 enum nft_lookup_attributes {
693         NFTA_LOOKUP_UNSPEC,
694         NFTA_LOOKUP_SET,
695         NFTA_LOOKUP_SREG,
696         NFTA_LOOKUP_DREG,
697         NFTA_LOOKUP_SET_ID,
698         NFTA_LOOKUP_FLAGS,
699         __NFTA_LOOKUP_MAX
700 };
701 #define NFTA_LOOKUP_MAX         (__NFTA_LOOKUP_MAX - 1)
702
703 enum nft_dynset_ops {
704         NFT_DYNSET_OP_ADD,
705         NFT_DYNSET_OP_UPDATE,
706         NFT_DYNSET_OP_DELETE,
707 };
708
709 enum nft_dynset_flags {
710         NFT_DYNSET_F_INV        = (1 << 0),
711         NFT_DYNSET_F_EXPR       = (1 << 1),
712 };
713
714 /**
715  * enum nft_dynset_attributes - dynset expression attributes
716  *
717  * @NFTA_DYNSET_SET_NAME: name of set the to add data to (NLA_STRING)
718  * @NFTA_DYNSET_SET_ID: uniquely identifier of the set in the transaction (NLA_U32)
719  * @NFTA_DYNSET_OP: operation (NLA_U32)
720  * @NFTA_DYNSET_SREG_KEY: source register of the key (NLA_U32)
721  * @NFTA_DYNSET_SREG_DATA: source register of the data (NLA_U32)
722  * @NFTA_DYNSET_TIMEOUT: timeout value for the new element (NLA_U64)
723  * @NFTA_DYNSET_EXPR: expression (NLA_NESTED: nft_expr_attributes)
724  * @NFTA_DYNSET_FLAGS: flags (NLA_U32)
725  * @NFTA_DYNSET_EXPRESSIONS: list of expressions (NLA_NESTED: nft_list_attributes)
726  */
727 enum nft_dynset_attributes {
728         NFTA_DYNSET_UNSPEC,
729         NFTA_DYNSET_SET_NAME,
730         NFTA_DYNSET_SET_ID,
731         NFTA_DYNSET_OP,
732         NFTA_DYNSET_SREG_KEY,
733         NFTA_DYNSET_SREG_DATA,
734         NFTA_DYNSET_TIMEOUT,
735         NFTA_DYNSET_EXPR,
736         NFTA_DYNSET_PAD,
737         NFTA_DYNSET_FLAGS,
738         NFTA_DYNSET_EXPRESSIONS,
739         __NFTA_DYNSET_MAX,
740 };
741 #define NFTA_DYNSET_MAX         (__NFTA_DYNSET_MAX - 1)
742
743 /**
744  * enum nft_payload_bases - nf_tables payload expression offset bases
745  *
746  * @NFT_PAYLOAD_LL_HEADER: link layer header
747  * @NFT_PAYLOAD_NETWORK_HEADER: network header
748  * @NFT_PAYLOAD_TRANSPORT_HEADER: transport header
749  */
750 enum nft_payload_bases {
751         NFT_PAYLOAD_LL_HEADER,
752         NFT_PAYLOAD_NETWORK_HEADER,
753         NFT_PAYLOAD_TRANSPORT_HEADER,
754 };
755
756 /**
757  * enum nft_payload_csum_types - nf_tables payload expression checksum types
758  *
759  * @NFT_PAYLOAD_CSUM_NONE: no checksumming
760  * @NFT_PAYLOAD_CSUM_INET: internet checksum (RFC 791)
761  * @NFT_PAYLOAD_CSUM_SCTP: CRC-32c, for use in SCTP header (RFC 3309)
762  */
763 enum nft_payload_csum_types {
764         NFT_PAYLOAD_CSUM_NONE,
765         NFT_PAYLOAD_CSUM_INET,
766         NFT_PAYLOAD_CSUM_SCTP,
767 };
768
769 enum nft_payload_csum_flags {
770         NFT_PAYLOAD_L4CSUM_PSEUDOHDR = (1 << 0),
771 };
772
773 /**
774  * enum nft_payload_attributes - nf_tables payload expression netlink attributes
775  *
776  * @NFTA_PAYLOAD_DREG: destination register to load data into (NLA_U32: nft_registers)
777  * @NFTA_PAYLOAD_BASE: payload base (NLA_U32: nft_payload_bases)
778  * @NFTA_PAYLOAD_OFFSET: payload offset relative to base (NLA_U32)
779  * @NFTA_PAYLOAD_LEN: payload length (NLA_U32)
780  * @NFTA_PAYLOAD_SREG: source register to load data from (NLA_U32: nft_registers)
781  * @NFTA_PAYLOAD_CSUM_TYPE: checksum type (NLA_U32)
782  * @NFTA_PAYLOAD_CSUM_OFFSET: checksum offset relative to base (NLA_U32)
783  * @NFTA_PAYLOAD_CSUM_FLAGS: checksum flags (NLA_U32)
784  */
785 enum nft_payload_attributes {
786         NFTA_PAYLOAD_UNSPEC,
787         NFTA_PAYLOAD_DREG,
788         NFTA_PAYLOAD_BASE,
789         NFTA_PAYLOAD_OFFSET,
790         NFTA_PAYLOAD_LEN,
791         NFTA_PAYLOAD_SREG,
792         NFTA_PAYLOAD_CSUM_TYPE,
793         NFTA_PAYLOAD_CSUM_OFFSET,
794         NFTA_PAYLOAD_CSUM_FLAGS,
795         __NFTA_PAYLOAD_MAX
796 };
797 #define NFTA_PAYLOAD_MAX        (__NFTA_PAYLOAD_MAX - 1)
798
799 enum nft_exthdr_flags {
800         NFT_EXTHDR_F_PRESENT = (1 << 0),
801 };
802
803 /**
804  * enum nft_exthdr_op - nf_tables match options
805  *
806  * @NFT_EXTHDR_OP_IPV6: match against ipv6 extension headers
807  * @NFT_EXTHDR_OP_TCP: match against tcp options
808  * @NFT_EXTHDR_OP_IPV4: match against ipv4 options
809  */
810 enum nft_exthdr_op {
811         NFT_EXTHDR_OP_IPV6,
812         NFT_EXTHDR_OP_TCPOPT,
813         NFT_EXTHDR_OP_IPV4,
814         __NFT_EXTHDR_OP_MAX
815 };
816 #define NFT_EXTHDR_OP_MAX       (__NFT_EXTHDR_OP_MAX - 1)
817
818 /**
819  * enum nft_exthdr_attributes - nf_tables extension header expression netlink attributes
820  *
821  * @NFTA_EXTHDR_DREG: destination register (NLA_U32: nft_registers)
822  * @NFTA_EXTHDR_TYPE: extension header type (NLA_U8)
823  * @NFTA_EXTHDR_OFFSET: extension header offset (NLA_U32)
824  * @NFTA_EXTHDR_LEN: extension header length (NLA_U32)
825  * @NFTA_EXTHDR_FLAGS: extension header flags (NLA_U32)
826  * @NFTA_EXTHDR_OP: option match type (NLA_U32)
827  * @NFTA_EXTHDR_SREG: option match type (NLA_U32)
828  */
829 enum nft_exthdr_attributes {
830         NFTA_EXTHDR_UNSPEC,
831         NFTA_EXTHDR_DREG,
832         NFTA_EXTHDR_TYPE,
833         NFTA_EXTHDR_OFFSET,
834         NFTA_EXTHDR_LEN,
835         NFTA_EXTHDR_FLAGS,
836         NFTA_EXTHDR_OP,
837         NFTA_EXTHDR_SREG,
838         __NFTA_EXTHDR_MAX
839 };
840 #define NFTA_EXTHDR_MAX         (__NFTA_EXTHDR_MAX - 1)
841
842 /**
843  * enum nft_meta_keys - nf_tables meta expression keys
844  *
845  * @NFT_META_LEN: packet length (skb->len)
846  * @NFT_META_PROTOCOL: packet ethertype protocol (skb->protocol), invalid in OUTPUT
847  * @NFT_META_PRIORITY: packet priority (skb->priority)
848  * @NFT_META_MARK: packet mark (skb->mark)
849  * @NFT_META_IIF: packet input interface index (dev->ifindex)
850  * @NFT_META_OIF: packet output interface index (dev->ifindex)
851  * @NFT_META_IIFNAME: packet input interface name (dev->name)
852  * @NFT_META_OIFNAME: packet output interface name (dev->name)
853  * @NFT_META_IIFTYPE: packet input interface type (dev->type)
854  * @NFT_META_OIFTYPE: packet output interface type (dev->type)
855  * @NFT_META_SKUID: originating socket UID (fsuid)
856  * @NFT_META_SKGID: originating socket GID (fsgid)
857  * @NFT_META_NFTRACE: packet nftrace bit
858  * @NFT_META_RTCLASSID: realm value of packet's route (skb->dst->tclassid)
859  * @NFT_META_SECMARK: packet secmark (skb->secmark)
860  * @NFT_META_NFPROTO: netfilter protocol
861  * @NFT_META_L4PROTO: layer 4 protocol number
862  * @NFT_META_BRI_IIFNAME: packet input bridge interface name
863  * @NFT_META_BRI_OIFNAME: packet output bridge interface name
864  * @NFT_META_PKTTYPE: packet type (skb->pkt_type), special handling for loopback
865  * @NFT_META_CPU: cpu id through smp_processor_id()
866  * @NFT_META_IIFGROUP: packet input interface group
867  * @NFT_META_OIFGROUP: packet output interface group
868  * @NFT_META_CGROUP: socket control group (skb->sk->sk_classid)
869  * @NFT_META_PRANDOM: a 32bit pseudo-random number
870  * @NFT_META_SECPATH: boolean, secpath_exists (!!skb->sp)
871  * @NFT_META_IIFKIND: packet input interface kind name (dev->rtnl_link_ops->kind)
872  * @NFT_META_OIFKIND: packet output interface kind name (dev->rtnl_link_ops->kind)
873  * @NFT_META_BRI_IIFPVID: packet input bridge port pvid
874  * @NFT_META_BRI_IIFVPROTO: packet input bridge vlan proto
875  * @NFT_META_TIME_NS: time since epoch (in nanoseconds)
876  * @NFT_META_TIME_DAY: day of week (from 0 = Sunday to 6 = Saturday)
877  * @NFT_META_TIME_HOUR: hour of day (in seconds)
878  * @NFT_META_SDIF: slave device interface index
879  * @NFT_META_SDIFNAME: slave device interface name
880  */
881 enum nft_meta_keys {
882         NFT_META_LEN,
883         NFT_META_PROTOCOL,
884         NFT_META_PRIORITY,
885         NFT_META_MARK,
886         NFT_META_IIF,
887         NFT_META_OIF,
888         NFT_META_IIFNAME,
889         NFT_META_OIFNAME,
890         NFT_META_IIFTYPE,
891         NFT_META_OIFTYPE,
892         NFT_META_SKUID,
893         NFT_META_SKGID,
894         NFT_META_NFTRACE,
895         NFT_META_RTCLASSID,
896         NFT_META_SECMARK,
897         NFT_META_NFPROTO,
898         NFT_META_L4PROTO,
899         NFT_META_BRI_IIFNAME,
900         NFT_META_BRI_OIFNAME,
901         NFT_META_PKTTYPE,
902         NFT_META_CPU,
903         NFT_META_IIFGROUP,
904         NFT_META_OIFGROUP,
905         NFT_META_CGROUP,
906         NFT_META_PRANDOM,
907         NFT_META_SECPATH,
908         NFT_META_IIFKIND,
909         NFT_META_OIFKIND,
910         NFT_META_BRI_IIFPVID,
911         NFT_META_BRI_IIFVPROTO,
912         NFT_META_TIME_NS,
913         NFT_META_TIME_DAY,
914         NFT_META_TIME_HOUR,
915         NFT_META_SDIF,
916         NFT_META_SDIFNAME,
917 };
918
919 /**
920  * enum nft_rt_keys - nf_tables routing expression keys
921  *
922  * @NFT_RT_CLASSID: realm value of packet's route (skb->dst->tclassid)
923  * @NFT_RT_NEXTHOP4: routing nexthop for IPv4
924  * @NFT_RT_NEXTHOP6: routing nexthop for IPv6
925  * @NFT_RT_TCPMSS: fetch current path tcp mss
926  * @NFT_RT_XFRM: boolean, skb->dst->xfrm != NULL
927  */
928 enum nft_rt_keys {
929         NFT_RT_CLASSID,
930         NFT_RT_NEXTHOP4,
931         NFT_RT_NEXTHOP6,
932         NFT_RT_TCPMSS,
933         NFT_RT_XFRM,
934         __NFT_RT_MAX
935 };
936 #define NFT_RT_MAX              (__NFT_RT_MAX - 1)
937
938 /**
939  * enum nft_hash_types - nf_tables hash expression types
940  *
941  * @NFT_HASH_JENKINS: Jenkins Hash
942  * @NFT_HASH_SYM: Symmetric Hash
943  */
944 enum nft_hash_types {
945         NFT_HASH_JENKINS,
946         NFT_HASH_SYM,
947 };
948
949 /**
950  * enum nft_hash_attributes - nf_tables hash expression netlink attributes
951  *
952  * @NFTA_HASH_SREG: source register (NLA_U32)
953  * @NFTA_HASH_DREG: destination register (NLA_U32)
954  * @NFTA_HASH_LEN: source data length (NLA_U32)
955  * @NFTA_HASH_MODULUS: modulus value (NLA_U32)
956  * @NFTA_HASH_SEED: seed value (NLA_U32)
957  * @NFTA_HASH_OFFSET: add this offset value to hash result (NLA_U32)
958  * @NFTA_HASH_TYPE: hash operation (NLA_U32: nft_hash_types)
959  * @NFTA_HASH_SET_NAME: name of the map to lookup (NLA_STRING)
960  * @NFTA_HASH_SET_ID: id of the map (NLA_U32)
961  */
962 enum nft_hash_attributes {
963         NFTA_HASH_UNSPEC,
964         NFTA_HASH_SREG,
965         NFTA_HASH_DREG,
966         NFTA_HASH_LEN,
967         NFTA_HASH_MODULUS,
968         NFTA_HASH_SEED,
969         NFTA_HASH_OFFSET,
970         NFTA_HASH_TYPE,
971         NFTA_HASH_SET_NAME,     /* deprecated */
972         NFTA_HASH_SET_ID,       /* deprecated */
973         __NFTA_HASH_MAX,
974 };
975 #define NFTA_HASH_MAX   (__NFTA_HASH_MAX - 1)
976
977 /**
978  * enum nft_meta_attributes - nf_tables meta expression netlink attributes
979  *
980  * @NFTA_META_DREG: destination register (NLA_U32)
981  * @NFTA_META_KEY: meta data item to load (NLA_U32: nft_meta_keys)
982  * @NFTA_META_SREG: source register (NLA_U32)
983  */
984 enum nft_meta_attributes {
985         NFTA_META_UNSPEC,
986         NFTA_META_DREG,
987         NFTA_META_KEY,
988         NFTA_META_SREG,
989         __NFTA_META_MAX
990 };
991 #define NFTA_META_MAX           (__NFTA_META_MAX - 1)
992
993 /**
994  * enum nft_rt_attributes - nf_tables routing expression netlink attributes
995  *
996  * @NFTA_RT_DREG: destination register (NLA_U32)
997  * @NFTA_RT_KEY: routing data item to load (NLA_U32: nft_rt_keys)
998  */
999 enum nft_rt_attributes {
1000         NFTA_RT_UNSPEC,
1001         NFTA_RT_DREG,
1002         NFTA_RT_KEY,
1003         __NFTA_RT_MAX
1004 };
1005 #define NFTA_RT_MAX             (__NFTA_RT_MAX - 1)
1006
1007 /**
1008  * enum nft_socket_attributes - nf_tables socket expression netlink attributes
1009  *
1010  * @NFTA_SOCKET_KEY: socket key to match
1011  * @NFTA_SOCKET_DREG: destination register
1012  */
1013 enum nft_socket_attributes {
1014         NFTA_SOCKET_UNSPEC,
1015         NFTA_SOCKET_KEY,
1016         NFTA_SOCKET_DREG,
1017         __NFTA_SOCKET_MAX
1018 };
1019 #define NFTA_SOCKET_MAX         (__NFTA_SOCKET_MAX - 1)
1020
1021 /*
1022  * enum nft_socket_keys - nf_tables socket expression keys
1023  *
1024  * @NFT_SOCKET_TRANSPARENT: Value of the IP(V6)_TRANSPARENT socket option
1025  * @NFT_SOCKET_MARK: Value of the socket mark
1026  * @NFT_SOCKET_WILDCARD: Whether the socket is zero-bound (e.g. 0.0.0.0 or ::0)
1027  */
1028 enum nft_socket_keys {
1029         NFT_SOCKET_TRANSPARENT,
1030         NFT_SOCKET_MARK,
1031         NFT_SOCKET_WILDCARD,
1032         __NFT_SOCKET_MAX
1033 };
1034 #define NFT_SOCKET_MAX  (__NFT_SOCKET_MAX - 1)
1035
1036 /**
1037  * enum nft_ct_keys - nf_tables ct expression keys
1038  *
1039  * @NFT_CT_STATE: conntrack state (bitmask of enum ip_conntrack_info)
1040  * @NFT_CT_DIRECTION: conntrack direction (enum ip_conntrack_dir)
1041  * @NFT_CT_STATUS: conntrack status (bitmask of enum ip_conntrack_status)
1042  * @NFT_CT_MARK: conntrack mark value
1043  * @NFT_CT_SECMARK: conntrack secmark value
1044  * @NFT_CT_EXPIRATION: relative conntrack expiration time in ms
1045  * @NFT_CT_HELPER: connection tracking helper assigned to conntrack
1046  * @NFT_CT_L3PROTOCOL: conntrack layer 3 protocol
1047  * @NFT_CT_SRC: conntrack layer 3 protocol source (IPv4/IPv6 address, deprecated)
1048  * @NFT_CT_DST: conntrack layer 3 protocol destination (IPv4/IPv6 address, deprecated)
1049  * @NFT_CT_PROTOCOL: conntrack layer 4 protocol
1050  * @NFT_CT_PROTO_SRC: conntrack layer 4 protocol source
1051  * @NFT_CT_PROTO_DST: conntrack layer 4 protocol destination
1052  * @NFT_CT_LABELS: conntrack labels
1053  * @NFT_CT_PKTS: conntrack packets
1054  * @NFT_CT_BYTES: conntrack bytes
1055  * @NFT_CT_AVGPKT: conntrack average bytes per packet
1056  * @NFT_CT_ZONE: conntrack zone
1057  * @NFT_CT_EVENTMASK: ctnetlink events to be generated for this conntrack
1058  * @NFT_CT_SRC_IP: conntrack layer 3 protocol source (IPv4 address)
1059  * @NFT_CT_DST_IP: conntrack layer 3 protocol destination (IPv4 address)
1060  * @NFT_CT_SRC_IP6: conntrack layer 3 protocol source (IPv6 address)
1061  * @NFT_CT_DST_IP6: conntrack layer 3 protocol destination (IPv6 address)
1062  * @NFT_CT_ID: conntrack id
1063  */
1064 enum nft_ct_keys {
1065         NFT_CT_STATE,
1066         NFT_CT_DIRECTION,
1067         NFT_CT_STATUS,
1068         NFT_CT_MARK,
1069         NFT_CT_SECMARK,
1070         NFT_CT_EXPIRATION,
1071         NFT_CT_HELPER,
1072         NFT_CT_L3PROTOCOL,
1073         NFT_CT_SRC,
1074         NFT_CT_DST,
1075         NFT_CT_PROTOCOL,
1076         NFT_CT_PROTO_SRC,
1077         NFT_CT_PROTO_DST,
1078         NFT_CT_LABELS,
1079         NFT_CT_PKTS,
1080         NFT_CT_BYTES,
1081         NFT_CT_AVGPKT,
1082         NFT_CT_ZONE,
1083         NFT_CT_EVENTMASK,
1084         NFT_CT_SRC_IP,
1085         NFT_CT_DST_IP,
1086         NFT_CT_SRC_IP6,
1087         NFT_CT_DST_IP6,
1088         NFT_CT_ID,
1089         __NFT_CT_MAX
1090 };
1091 #define NFT_CT_MAX              (__NFT_CT_MAX - 1)
1092
1093 /**
1094  * enum nft_ct_attributes - nf_tables ct expression netlink attributes
1095  *
1096  * @NFTA_CT_DREG: destination register (NLA_U32)
1097  * @NFTA_CT_KEY: conntrack data item to load (NLA_U32: nft_ct_keys)
1098  * @NFTA_CT_DIRECTION: direction in case of directional keys (NLA_U8)
1099  * @NFTA_CT_SREG: source register (NLA_U32)
1100  */
1101 enum nft_ct_attributes {
1102         NFTA_CT_UNSPEC,
1103         NFTA_CT_DREG,
1104         NFTA_CT_KEY,
1105         NFTA_CT_DIRECTION,
1106         NFTA_CT_SREG,
1107         __NFTA_CT_MAX
1108 };
1109 #define NFTA_CT_MAX             (__NFTA_CT_MAX - 1)
1110
1111 /**
1112  * enum nft_flow_attributes - ct offload expression attributes
1113  * @NFTA_FLOW_TABLE_NAME: flow table name (NLA_STRING)
1114  */
1115 enum nft_offload_attributes {
1116         NFTA_FLOW_UNSPEC,
1117         NFTA_FLOW_TABLE_NAME,
1118         __NFTA_FLOW_MAX,
1119 };
1120 #define NFTA_FLOW_MAX           (__NFTA_FLOW_MAX - 1)
1121
1122 enum nft_limit_type {
1123         NFT_LIMIT_PKTS,
1124         NFT_LIMIT_PKT_BYTES
1125 };
1126
1127 enum nft_limit_flags {
1128         NFT_LIMIT_F_INV = (1 << 0),
1129 };
1130
1131 /**
1132  * enum nft_limit_attributes - nf_tables limit expression netlink attributes
1133  *
1134  * @NFTA_LIMIT_RATE: refill rate (NLA_U64)
1135  * @NFTA_LIMIT_UNIT: refill unit (NLA_U64)
1136  * @NFTA_LIMIT_BURST: burst (NLA_U32)
1137  * @NFTA_LIMIT_TYPE: type of limit (NLA_U32: enum nft_limit_type)
1138  * @NFTA_LIMIT_FLAGS: flags (NLA_U32: enum nft_limit_flags)
1139  */
1140 enum nft_limit_attributes {
1141         NFTA_LIMIT_UNSPEC,
1142         NFTA_LIMIT_RATE,
1143         NFTA_LIMIT_UNIT,
1144         NFTA_LIMIT_BURST,
1145         NFTA_LIMIT_TYPE,
1146         NFTA_LIMIT_FLAGS,
1147         NFTA_LIMIT_PAD,
1148         __NFTA_LIMIT_MAX
1149 };
1150 #define NFTA_LIMIT_MAX          (__NFTA_LIMIT_MAX - 1)
1151
1152 enum nft_connlimit_flags {
1153         NFT_CONNLIMIT_F_INV     = (1 << 0),
1154 };
1155
1156 /**
1157  * enum nft_connlimit_attributes - nf_tables connlimit expression netlink attributes
1158  *
1159  * @NFTA_CONNLIMIT_COUNT: number of connections (NLA_U32)
1160  * @NFTA_CONNLIMIT_FLAGS: flags (NLA_U32: enum nft_connlimit_flags)
1161  */
1162 enum nft_connlimit_attributes {
1163         NFTA_CONNLIMIT_UNSPEC,
1164         NFTA_CONNLIMIT_COUNT,
1165         NFTA_CONNLIMIT_FLAGS,
1166         __NFTA_CONNLIMIT_MAX
1167 };
1168 #define NFTA_CONNLIMIT_MAX      (__NFTA_CONNLIMIT_MAX - 1)
1169
1170 /**
1171  * enum nft_counter_attributes - nf_tables counter expression netlink attributes
1172  *
1173  * @NFTA_COUNTER_BYTES: number of bytes (NLA_U64)
1174  * @NFTA_COUNTER_PACKETS: number of packets (NLA_U64)
1175  */
1176 enum nft_counter_attributes {
1177         NFTA_COUNTER_UNSPEC,
1178         NFTA_COUNTER_BYTES,
1179         NFTA_COUNTER_PACKETS,
1180         NFTA_COUNTER_PAD,
1181         __NFTA_COUNTER_MAX
1182 };
1183 #define NFTA_COUNTER_MAX        (__NFTA_COUNTER_MAX - 1)
1184
1185 /**
1186  * enum nft_log_attributes - nf_tables log expression netlink attributes
1187  *
1188  * @NFTA_LOG_GROUP: netlink group to send messages to (NLA_U32)
1189  * @NFTA_LOG_PREFIX: prefix to prepend to log messages (NLA_STRING)
1190  * @NFTA_LOG_SNAPLEN: length of payload to include in netlink message (NLA_U32)
1191  * @NFTA_LOG_QTHRESHOLD: queue threshold (NLA_U32)
1192  * @NFTA_LOG_LEVEL: log level (NLA_U32)
1193  * @NFTA_LOG_FLAGS: logging flags (NLA_U32)
1194  */
1195 enum nft_log_attributes {
1196         NFTA_LOG_UNSPEC,
1197         NFTA_LOG_GROUP,
1198         NFTA_LOG_PREFIX,
1199         NFTA_LOG_SNAPLEN,
1200         NFTA_LOG_QTHRESHOLD,
1201         NFTA_LOG_LEVEL,
1202         NFTA_LOG_FLAGS,
1203         __NFTA_LOG_MAX
1204 };
1205 #define NFTA_LOG_MAX            (__NFTA_LOG_MAX - 1)
1206
1207 /**
1208  * enum nft_log_level - nf_tables log levels
1209  *
1210  * @NFT_LOGLEVEL_EMERG: system is unusable
1211  * @NFT_LOGLEVEL_ALERT: action must be taken immediately
1212  * @NFT_LOGLEVEL_CRIT: critical conditions
1213  * @NFT_LOGLEVEL_ERR: error conditions
1214  * @NFT_LOGLEVEL_WARNING: warning conditions
1215  * @NFT_LOGLEVEL_NOTICE: normal but significant condition
1216  * @NFT_LOGLEVEL_INFO: informational
1217  * @NFT_LOGLEVEL_DEBUG: debug-level messages
1218  * @NFT_LOGLEVEL_AUDIT: enabling audit logging
1219  */
1220 enum nft_log_level {
1221         NFT_LOGLEVEL_EMERG,
1222         NFT_LOGLEVEL_ALERT,
1223         NFT_LOGLEVEL_CRIT,
1224         NFT_LOGLEVEL_ERR,
1225         NFT_LOGLEVEL_WARNING,
1226         NFT_LOGLEVEL_NOTICE,
1227         NFT_LOGLEVEL_INFO,
1228         NFT_LOGLEVEL_DEBUG,
1229         NFT_LOGLEVEL_AUDIT,
1230         __NFT_LOGLEVEL_MAX
1231 };
1232 #define NFT_LOGLEVEL_MAX        (__NFT_LOGLEVEL_MAX - 1)
1233
1234 /**
1235  * enum nft_queue_attributes - nf_tables queue expression netlink attributes
1236  *
1237  * @NFTA_QUEUE_NUM: netlink queue to send messages to (NLA_U16)
1238  * @NFTA_QUEUE_TOTAL: number of queues to load balance packets on (NLA_U16)
1239  * @NFTA_QUEUE_FLAGS: various flags (NLA_U16)
1240  * @NFTA_QUEUE_SREG_QNUM: source register of queue number (NLA_U32: nft_registers)
1241  */
1242 enum nft_queue_attributes {
1243         NFTA_QUEUE_UNSPEC,
1244         NFTA_QUEUE_NUM,
1245         NFTA_QUEUE_TOTAL,
1246         NFTA_QUEUE_FLAGS,
1247         NFTA_QUEUE_SREG_QNUM,
1248         __NFTA_QUEUE_MAX
1249 };
1250 #define NFTA_QUEUE_MAX          (__NFTA_QUEUE_MAX - 1)
1251
1252 #define NFT_QUEUE_FLAG_BYPASS           0x01 /* for compatibility with v2 */
1253 #define NFT_QUEUE_FLAG_CPU_FANOUT       0x02 /* use current CPU (no hashing) */
1254 #define NFT_QUEUE_FLAG_MASK             0x03
1255
1256 enum nft_quota_flags {
1257         NFT_QUOTA_F_INV         = (1 << 0),
1258         NFT_QUOTA_F_DEPLETED    = (1 << 1),
1259 };
1260
1261 /**
1262  * enum nft_quota_attributes - nf_tables quota expression netlink attributes
1263  *
1264  * @NFTA_QUOTA_BYTES: quota in bytes (NLA_U16)
1265  * @NFTA_QUOTA_FLAGS: flags (NLA_U32)
1266  * @NFTA_QUOTA_CONSUMED: quota already consumed in bytes (NLA_U64)
1267  */
1268 enum nft_quota_attributes {
1269         NFTA_QUOTA_UNSPEC,
1270         NFTA_QUOTA_BYTES,
1271         NFTA_QUOTA_FLAGS,
1272         NFTA_QUOTA_PAD,
1273         NFTA_QUOTA_CONSUMED,
1274         __NFTA_QUOTA_MAX
1275 };
1276 #define NFTA_QUOTA_MAX          (__NFTA_QUOTA_MAX - 1)
1277
1278 /**
1279  * enum nft_secmark_attributes - nf_tables secmark object netlink attributes
1280  *
1281  * @NFTA_SECMARK_CTX: security context (NLA_STRING)
1282  */
1283 enum nft_secmark_attributes {
1284         NFTA_SECMARK_UNSPEC,
1285         NFTA_SECMARK_CTX,
1286         __NFTA_SECMARK_MAX,
1287 };
1288 #define NFTA_SECMARK_MAX        (__NFTA_SECMARK_MAX - 1)
1289
1290 /* Max security context length */
1291 #define NFT_SECMARK_CTX_MAXLEN          256
1292
1293 /**
1294  * enum nft_reject_types - nf_tables reject expression reject types
1295  *
1296  * @NFT_REJECT_ICMP_UNREACH: reject using ICMP unreachable
1297  * @NFT_REJECT_TCP_RST: reject using TCP RST
1298  * @NFT_REJECT_ICMPX_UNREACH: abstracted ICMP unreachable for bridge and inet
1299  */
1300 enum nft_reject_types {
1301         NFT_REJECT_ICMP_UNREACH,
1302         NFT_REJECT_TCP_RST,
1303         NFT_REJECT_ICMPX_UNREACH,
1304 };
1305
1306 /**
1307  * enum nft_reject_code - Generic reject codes for IPv4/IPv6
1308  *
1309  * @NFT_REJECT_ICMPX_NO_ROUTE: no route to host / network unreachable
1310  * @NFT_REJECT_ICMPX_PORT_UNREACH: port unreachable
1311  * @NFT_REJECT_ICMPX_HOST_UNREACH: host unreachable
1312  * @NFT_REJECT_ICMPX_ADMIN_PROHIBITED: administratively prohibited
1313  *
1314  * These codes are mapped to real ICMP and ICMPv6 codes.
1315  */
1316 enum nft_reject_inet_code {
1317         NFT_REJECT_ICMPX_NO_ROUTE       = 0,
1318         NFT_REJECT_ICMPX_PORT_UNREACH,
1319         NFT_REJECT_ICMPX_HOST_UNREACH,
1320         NFT_REJECT_ICMPX_ADMIN_PROHIBITED,
1321         __NFT_REJECT_ICMPX_MAX
1322 };
1323 #define NFT_REJECT_ICMPX_MAX    (__NFT_REJECT_ICMPX_MAX - 1)
1324
1325 /**
1326  * enum nft_reject_attributes - nf_tables reject expression netlink attributes
1327  *
1328  * @NFTA_REJECT_TYPE: packet type to use (NLA_U32: nft_reject_types)
1329  * @NFTA_REJECT_ICMP_CODE: ICMP code to use (NLA_U8)
1330  */
1331 enum nft_reject_attributes {
1332         NFTA_REJECT_UNSPEC,
1333         NFTA_REJECT_TYPE,
1334         NFTA_REJECT_ICMP_CODE,
1335         __NFTA_REJECT_MAX
1336 };
1337 #define NFTA_REJECT_MAX         (__NFTA_REJECT_MAX - 1)
1338
1339 /**
1340  * enum nft_nat_types - nf_tables nat expression NAT types
1341  *
1342  * @NFT_NAT_SNAT: source NAT
1343  * @NFT_NAT_DNAT: destination NAT
1344  */
1345 enum nft_nat_types {
1346         NFT_NAT_SNAT,
1347         NFT_NAT_DNAT,
1348 };
1349
1350 /**
1351  * enum nft_nat_attributes - nf_tables nat expression netlink attributes
1352  *
1353  * @NFTA_NAT_TYPE: NAT type (NLA_U32: nft_nat_types)
1354  * @NFTA_NAT_FAMILY: NAT family (NLA_U32)
1355  * @NFTA_NAT_REG_ADDR_MIN: source register of address range start (NLA_U32: nft_registers)
1356  * @NFTA_NAT_REG_ADDR_MAX: source register of address range end (NLA_U32: nft_registers)
1357  * @NFTA_NAT_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
1358  * @NFTA_NAT_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
1359  * @NFTA_NAT_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
1360  */
1361 enum nft_nat_attributes {
1362         NFTA_NAT_UNSPEC,
1363         NFTA_NAT_TYPE,
1364         NFTA_NAT_FAMILY,
1365         NFTA_NAT_REG_ADDR_MIN,
1366         NFTA_NAT_REG_ADDR_MAX,
1367         NFTA_NAT_REG_PROTO_MIN,
1368         NFTA_NAT_REG_PROTO_MAX,
1369         NFTA_NAT_FLAGS,
1370         __NFTA_NAT_MAX
1371 };
1372 #define NFTA_NAT_MAX            (__NFTA_NAT_MAX - 1)
1373
1374 /**
1375  * enum nft_tproxy_attributes - nf_tables tproxy expression netlink attributes
1376  *
1377  * NFTA_TPROXY_FAMILY: Target address family (NLA_U32: nft_registers)
1378  * NFTA_TPROXY_REG_ADDR: Target address register (NLA_U32: nft_registers)
1379  * NFTA_TPROXY_REG_PORT: Target port register (NLA_U32: nft_registers)
1380  */
1381 enum nft_tproxy_attributes {
1382         NFTA_TPROXY_UNSPEC,
1383         NFTA_TPROXY_FAMILY,
1384         NFTA_TPROXY_REG_ADDR,
1385         NFTA_TPROXY_REG_PORT,
1386         __NFTA_TPROXY_MAX
1387 };
1388 #define NFTA_TPROXY_MAX         (__NFTA_TPROXY_MAX - 1)
1389
1390 /**
1391  * enum nft_masq_attributes - nf_tables masquerade expression attributes
1392  *
1393  * @NFTA_MASQ_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
1394  * @NFTA_MASQ_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
1395  * @NFTA_MASQ_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
1396  */
1397 enum nft_masq_attributes {
1398         NFTA_MASQ_UNSPEC,
1399         NFTA_MASQ_FLAGS,
1400         NFTA_MASQ_REG_PROTO_MIN,
1401         NFTA_MASQ_REG_PROTO_MAX,
1402         __NFTA_MASQ_MAX
1403 };
1404 #define NFTA_MASQ_MAX           (__NFTA_MASQ_MAX - 1)
1405
1406 /**
1407  * enum nft_redir_attributes - nf_tables redirect expression netlink attributes
1408  *
1409  * @NFTA_REDIR_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
1410  * @NFTA_REDIR_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
1411  * @NFTA_REDIR_FLAGS: NAT flags (see NF_NAT_RANGE_* in linux/netfilter/nf_nat.h) (NLA_U32)
1412  */
1413 enum nft_redir_attributes {
1414         NFTA_REDIR_UNSPEC,
1415         NFTA_REDIR_REG_PROTO_MIN,
1416         NFTA_REDIR_REG_PROTO_MAX,
1417         NFTA_REDIR_FLAGS,
1418         __NFTA_REDIR_MAX
1419 };
1420 #define NFTA_REDIR_MAX          (__NFTA_REDIR_MAX - 1)
1421
1422 /**
1423  * enum nft_dup_attributes - nf_tables dup expression netlink attributes
1424  *
1425  * @NFTA_DUP_SREG_ADDR: source register of address (NLA_U32: nft_registers)
1426  * @NFTA_DUP_SREG_DEV: source register of output interface (NLA_U32: nft_register)
1427  */
1428 enum nft_dup_attributes {
1429         NFTA_DUP_UNSPEC,
1430         NFTA_DUP_SREG_ADDR,
1431         NFTA_DUP_SREG_DEV,
1432         __NFTA_DUP_MAX
1433 };
1434 #define NFTA_DUP_MAX            (__NFTA_DUP_MAX - 1)
1435
1436 /**
1437  * enum nft_fwd_attributes - nf_tables fwd expression netlink attributes
1438  *
1439  * @NFTA_FWD_SREG_DEV: source register of output interface (NLA_U32: nft_register)
1440  * @NFTA_FWD_SREG_ADDR: source register of destination address (NLA_U32: nft_register)
1441  * @NFTA_FWD_NFPROTO: layer 3 family of source register address (NLA_U32: enum nfproto)
1442  */
1443 enum nft_fwd_attributes {
1444         NFTA_FWD_UNSPEC,
1445         NFTA_FWD_SREG_DEV,
1446         NFTA_FWD_SREG_ADDR,
1447         NFTA_FWD_NFPROTO,
1448         __NFTA_FWD_MAX
1449 };
1450 #define NFTA_FWD_MAX    (__NFTA_FWD_MAX - 1)
1451
1452 /**
1453  * enum nft_objref_attributes - nf_tables stateful object expression netlink attributes
1454  *
1455  * @NFTA_OBJREF_IMM_TYPE: object type for immediate reference (NLA_U32: nft_register)
1456  * @NFTA_OBJREF_IMM_NAME: object name for immediate reference (NLA_STRING)
1457  * @NFTA_OBJREF_SET_SREG: source register of the data to look for (NLA_U32: nft_registers)
1458  * @NFTA_OBJREF_SET_NAME: name of the set where to look for (NLA_STRING)
1459  * @NFTA_OBJREF_SET_ID: id of the set where to look for in this transaction (NLA_U32)
1460  */
1461 enum nft_objref_attributes {
1462         NFTA_OBJREF_UNSPEC,
1463         NFTA_OBJREF_IMM_TYPE,
1464         NFTA_OBJREF_IMM_NAME,
1465         NFTA_OBJREF_SET_SREG,
1466         NFTA_OBJREF_SET_NAME,
1467         NFTA_OBJREF_SET_ID,
1468         __NFTA_OBJREF_MAX
1469 };
1470 #define NFTA_OBJREF_MAX (__NFTA_OBJREF_MAX - 1)
1471
1472 /**
1473  * enum nft_gen_attributes - nf_tables ruleset generation attributes
1474  *
1475  * @NFTA_GEN_ID: Ruleset generation ID (NLA_U32)
1476  */
1477 enum nft_gen_attributes {
1478         NFTA_GEN_UNSPEC,
1479         NFTA_GEN_ID,
1480         NFTA_GEN_PROC_PID,
1481         NFTA_GEN_PROC_NAME,
1482         __NFTA_GEN_MAX
1483 };
1484 #define NFTA_GEN_MAX            (__NFTA_GEN_MAX - 1)
1485
1486 /*
1487  * enum nft_fib_attributes - nf_tables fib expression netlink attributes
1488  *
1489  * @NFTA_FIB_DREG: destination register (NLA_U32)
1490  * @NFTA_FIB_RESULT: desired result (NLA_U32)
1491  * @NFTA_FIB_FLAGS: flowi fields to initialize when querying the FIB (NLA_U32)
1492  *
1493  * The FIB expression performs a route lookup according
1494  * to the packet data.
1495  */
1496 enum nft_fib_attributes {
1497         NFTA_FIB_UNSPEC,
1498         NFTA_FIB_DREG,
1499         NFTA_FIB_RESULT,
1500         NFTA_FIB_FLAGS,
1501         __NFTA_FIB_MAX
1502 };
1503 #define NFTA_FIB_MAX (__NFTA_FIB_MAX - 1)
1504
1505 enum nft_fib_result {
1506         NFT_FIB_RESULT_UNSPEC,
1507         NFT_FIB_RESULT_OIF,
1508         NFT_FIB_RESULT_OIFNAME,
1509         NFT_FIB_RESULT_ADDRTYPE,
1510         __NFT_FIB_RESULT_MAX
1511 };
1512 #define NFT_FIB_RESULT_MAX      (__NFT_FIB_RESULT_MAX - 1)
1513
1514 enum nft_fib_flags {
1515         NFTA_FIB_F_SADDR        = 1 << 0,       /* look up src */
1516         NFTA_FIB_F_DADDR        = 1 << 1,       /* look up dst */
1517         NFTA_FIB_F_MARK         = 1 << 2,       /* use skb->mark */
1518         NFTA_FIB_F_IIF          = 1 << 3,       /* restrict to iif */
1519         NFTA_FIB_F_OIF          = 1 << 4,       /* restrict to oif */
1520         NFTA_FIB_F_PRESENT      = 1 << 5,       /* check existence only */
1521 };
1522
1523 enum nft_ct_helper_attributes {
1524         NFTA_CT_HELPER_UNSPEC,
1525         NFTA_CT_HELPER_NAME,
1526         NFTA_CT_HELPER_L3PROTO,
1527         NFTA_CT_HELPER_L4PROTO,
1528         __NFTA_CT_HELPER_MAX,
1529 };
1530 #define NFTA_CT_HELPER_MAX      (__NFTA_CT_HELPER_MAX - 1)
1531
1532 enum nft_ct_timeout_timeout_attributes {
1533         NFTA_CT_TIMEOUT_UNSPEC,
1534         NFTA_CT_TIMEOUT_L3PROTO,
1535         NFTA_CT_TIMEOUT_L4PROTO,
1536         NFTA_CT_TIMEOUT_DATA,
1537         __NFTA_CT_TIMEOUT_MAX,
1538 };
1539 #define NFTA_CT_TIMEOUT_MAX     (__NFTA_CT_TIMEOUT_MAX - 1)
1540
1541 enum nft_ct_expectation_attributes {
1542         NFTA_CT_EXPECT_UNSPEC,
1543         NFTA_CT_EXPECT_L3PROTO,
1544         NFTA_CT_EXPECT_L4PROTO,
1545         NFTA_CT_EXPECT_DPORT,
1546         NFTA_CT_EXPECT_TIMEOUT,
1547         NFTA_CT_EXPECT_SIZE,
1548         __NFTA_CT_EXPECT_MAX,
1549 };
1550 #define NFTA_CT_EXPECT_MAX      (__NFTA_CT_EXPECT_MAX - 1)
1551
1552 #define NFT_OBJECT_UNSPEC       0
1553 #define NFT_OBJECT_COUNTER      1
1554 #define NFT_OBJECT_QUOTA        2
1555 #define NFT_OBJECT_CT_HELPER    3
1556 #define NFT_OBJECT_LIMIT        4
1557 #define NFT_OBJECT_CONNLIMIT    5
1558 #define NFT_OBJECT_TUNNEL       6
1559 #define NFT_OBJECT_CT_TIMEOUT   7
1560 #define NFT_OBJECT_SECMARK      8
1561 #define NFT_OBJECT_CT_EXPECT    9
1562 #define NFT_OBJECT_SYNPROXY     10
1563 #define __NFT_OBJECT_MAX        11
1564 #define NFT_OBJECT_MAX          (__NFT_OBJECT_MAX - 1)
1565
1566 /**
1567  * enum nft_object_attributes - nf_tables stateful object netlink attributes
1568  *
1569  * @NFTA_OBJ_TABLE: name of the table containing the expression (NLA_STRING)
1570  * @NFTA_OBJ_NAME: name of this expression type (NLA_STRING)
1571  * @NFTA_OBJ_TYPE: stateful object type (NLA_U32)
1572  * @NFTA_OBJ_DATA: stateful object data (NLA_NESTED)
1573  * @NFTA_OBJ_USE: number of references to this expression (NLA_U32)
1574  * @NFTA_OBJ_HANDLE: object handle (NLA_U64)
1575  * @NFTA_OBJ_USERDATA: user data (NLA_BINARY)
1576  */
1577 enum nft_object_attributes {
1578         NFTA_OBJ_UNSPEC,
1579         NFTA_OBJ_TABLE,
1580         NFTA_OBJ_NAME,
1581         NFTA_OBJ_TYPE,
1582         NFTA_OBJ_DATA,
1583         NFTA_OBJ_USE,
1584         NFTA_OBJ_HANDLE,
1585         NFTA_OBJ_PAD,
1586         NFTA_OBJ_USERDATA,
1587         __NFTA_OBJ_MAX
1588 };
1589 #define NFTA_OBJ_MAX            (__NFTA_OBJ_MAX - 1)
1590
1591 /**
1592  * enum nft_flowtable_flags - nf_tables flowtable flags
1593  *
1594  * @NFT_FLOWTABLE_HW_OFFLOAD: flowtable hardware offload is enabled
1595  * @NFT_FLOWTABLE_COUNTER: enable flow counters
1596  */
1597 enum nft_flowtable_flags {
1598         NFT_FLOWTABLE_HW_OFFLOAD        = 0x1,
1599         NFT_FLOWTABLE_COUNTER           = 0x2,
1600         NFT_FLOWTABLE_MASK              = (NFT_FLOWTABLE_HW_OFFLOAD |
1601                                            NFT_FLOWTABLE_COUNTER)
1602 };
1603
1604 /**
1605  * enum nft_flowtable_attributes - nf_tables flow table netlink attributes
1606  *
1607  * @NFTA_FLOWTABLE_TABLE: name of the table containing the expression (NLA_STRING)
1608  * @NFTA_FLOWTABLE_NAME: name of this flow table (NLA_STRING)
1609  * @NFTA_FLOWTABLE_HOOK: netfilter hook configuration(NLA_U32)
1610  * @NFTA_FLOWTABLE_USE: number of references to this flow table (NLA_U32)
1611  * @NFTA_FLOWTABLE_HANDLE: object handle (NLA_U64)
1612  * @NFTA_FLOWTABLE_FLAGS: flags (NLA_U32)
1613  */
1614 enum nft_flowtable_attributes {
1615         NFTA_FLOWTABLE_UNSPEC,
1616         NFTA_FLOWTABLE_TABLE,
1617         NFTA_FLOWTABLE_NAME,
1618         NFTA_FLOWTABLE_HOOK,
1619         NFTA_FLOWTABLE_USE,
1620         NFTA_FLOWTABLE_HANDLE,
1621         NFTA_FLOWTABLE_PAD,
1622         NFTA_FLOWTABLE_FLAGS,
1623         __NFTA_FLOWTABLE_MAX
1624 };
1625 #define NFTA_FLOWTABLE_MAX      (__NFTA_FLOWTABLE_MAX - 1)
1626
1627 /**
1628  * enum nft_flowtable_hook_attributes - nf_tables flow table hook netlink attributes
1629  *
1630  * @NFTA_FLOWTABLE_HOOK_NUM: netfilter hook number (NLA_U32)
1631  * @NFTA_FLOWTABLE_HOOK_PRIORITY: netfilter hook priority (NLA_U32)
1632  * @NFTA_FLOWTABLE_HOOK_DEVS: input devices this flow table is bound to (NLA_NESTED)
1633  */
1634 enum nft_flowtable_hook_attributes {
1635         NFTA_FLOWTABLE_HOOK_UNSPEC,
1636         NFTA_FLOWTABLE_HOOK_NUM,
1637         NFTA_FLOWTABLE_HOOK_PRIORITY,
1638         NFTA_FLOWTABLE_HOOK_DEVS,
1639         __NFTA_FLOWTABLE_HOOK_MAX
1640 };
1641 #define NFTA_FLOWTABLE_HOOK_MAX (__NFTA_FLOWTABLE_HOOK_MAX - 1)
1642
1643 /**
1644  * enum nft_osf_attributes - nftables osf expression netlink attributes
1645  *
1646  * @NFTA_OSF_DREG: destination register (NLA_U32: nft_registers)
1647  * @NFTA_OSF_TTL: Value of the TTL osf option (NLA_U8)
1648  * @NFTA_OSF_FLAGS: flags (NLA_U32)
1649  */
1650 enum nft_osf_attributes {
1651         NFTA_OSF_UNSPEC,
1652         NFTA_OSF_DREG,
1653         NFTA_OSF_TTL,
1654         NFTA_OSF_FLAGS,
1655         __NFTA_OSF_MAX,
1656 };
1657 #define NFTA_OSF_MAX (__NFTA_OSF_MAX - 1)
1658
1659 enum nft_osf_flags {
1660         NFT_OSF_F_VERSION = (1 << 0),
1661 };
1662
1663 /**
1664  * enum nft_synproxy_attributes - nf_tables synproxy expression netlink attributes
1665  *
1666  * @NFTA_SYNPROXY_MSS: mss value sent to the backend (NLA_U16)
1667  * @NFTA_SYNPROXY_WSCALE: wscale value sent to the backend (NLA_U8)
1668  * @NFTA_SYNPROXY_FLAGS: flags (NLA_U32)
1669  */
1670 enum nft_synproxy_attributes {
1671         NFTA_SYNPROXY_UNSPEC,
1672         NFTA_SYNPROXY_MSS,
1673         NFTA_SYNPROXY_WSCALE,
1674         NFTA_SYNPROXY_FLAGS,
1675         __NFTA_SYNPROXY_MAX,
1676 };
1677 #define NFTA_SYNPROXY_MAX (__NFTA_SYNPROXY_MAX - 1)
1678
1679 /**
1680  * enum nft_device_attributes - nf_tables device netlink attributes
1681  *
1682  * @NFTA_DEVICE_NAME: name of this device (NLA_STRING)
1683  */
1684 enum nft_devices_attributes {
1685         NFTA_DEVICE_UNSPEC,
1686         NFTA_DEVICE_NAME,
1687         __NFTA_DEVICE_MAX
1688 };
1689 #define NFTA_DEVICE_MAX         (__NFTA_DEVICE_MAX - 1)
1690
1691 /*
1692  * enum nft_xfrm_attributes - nf_tables xfrm expr netlink attributes
1693  *
1694  * @NFTA_XFRM_DREG: destination register (NLA_U32)
1695  * @NFTA_XFRM_KEY: enum nft_xfrm_keys (NLA_U32)
1696  * @NFTA_XFRM_DIR: direction (NLA_U8)
1697  * @NFTA_XFRM_SPNUM: index in secpath array (NLA_U32)
1698  */
1699 enum nft_xfrm_attributes {
1700         NFTA_XFRM_UNSPEC,
1701         NFTA_XFRM_DREG,
1702         NFTA_XFRM_KEY,
1703         NFTA_XFRM_DIR,
1704         NFTA_XFRM_SPNUM,
1705         __NFTA_XFRM_MAX
1706 };
1707 #define NFTA_XFRM_MAX (__NFTA_XFRM_MAX - 1)
1708
1709 enum nft_xfrm_keys {
1710         NFT_XFRM_KEY_UNSPEC,
1711         NFT_XFRM_KEY_DADDR_IP4,
1712         NFT_XFRM_KEY_DADDR_IP6,
1713         NFT_XFRM_KEY_SADDR_IP4,
1714         NFT_XFRM_KEY_SADDR_IP6,
1715         NFT_XFRM_KEY_REQID,
1716         NFT_XFRM_KEY_SPI,
1717         __NFT_XFRM_KEY_MAX,
1718 };
1719 #define NFT_XFRM_KEY_MAX (__NFT_XFRM_KEY_MAX - 1)
1720
1721 /**
1722  * enum nft_trace_attributes - nf_tables trace netlink attributes
1723  *
1724  * @NFTA_TRACE_TABLE: name of the table (NLA_STRING)
1725  * @NFTA_TRACE_CHAIN: name of the chain (NLA_STRING)
1726  * @NFTA_TRACE_RULE_HANDLE: numeric handle of the rule (NLA_U64)
1727  * @NFTA_TRACE_TYPE: type of the event (NLA_U32: nft_trace_types)
1728  * @NFTA_TRACE_VERDICT: verdict returned by hook (NLA_NESTED: nft_verdicts)
1729  * @NFTA_TRACE_ID: pseudo-id, same for each skb traced (NLA_U32)
1730  * @NFTA_TRACE_LL_HEADER: linklayer header (NLA_BINARY)
1731  * @NFTA_TRACE_NETWORK_HEADER: network header (NLA_BINARY)
1732  * @NFTA_TRACE_TRANSPORT_HEADER: transport header (NLA_BINARY)
1733  * @NFTA_TRACE_IIF: indev ifindex (NLA_U32)
1734  * @NFTA_TRACE_IIFTYPE: netdev->type of indev (NLA_U16)
1735  * @NFTA_TRACE_OIF: outdev ifindex (NLA_U32)
1736  * @NFTA_TRACE_OIFTYPE: netdev->type of outdev (NLA_U16)
1737  * @NFTA_TRACE_MARK: nfmark (NLA_U32)
1738  * @NFTA_TRACE_NFPROTO: nf protocol processed (NLA_U32)
1739  * @NFTA_TRACE_POLICY: policy that decided fate of packet (NLA_U32)
1740  */
1741 enum nft_trace_attributes {
1742         NFTA_TRACE_UNSPEC,
1743         NFTA_TRACE_TABLE,
1744         NFTA_TRACE_CHAIN,
1745         NFTA_TRACE_RULE_HANDLE,
1746         NFTA_TRACE_TYPE,
1747         NFTA_TRACE_VERDICT,
1748         NFTA_TRACE_ID,
1749         NFTA_TRACE_LL_HEADER,
1750         NFTA_TRACE_NETWORK_HEADER,
1751         NFTA_TRACE_TRANSPORT_HEADER,
1752         NFTA_TRACE_IIF,
1753         NFTA_TRACE_IIFTYPE,
1754         NFTA_TRACE_OIF,
1755         NFTA_TRACE_OIFTYPE,
1756         NFTA_TRACE_MARK,
1757         NFTA_TRACE_NFPROTO,
1758         NFTA_TRACE_POLICY,
1759         NFTA_TRACE_PAD,
1760         __NFTA_TRACE_MAX
1761 };
1762 #define NFTA_TRACE_MAX (__NFTA_TRACE_MAX - 1)
1763
1764 enum nft_trace_types {
1765         NFT_TRACETYPE_UNSPEC,
1766         NFT_TRACETYPE_POLICY,
1767         NFT_TRACETYPE_RETURN,
1768         NFT_TRACETYPE_RULE,
1769         __NFT_TRACETYPE_MAX
1770 };
1771 #define NFT_TRACETYPE_MAX (__NFT_TRACETYPE_MAX - 1)
1772
1773 /**
1774  * enum nft_ng_attributes - nf_tables number generator expression netlink attributes
1775  *
1776  * @NFTA_NG_DREG: destination register (NLA_U32)
1777  * @NFTA_NG_MODULUS: maximum counter value (NLA_U32)
1778  * @NFTA_NG_TYPE: operation type (NLA_U32)
1779  * @NFTA_NG_OFFSET: offset to be added to the counter (NLA_U32)
1780  * @NFTA_NG_SET_NAME: name of the map to lookup (NLA_STRING)
1781  * @NFTA_NG_SET_ID: id of the map (NLA_U32)
1782  */
1783 enum nft_ng_attributes {
1784         NFTA_NG_UNSPEC,
1785         NFTA_NG_DREG,
1786         NFTA_NG_MODULUS,
1787         NFTA_NG_TYPE,
1788         NFTA_NG_OFFSET,
1789         NFTA_NG_SET_NAME,       /* deprecated */
1790         NFTA_NG_SET_ID,         /* deprecated */
1791         __NFTA_NG_MAX
1792 };
1793 #define NFTA_NG_MAX     (__NFTA_NG_MAX - 1)
1794
1795 enum nft_ng_types {
1796         NFT_NG_INCREMENTAL,
1797         NFT_NG_RANDOM,
1798         __NFT_NG_MAX
1799 };
1800 #define NFT_NG_MAX      (__NFT_NG_MAX - 1)
1801
1802 enum nft_tunnel_key_ip_attributes {
1803         NFTA_TUNNEL_KEY_IP_UNSPEC,
1804         NFTA_TUNNEL_KEY_IP_SRC,
1805         NFTA_TUNNEL_KEY_IP_DST,
1806         __NFTA_TUNNEL_KEY_IP_MAX
1807 };
1808 #define NFTA_TUNNEL_KEY_IP_MAX  (__NFTA_TUNNEL_KEY_IP_MAX - 1)
1809
1810 enum nft_tunnel_ip6_attributes {
1811         NFTA_TUNNEL_KEY_IP6_UNSPEC,
1812         NFTA_TUNNEL_KEY_IP6_SRC,
1813         NFTA_TUNNEL_KEY_IP6_DST,
1814         NFTA_TUNNEL_KEY_IP6_FLOWLABEL,
1815         __NFTA_TUNNEL_KEY_IP6_MAX
1816 };
1817 #define NFTA_TUNNEL_KEY_IP6_MAX (__NFTA_TUNNEL_KEY_IP6_MAX - 1)
1818
1819 enum nft_tunnel_opts_attributes {
1820         NFTA_TUNNEL_KEY_OPTS_UNSPEC,
1821         NFTA_TUNNEL_KEY_OPTS_VXLAN,
1822         NFTA_TUNNEL_KEY_OPTS_ERSPAN,
1823         NFTA_TUNNEL_KEY_OPTS_GENEVE,
1824         __NFTA_TUNNEL_KEY_OPTS_MAX
1825 };
1826 #define NFTA_TUNNEL_KEY_OPTS_MAX        (__NFTA_TUNNEL_KEY_OPTS_MAX - 1)
1827
1828 enum nft_tunnel_opts_vxlan_attributes {
1829         NFTA_TUNNEL_KEY_VXLAN_UNSPEC,
1830         NFTA_TUNNEL_KEY_VXLAN_GBP,
1831         __NFTA_TUNNEL_KEY_VXLAN_MAX
1832 };
1833 #define NFTA_TUNNEL_KEY_VXLAN_MAX       (__NFTA_TUNNEL_KEY_VXLAN_MAX - 1)
1834
1835 enum nft_tunnel_opts_erspan_attributes {
1836         NFTA_TUNNEL_KEY_ERSPAN_UNSPEC,
1837         NFTA_TUNNEL_KEY_ERSPAN_VERSION,
1838         NFTA_TUNNEL_KEY_ERSPAN_V1_INDEX,
1839         NFTA_TUNNEL_KEY_ERSPAN_V2_HWID,
1840         NFTA_TUNNEL_KEY_ERSPAN_V2_DIR,
1841         __NFTA_TUNNEL_KEY_ERSPAN_MAX
1842 };
1843 #define NFTA_TUNNEL_KEY_ERSPAN_MAX      (__NFTA_TUNNEL_KEY_ERSPAN_MAX - 1)
1844
1845 enum nft_tunnel_opts_geneve_attributes {
1846         NFTA_TUNNEL_KEY_GENEVE_UNSPEC,
1847         NFTA_TUNNEL_KEY_GENEVE_CLASS,
1848         NFTA_TUNNEL_KEY_GENEVE_TYPE,
1849         NFTA_TUNNEL_KEY_GENEVE_DATA,
1850         __NFTA_TUNNEL_KEY_GENEVE_MAX
1851 };
1852 #define NFTA_TUNNEL_KEY_GENEVE_MAX      (__NFTA_TUNNEL_KEY_GENEVE_MAX - 1)
1853
1854 enum nft_tunnel_flags {
1855         NFT_TUNNEL_F_ZERO_CSUM_TX       = (1 << 0),
1856         NFT_TUNNEL_F_DONT_FRAGMENT      = (1 << 1),
1857         NFT_TUNNEL_F_SEQ_NUMBER         = (1 << 2),
1858 };
1859 #define NFT_TUNNEL_F_MASK       (NFT_TUNNEL_F_ZERO_CSUM_TX | \
1860                                  NFT_TUNNEL_F_DONT_FRAGMENT | \
1861                                  NFT_TUNNEL_F_SEQ_NUMBER)
1862
1863 enum nft_tunnel_key_attributes {
1864         NFTA_TUNNEL_KEY_UNSPEC,
1865         NFTA_TUNNEL_KEY_ID,
1866         NFTA_TUNNEL_KEY_IP,
1867         NFTA_TUNNEL_KEY_IP6,
1868         NFTA_TUNNEL_KEY_FLAGS,
1869         NFTA_TUNNEL_KEY_TOS,
1870         NFTA_TUNNEL_KEY_TTL,
1871         NFTA_TUNNEL_KEY_SPORT,
1872         NFTA_TUNNEL_KEY_DPORT,
1873         NFTA_TUNNEL_KEY_OPTS,
1874         __NFTA_TUNNEL_KEY_MAX
1875 };
1876 #define NFTA_TUNNEL_KEY_MAX     (__NFTA_TUNNEL_KEY_MAX - 1)
1877
1878 enum nft_tunnel_keys {
1879         NFT_TUNNEL_PATH,
1880         NFT_TUNNEL_ID,
1881         __NFT_TUNNEL_MAX
1882 };
1883 #define NFT_TUNNEL_MAX  (__NFT_TUNNEL_MAX - 1)
1884
1885 enum nft_tunnel_mode {
1886         NFT_TUNNEL_MODE_NONE,
1887         NFT_TUNNEL_MODE_RX,
1888         NFT_TUNNEL_MODE_TX,
1889         __NFT_TUNNEL_MODE_MAX
1890 };
1891 #define NFT_TUNNEL_MODE_MAX     (__NFT_TUNNEL_MODE_MAX - 1)
1892
1893 enum nft_tunnel_attributes {
1894         NFTA_TUNNEL_UNSPEC,
1895         NFTA_TUNNEL_KEY,
1896         NFTA_TUNNEL_DREG,
1897         NFTA_TUNNEL_MODE,
1898         __NFTA_TUNNEL_MAX
1899 };
1900 #define NFTA_TUNNEL_MAX (__NFTA_TUNNEL_MAX - 1)
1901
1902 #endif /* _LINUX_NF_TABLES_H */