1e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#ifndef _LINUX_NF_TABLES_H
2e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define _LINUX_NF_TABLES_H
3e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
4e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFT_CHAIN_MAXNAMELEN 32
5e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
6e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_registers {
7e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_REG_VERDICT,
8e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_REG_1,
9e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_REG_2,
10e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_REG_3,
11e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_REG_4,
12e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFT_REG_MAX
13e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
14e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFT_REG_MAX	(__NFT_REG_MAX - 1)
15e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
16e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
17e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_verdicts - nf_tables internal verdicts
18e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
19e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CONTINUE: continue evaluation of the current rule
20e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_BREAK: terminate evaluation of the current rule
21e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_JUMP: push the current chain on the jump stack and jump to a chain
22e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_GOTO: jump to a chain without pushing the current chain on the jump stack
23e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_RETURN: return to the topmost chain on the jump stack
24e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
25e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * The nf_tables verdicts share their numeric space with the netfilter verdicts.
26e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
27e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_verdicts {
28e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CONTINUE	= -1,
29e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_BREAK	= -2,
30e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_JUMP	= -3,
31e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_GOTO	= -4,
32e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_RETURN	= -5,
33e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
34e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
35e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
36e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nf_tables_msg_types - nf_tables netlink message types
37e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
38e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_NEWTABLE: create a new table (enum nft_table_attributes)
39e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_GETTABLE: get a table (enum nft_table_attributes)
40e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_DELTABLE: delete a table (enum nft_table_attributes)
41e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_NEWCHAIN: create a new chain (enum nft_chain_attributes)
42e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_GETCHAIN: get a chain (enum nft_chain_attributes)
43e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_DELCHAIN: delete a chain (enum nft_chain_attributes)
44e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_NEWRULE: create a new rule (enum nft_rule_attributes)
45e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_GETRULE: get a rule (enum nft_rule_attributes)
46e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_DELRULE: delete a rule (enum nft_rule_attributes)
47e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_NEWSET: create a new set (enum nft_set_attributes)
48e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_GETSET: get a set (enum nft_set_attributes)
49e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_DELSET: delete a set (enum nft_set_attributes)
50e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_NEWSETELEM: create a new set element (enum nft_set_elem_attributes)
51e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_GETSETELEM: get a set element (enum nft_set_elem_attributes)
52e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_MSG_DELSETELEM: delete a set element (enum nft_set_elem_attributes)
53e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
54e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nf_tables_msg_types {
55e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_NEWTABLE,
56e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_GETTABLE,
57e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_DELTABLE,
58e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_NEWCHAIN,
59e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_GETCHAIN,
60e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_DELCHAIN,
61e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_NEWRULE,
62e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_GETRULE,
63e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_DELRULE,
64e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_NEWSET,
65e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_GETSET,
66e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_DELSET,
67e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_NEWSETELEM,
68e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_GETSETELEM,
69e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_DELSETELEM,
70e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_MSG_MAX,
71e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
72e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
73e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
74e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_list_attributes - nf_tables generic list netlink attributes
75e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
76e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LIST_ELEM: list element (NLA_NESTED)
77e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
78e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_list_attributes {
79e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LIST_UNPEC,
80e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LIST_ELEM,
81e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_LIST_MAX
82e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
83e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_LIST_MAX		(__NFTA_LIST_MAX - 1)
84e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
85e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
86e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_hook_attributes - nf_tables netfilter hook netlink attributes
87e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
88e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_HOOK_HOOKNUM: netfilter hook number (NLA_U32)
89e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_HOOK_PRIORITY: netfilter hook priority (NLA_U32)
90e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
91e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_hook_attributes {
92e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_HOOK_UNSPEC,
93e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_HOOK_HOOKNUM,
94e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_HOOK_PRIORITY,
95e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_HOOK_MAX
96e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
97e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_HOOK_MAX		(__NFTA_HOOK_MAX - 1)
98e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
99e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
100e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_table_flags - nf_tables table flags
101e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
102e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_TABLE_F_DORMANT: this table is not active
103e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
104e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_table_flags {
105e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_TABLE_F_DORMANT	= 0x1,
106e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
107e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
108e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
109e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_table_attributes - nf_tables table netlink attributes
110e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
111e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_TABLE_NAME: name of the table (NLA_STRING)
112e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_TABLE_FLAGS: bitmask of enum nft_table_flags (NLA_U32)
113e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_TABLE_USE: number of chains in this table (NLA_U32)
114e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
115e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_table_attributes {
116e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_TABLE_UNSPEC,
117e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_TABLE_NAME,
118e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_TABLE_FLAGS,
119e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_TABLE_USE,
120e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_TABLE_MAX
121e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
122e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_TABLE_MAX		(__NFTA_TABLE_MAX - 1)
123e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
124e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
125e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_chain_attributes - nf_tables chain netlink attributes
126e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
127e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_TABLE: name of the table containing the chain (NLA_STRING)
128e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_HANDLE: numeric handle of the chain (NLA_U64)
129e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_NAME: name of the chain (NLA_STRING)
130e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_HOOK: hook specification for basechains (NLA_NESTED: nft_hook_attributes)
131e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_POLICY: numeric policy of the chain (NLA_U32)
132e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_USE: number of references to this chain (NLA_U32)
133e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_TYPE: type name of the string (NLA_NUL_STRING)
134e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CHAIN_COUNTERS: counter specification of the chain (NLA_NESTED: nft_counter_attributes)
135e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
136e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_chain_attributes {
137e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_UNSPEC,
138e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_TABLE,
139e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_HANDLE,
140e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_NAME,
141e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_HOOK,
142e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_POLICY,
143e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_USE,
144e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_TYPE,
145e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CHAIN_COUNTERS,
146e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_CHAIN_MAX
147e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
148e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_CHAIN_MAX		(__NFTA_CHAIN_MAX - 1)
149e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
150e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
151e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_rule_attributes - nf_tables rule netlink attributes
152e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
153e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_TABLE: name of the table containing the rule (NLA_STRING)
154e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_CHAIN: name of the chain containing the rule (NLA_STRING)
155e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_HANDLE: numeric handle of the rule (NLA_U64)
156e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_EXPRESSIONS: list of expressions (NLA_NESTED: nft_expr_attributes)
157e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_COMPAT: compatibility specifications of the rule (NLA_NESTED: nft_rule_compat_attributes)
158e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_POSITION: numeric handle of the previous rule (NLA_U64)
159e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
160e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_rule_attributes {
161e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_UNSPEC,
162e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_TABLE,
163e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_CHAIN,
164e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_HANDLE,
165e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_EXPRESSIONS,
166e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_COMPAT,
167e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_POSITION,
168e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_RULE_MAX
169e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
170e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_RULE_MAX		(__NFTA_RULE_MAX - 1)
171e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
172e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
173e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_rule_compat_flags - nf_tables rule compat flags
174e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
175e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_RULE_COMPAT_F_INV: invert the check result
176e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
177e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_rule_compat_flags {
178e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_RULE_COMPAT_F_INV	= (1 << 1),
179e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_RULE_COMPAT_F_MASK	= NFT_RULE_COMPAT_F_INV,
180e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
181e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
182e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
183e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_rule_compat_attributes - nf_tables rule compat attributes
184e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
185e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_COMPAT_PROTO: numerice value of handled protocol (NLA_U32)
186e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_RULE_COMPAT_FLAGS: bitmask of enum nft_rule_compat_flags (NLA_U32)
187e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
188e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_rule_compat_attributes {
189e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_COMPAT_UNSPEC,
190e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_COMPAT_PROTO,
191e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_RULE_COMPAT_FLAGS,
192e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_RULE_COMPAT_MAX
193e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
194e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_RULE_COMPAT_MAX	(__NFTA_RULE_COMPAT_MAX - 1)
195e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
196e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
197e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_set_flags - nf_tables set flags
198e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
199e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_SET_ANONYMOUS: name allocation, automatic cleanup on unlink
200e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_SET_CONSTANT: set contents may not change while bound
201e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_SET_INTERVAL: set contains intervals
202e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_SET_MAP: set is used as a dictionary
203e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
204e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_set_flags {
205e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_SET_ANONYMOUS		= 0x1,
206e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_SET_CONSTANT		= 0x2,
207e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_SET_INTERVAL		= 0x4,
208e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_SET_MAP			= 0x8,
209e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
210e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
211e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
212e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_set_attributes - nf_tables set netlink attributes
213e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
214e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_TABLE: table name (NLA_STRING)
215e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_NAME: set name (NLA_STRING)
216e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_FLAGS: bitmask of enum nft_set_flags (NLA_U32)
217e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_KEY_TYPE: key data type, informational purpose only (NLA_U32)
218e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_KEY_LEN: key data length (NLA_U32)
219e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_DATA_TYPE: mapping data type (NLA_U32)
220e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_DATA_LEN: mapping data length (NLA_U32)
221e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
222e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_set_attributes {
223e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_UNSPEC,
224e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_TABLE,
225e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_NAME,
226e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_FLAGS,
227e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_KEY_TYPE,
228e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_KEY_LEN,
229e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_DATA_TYPE,
230e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_DATA_LEN,
231e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_SET_MAX
232e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
233e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_SET_MAX		(__NFTA_SET_MAX - 1)
234e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
235e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
236e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_set_elem_flags - nf_tables set element flags
237e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
238e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_SET_ELEM_INTERVAL_END: element ends the previous interval
239e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
240e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_set_elem_flags {
241e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_SET_ELEM_INTERVAL_END	= 0x1,
242e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
243e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
244e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
245e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_set_elem_attributes - nf_tables set element netlink attributes
246e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
247e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_ELEM_KEY: key value (NLA_NESTED: nft_data)
248e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_ELEM_DATA: data value of mapping (NLA_NESTED: nft_data_attributes)
249e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_ELEM_FLAGS: bitmask of nft_set_elem_flags (NLA_U32)
250e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
251e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_set_elem_attributes {
252e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_UNSPEC,
253e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_KEY,
254e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_DATA,
255e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_FLAGS,
256e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_SET_ELEM_MAX
257e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
258e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_SET_ELEM_MAX	(__NFTA_SET_ELEM_MAX - 1)
259e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
260e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
261e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_set_elem_list_attributes - nf_tables set element list netlink attributes
262e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
263e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_ELEM_LIST_TABLE: table of the set to be changed (NLA_STRING)
264e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_ELEM_LIST_SET: name of the set to be changed (NLA_STRING)
265e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_SET_ELEM_LIST_ELEMENTS: list of set elements (NLA_NESTED: nft_set_elem_attributes)
266e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
267e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_set_elem_list_attributes {
268e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_LIST_UNSPEC,
269e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_LIST_TABLE,
270e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_LIST_SET,
271e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_SET_ELEM_LIST_ELEMENTS,
272e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_SET_ELEM_LIST_MAX
273e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
274e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_SET_ELEM_LIST_MAX	(__NFTA_SET_ELEM_LIST_MAX - 1)
275e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
276e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
277e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_data_types - nf_tables data types
278e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
279e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_DATA_VALUE: generic data
280e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_DATA_VERDICT: netfilter verdict
281e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
282e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * The type of data is usually determined by the kernel directly and is not
283e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * explicitly specified by userspace. The only difference are sets, where
284e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * userspace specifies the key and mapping data types.
285e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
286e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * The values 0xffffff00-0xffffffff are reserved for internally used types.
287e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * The remaining range can be freely used by userspace to encode types, all
288e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * values are equivalent to NFT_DATA_VALUE.
289e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
290e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_data_types {
291e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_DATA_VALUE,
292e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_DATA_VERDICT	= 0xffffff00U,
293e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
294e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
295e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFT_DATA_RESERVED_MASK	0xffffff00U
296e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
297e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
298e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_data_attributes - nf_tables data netlink attributes
299e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
300e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_DATA_VALUE: generic data (NLA_BINARY)
301e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_DATA_VERDICT: nf_tables verdict (NLA_NESTED: nft_verdict_attributes)
302e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
303e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_data_attributes {
304e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_DATA_UNSPEC,
305e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_DATA_VALUE,
306e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_DATA_VERDICT,
307e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_DATA_MAX
308e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
309e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_DATA_MAX		(__NFTA_DATA_MAX - 1)
310e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
311e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
312e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_verdict_attributes - nf_tables verdict netlink attributes
313e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
314e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_VERDICT_CODE: nf_tables verdict (NLA_U32: enum nft_verdicts)
315e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_VERDICT_CHAIN: jump target chain name (NLA_STRING)
316e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
317e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_verdict_attributes {
318e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_VERDICT_UNSPEC,
319e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_VERDICT_CODE,
320e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_VERDICT_CHAIN,
321e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_VERDICT_MAX
322e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
323e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_VERDICT_MAX	(__NFTA_VERDICT_MAX - 1)
324e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
325e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
326e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_expr_attributes - nf_tables expression netlink attributes
327e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
328e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_EXPR_NAME: name of the expression type (NLA_STRING)
329e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_EXPR_DATA: type specific data (NLA_NESTED)
330e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
331e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_expr_attributes {
332e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXPR_UNSPEC,
333e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXPR_NAME,
334e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXPR_DATA,
335e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_EXPR_MAX
336e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
337e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_EXPR_MAX		(__NFTA_EXPR_MAX - 1)
338e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
339e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
340e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_immediate_attributes - nf_tables immediate expression netlink attributes
341e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
342e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_IMMEDIATE_DREG: destination register to load data into (NLA_U32)
343e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_IMMEDIATE_DATA: data to load (NLA_NESTED: nft_data_attributes)
344e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
345e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_immediate_attributes {
346e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_IMMEDIATE_UNSPEC,
347e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_IMMEDIATE_DREG,
348e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_IMMEDIATE_DATA,
349e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_IMMEDIATE_MAX
350e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
351e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_IMMEDIATE_MAX	(__NFTA_IMMEDIATE_MAX - 1)
352e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
353e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
354e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_bitwise_attributes - nf_tables bitwise expression netlink attributes
355e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
356e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BITWISE_SREG: source register (NLA_U32: nft_registers)
357e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BITWISE_DREG: destination register (NLA_U32: nft_registers)
358e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BITWISE_LEN: length of operands (NLA_U32)
359e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BITWISE_MASK: mask value (NLA_NESTED: nft_data_attributes)
360e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BITWISE_XOR: xor value (NLA_NESTED: nft_data_attributes)
361e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
362e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * The bitwise expression performs the following operation:
363e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
364e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * dreg = (sreg & mask) ^ xor
365e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
366e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * which allow to express all bitwise operations:
367e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
368e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * 		mask	xor
369e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * NOT:		1	1
370e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * OR:		0	x
371e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * XOR:		1	x
372e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * AND:		x	0
373e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
374e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_bitwise_attributes {
375e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BITWISE_UNSPEC,
376e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BITWISE_SREG,
377e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BITWISE_DREG,
378e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BITWISE_LEN,
379e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BITWISE_MASK,
380e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BITWISE_XOR,
381e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_BITWISE_MAX
382e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
383e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_BITWISE_MAX	(__NFTA_BITWISE_MAX - 1)
384e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
385e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
386e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_byteorder_ops - nf_tables byteorder operators
387e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
388e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_BYTEORDER_NTOH: network to host operator
389e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_BYTEORDER_HTON: host to network opertaor
390e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
391e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_byteorder_ops {
392e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_BYTEORDER_NTOH,
393e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_BYTEORDER_HTON,
394e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
395e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
396e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
397e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_byteorder_attributes - nf_tables byteorder expression netlink attributes
398e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
399e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BYTEORDER_SREG: source register (NLA_U32: nft_registers)
400e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BYTEORDER_DREG: destination register (NLA_U32: nft_registers)
401e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BYTEORDER_OP: operator (NLA_U32: enum nft_byteorder_ops)
402e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BYTEORDER_LEN: length of the data (NLA_U32)
403e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_BYTEORDER_SIZE: data size in bytes (NLA_U32: 2 or 4)
404e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
405e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_byteorder_attributes {
406e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BYTEORDER_UNSPEC,
407e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BYTEORDER_SREG,
408e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BYTEORDER_DREG,
409e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BYTEORDER_OP,
410e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BYTEORDER_LEN,
411e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_BYTEORDER_SIZE,
412e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_BYTEORDER_MAX
413e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
414e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_BYTEORDER_MAX	(__NFTA_BYTEORDER_MAX - 1)
415e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
416e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
417e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_cmp_ops - nf_tables relational operator
418e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
419e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CMP_EQ: equal
420e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CMP_NEQ: not equal
421e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CMP_LT: less than
422e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CMP_LTE: less than or equal to
423e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CMP_GT: greater than
424e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CMP_GTE: greater than or equal to
425e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
426e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_cmp_ops {
427e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CMP_EQ,
428e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CMP_NEQ,
429e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CMP_LT,
430e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CMP_LTE,
431e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CMP_GT,
432e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CMP_GTE,
433e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
434e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
435e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
436e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_cmp_attributes - nf_tables cmp expression netlink attributes
437e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
438e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CMP_SREG: source register of data to compare (NLA_U32: nft_registers)
439e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CMP_OP: cmp operation (NLA_U32: nft_cmp_ops)
440e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CMP_DATA: data to compare against (NLA_NESTED: nft_data_attributes)
441e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
442e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_cmp_attributes {
443e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CMP_UNSPEC,
444e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CMP_SREG,
445e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CMP_OP,
446e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CMP_DATA,
447e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_CMP_MAX
448e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
449e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_CMP_MAX		(__NFTA_CMP_MAX - 1)
450e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
451e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
452e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_lookup_attributes - nf_tables set lookup expression netlink attributes
453e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
454e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LOOKUP_SET: name of the set where to look for (NLA_STRING)
455e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LOOKUP_SREG: source register of the data to look for (NLA_U32: nft_registers)
456e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LOOKUP_DREG: destination register (NLA_U32: nft_registers)
457e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
458e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_lookup_attributes {
459e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOOKUP_UNSPEC,
460e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOOKUP_SET,
461e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOOKUP_SREG,
462e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOOKUP_DREG,
463e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_LOOKUP_MAX
464e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
465e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_LOOKUP_MAX		(__NFTA_LOOKUP_MAX - 1)
466e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
467e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
468e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_payload_bases - nf_tables payload expression offset bases
469e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
470e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_PAYLOAD_LL_HEADER: link layer header
471e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_PAYLOAD_NETWORK_HEADER: network header
472e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_PAYLOAD_TRANSPORT_HEADER: transport header
473e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
474e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_payload_bases {
475e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_PAYLOAD_LL_HEADER,
476e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_PAYLOAD_NETWORK_HEADER,
477e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_PAYLOAD_TRANSPORT_HEADER,
478e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
479e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
480e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
481e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_payload_attributes - nf_tables payload expression netlink attributes
482e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
483e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_PAYLOAD_DREG: destination register to load data into (NLA_U32: nft_registers)
484e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_PAYLOAD_BASE: payload base (NLA_U32: nft_payload_bases)
485e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_PAYLOAD_OFFSET: payload offset relative to base (NLA_U32)
486e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_PAYLOAD_LEN: payload length (NLA_U32)
487e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
488e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_payload_attributes {
489e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_PAYLOAD_UNSPEC,
490e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_PAYLOAD_DREG,
491e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_PAYLOAD_BASE,
492e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_PAYLOAD_OFFSET,
493e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_PAYLOAD_LEN,
494e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_PAYLOAD_MAX
495e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
496e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_PAYLOAD_MAX	(__NFTA_PAYLOAD_MAX - 1)
497e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
498e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
499e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_exthdr_attributes - nf_tables IPv6 extension header expression netlink attributes
500e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
501e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_EXTHDR_DREG: destination register (NLA_U32: nft_registers)
502e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_EXTHDR_TYPE: extension header type (NLA_U8)
503e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_EXTHDR_OFFSET: extension header offset (NLA_U32)
504e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_EXTHDR_LEN: extension header length (NLA_U32)
505e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
506e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_exthdr_attributes {
507e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXTHDR_UNSPEC,
508e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXTHDR_DREG,
509e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXTHDR_TYPE,
510e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXTHDR_OFFSET,
511e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_EXTHDR_LEN,
512e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_EXTHDR_MAX
513e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
514e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_EXTHDR_MAX		(__NFTA_EXTHDR_MAX - 1)
515e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
516e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
517e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_meta_keys - nf_tables meta expression keys
518e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
519e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_LEN: packet length (skb->len)
520e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_PROTOCOL: packet ethertype protocol (skb->protocol), invalid in OUTPUT
521e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_PRIORITY: packet priority (skb->priority)
522e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_MARK: packet mark (skb->mark)
523e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_IIF: packet input interface index (dev->ifindex)
524e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_OIF: packet output interface index (dev->ifindex)
525e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_IIFNAME: packet input interface name (dev->name)
526e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_OIFNAME: packet output interface name (dev->name)
527e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_IIFTYPE: packet input interface type (dev->type)
528e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_OIFTYPE: packet output interface type (dev->type)
529e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_SKUID: originating socket UID (fsuid)
530e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_SKGID: originating socket GID (fsgid)
531e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_NFTRACE: packet nftrace bit
532e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_RTCLASSID: realm value of packet's route (skb->dst->tclassid)
533e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_SECMARK: packet secmark (skb->secmark)
534e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_NFPROTO: netfilter protocol
535e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_META_L4PROTO: layer 4 protocol number
536e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
537e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_meta_keys {
538e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_LEN,
539e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_PROTOCOL,
540e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_PRIORITY,
541e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_MARK,
542e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_IIF,
543e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_OIF,
544e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_IIFNAME,
545e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_OIFNAME,
546e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_IIFTYPE,
547e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_OIFTYPE,
548e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_SKUID,
549e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_SKGID,
550e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_NFTRACE,
551e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_RTCLASSID,
552e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_SECMARK,
553e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_NFPROTO,
554e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_META_L4PROTO,
555e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
556e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
557e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
558e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_meta_attributes - nf_tables meta expression netlink attributes
559e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
560e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_META_DREG: destination register (NLA_U32)
561e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_META_KEY: meta data item to load (NLA_U32: nft_meta_keys)
562e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_META_SREG: source register (NLA_U32)
563e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
564e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_meta_attributes {
565e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_META_UNSPEC,
566e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_META_DREG,
567e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_META_KEY,
568e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_META_SREG,
569e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_META_MAX
570e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
571e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_META_MAX		(__NFTA_META_MAX - 1)
572e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
573e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
574e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_ct_keys - nf_tables ct expression keys
575e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
576e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_STATE: conntrack state (bitmask of enum ip_conntrack_info)
577e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_DIRECTION: conntrack direction (enum ip_conntrack_dir)
578e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_STATUS: conntrack status (bitmask of enum ip_conntrack_status)
579e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_MARK: conntrack mark value
580e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_SECMARK: conntrack secmark value
581e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_EXPIRATION: relative conntrack expiration time in ms
582e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_HELPER: connection tracking helper assigned to conntrack
583e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_L3PROTOCOL: conntrack layer 3 protocol
584e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_SRC: conntrack layer 3 protocol source (IPv4/IPv6 address)
585e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_DST: conntrack layer 3 protocol destination (IPv4/IPv6 address)
586e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_PROTOCOL: conntrack layer 4 protocol
587e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_PROTO_SRC: conntrack layer 4 protocol source
588e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_CT_PROTO_DST: conntrack layer 4 protocol destination
589e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
590e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_ct_keys {
591e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_STATE,
592e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_DIRECTION,
593e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_STATUS,
594e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_MARK,
595e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_SECMARK,
596e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_EXPIRATION,
597e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_HELPER,
598e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_L3PROTOCOL,
599e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_SRC,
600e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_DST,
601e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_PROTOCOL,
602e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_PROTO_SRC,
603e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_CT_PROTO_DST,
604e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
605e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
606e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
607e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_ct_attributes - nf_tables ct expression netlink attributes
608e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
609e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CT_DREG: destination register (NLA_U32)
610e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CT_KEY: conntrack data item to load (NLA_U32: nft_ct_keys)
611e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CT_DIRECTION: direction in case of directional keys (NLA_U8)
612e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_CT_SREG: source register (NLA_U32)
613e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
614e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_ct_attributes {
615e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CT_UNSPEC,
616e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CT_DREG,
617e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CT_KEY,
618e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CT_DIRECTION,
619e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_CT_SREG,
620e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_CT_MAX
621e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
622e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_CT_MAX		(__NFTA_CT_MAX - 1)
623e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
624e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
625e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_limit_attributes - nf_tables limit expression netlink attributes
626e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
627e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LIMIT_RATE: refill rate (NLA_U64)
628e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LIMIT_UNIT: refill unit (NLA_U64)
629e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
630e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_limit_attributes {
631e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LIMIT_UNSPEC,
632e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LIMIT_RATE,
633e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LIMIT_UNIT,
634e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_LIMIT_MAX
635e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
636e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_LIMIT_MAX		(__NFTA_LIMIT_MAX - 1)
637e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
638e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
639e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_counter_attributes - nf_tables counter expression netlink attributes
640e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
641e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_COUNTER_BYTES: number of bytes (NLA_U64)
642e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_COUNTER_PACKETS: number of packets (NLA_U64)
643e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
644e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_counter_attributes {
645e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_COUNTER_UNSPEC,
646e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_COUNTER_BYTES,
647e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_COUNTER_PACKETS,
648e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_COUNTER_MAX
649e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
650e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_COUNTER_MAX	(__NFTA_COUNTER_MAX - 1)
651e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
652e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
653e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_log_attributes - nf_tables log expression netlink attributes
654e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
655e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LOG_GROUP: netlink group to send messages to (NLA_U32)
656e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LOG_PREFIX: prefix to prepend to log messages (NLA_STRING)
657e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LOG_SNAPLEN: length of payload to include in netlink message (NLA_U32)
658e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_LOG_QTHRESHOLD: queue threshold (NLA_U32)
659e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
660e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_log_attributes {
661e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOG_UNSPEC,
662e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOG_GROUP,
663e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOG_PREFIX,
664e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOG_SNAPLEN,
665e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_LOG_QTHRESHOLD,
666e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_LOG_MAX
667e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
668e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_LOG_MAX		(__NFTA_LOG_MAX - 1)
669e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
670e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
671e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_queue_attributes - nf_tables queue expression netlink attributes
672e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
673e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_QUEUE_NUM: netlink queue to send messages to (NLA_U16)
674e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_QUEUE_TOTAL: number of queues to load balance packets on (NLA_U16)
675e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_QUEUE_FLAGS: various flags (NLA_U16)
676e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
677e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_queue_attributes {
678e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_QUEUE_UNSPEC,
679e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_QUEUE_NUM,
680e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_QUEUE_TOTAL,
681e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_QUEUE_FLAGS,
682e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_QUEUE_MAX
683e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
684e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_QUEUE_MAX		(__NFTA_QUEUE_MAX - 1)
685e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
686e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFT_QUEUE_FLAG_BYPASS		0x01 /* for compatibility with v2 */
687e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFT_QUEUE_FLAG_CPU_FANOUT	0x02 /* use current CPU (no hashing) */
688e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFT_QUEUE_FLAG_MASK		0x03
689e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
690e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
691e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_reject_types - nf_tables reject expression reject types
692e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
693e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_REJECT_ICMP_UNREACH: reject using ICMP unreachable
694e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_REJECT_TCP_RST: reject using TCP RST
695e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
696e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_reject_types {
697e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_REJECT_ICMP_UNREACH,
698e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_REJECT_TCP_RST,
699e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
700e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
701e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
702e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_reject_attributes - nf_tables reject expression netlink attributes
703e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
704e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_REJECT_TYPE: packet type to use (NLA_U32: nft_reject_types)
705e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_REJECT_ICMP_CODE: ICMP code to use (NLA_U8)
706e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
707e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_reject_attributes {
708e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_REJECT_UNSPEC,
709e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_REJECT_TYPE,
710e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_REJECT_ICMP_CODE,
711e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_REJECT_MAX
712e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
713e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_REJECT_MAX		(__NFTA_REJECT_MAX - 1)
714e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
715e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
716e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_nat_types - nf_tables nat expression NAT types
717e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
718e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_NAT_SNAT: source NAT
719e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFT_NAT_DNAT: destination NAT
720e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
721e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_nat_types {
722e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_NAT_SNAT,
723e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFT_NAT_DNAT,
724e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
725e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
726e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/**
727e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * enum nft_nat_attributes - nf_tables nat expression netlink attributes
728e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
729e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_NAT_TYPE: NAT type (NLA_U32: nft_nat_types)
730e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_NAT_FAMILY: NAT family (NLA_U32)
731e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_NAT_REG_ADDR_MIN: source register of address range start (NLA_U32: nft_registers)
732e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_NAT_REG_ADDR_MAX: source register of address range end (NLA_U32: nft_registers)
733e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_NAT_REG_PROTO_MIN: source register of proto range start (NLA_U32: nft_registers)
734e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * @NFTA_NAT_REG_PROTO_MAX: source register of proto range end (NLA_U32: nft_registers)
735e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
736e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heylenum nft_nat_attributes {
737e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_NAT_UNSPEC,
738e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_NAT_TYPE,
739e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_NAT_FAMILY,
740e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_NAT_REG_ADDR_MIN,
741e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_NAT_REG_ADDR_MAX,
742e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_NAT_REG_PROTO_MIN,
743e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	NFTA_NAT_REG_PROTO_MAX,
744e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	__NFTA_NAT_MAX
745e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl};
746e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define NFTA_NAT_MAX		(__NFTA_NAT_MAX - 1)
747e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
748e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#endif /* _LINUX_NF_TABLES_H */
749