aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/netfilter_targets.txt
blob: c3f299c2d1d901cd8fff5a1006821b4efc170bf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
# Copyright 2018 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

# Netfilter targets shared between ipv6/ipv6.

include <linux/socket.h>
include <uapi/linux/netfilter/ipset/ip_set.h>
include <uapi/linux/netfilter/x_tables.h>
include <uapi/linux/netfilter/xt_connmark.h>
include <uapi/linux/netfilter/nf_nat.h>
include <uapi/linux/netfilter/xt_set.h>
include <uapi/linux/netfilter/xt_mark.h>
include <uapi/linux/netfilter/xt_TEE.h>
include <uapi/linux/netfilter/xt_LED.h>
include <uapi/linux/netfilter/xt_TCPMSS.h>
include <uapi/linux/netfilter/xt_RATEEST.h>
include <uapi/linux/netfilter/xt_DSCP.h>
include <uapi/linux/netfilter/xt_CLASSIFY.h>
include <uapi/linux/netfilter/xt_IDLETIMER.h>
include <uapi/linux/netfilter/xt_TCPOPTSTRIP.h>
include <uapi/linux/netfilter/xt_NFQUEUE.h>
include <uapi/linux/netfilter/xt_CT.h>
include <uapi/linux/netfilter/xt_AUDIT.h>
include <uapi/linux/netfilter/xt_HMARK.h>
include <uapi/linux/netfilter/xt_TPROXY.h>
include <uapi/linux/netfilter/xt_CHECKSUM.h>
include <uapi/linux/netfilter/xt_CONNSECMARK.h>
include <uapi/linux/netfilter/xt_SECMARK.h>
include <uapi/linux/netfilter/xt_NFLOG.h>
include <uapi/linux/netfilter/xt_LOG.h>
include <uapi/linux/netfilter/xt_SYNPROXY.h>

type xt_target_t[NAME, DATA, REV] {
	target_size	len[parent, int16]
	name		string[NAME, XT_EXTENSION_MAXNAMELEN]
	revision	const[REV, int8]
	data		DATA
} [align[PTR_SIZE]]

xt_unspec_targets [
	STANDARD	xt_target_t["", flags[nf_verdicts, int32], 0]
	ERROR		xt_target_t["ERROR", array[int8, XT_FUNCTION_MAXNAMELEN], 0]
	LED		xt_target_t["LED", xt_led_info, 0]
	RATEEST		xt_target_t["RATEEST", xt_rateest_target_info, 0]
	NFQUEUE0	xt_target_t["NFQUEUE", xt_NFQ_info, 0]
	NFQUEUE1	xt_target_t["NFQUEUE", xt_NFQ_info_v1, 1]
	NFQUEUE2	xt_target_t["NFQUEUE", xt_NFQ_info_v3, 2]
	NFQUEUE3	xt_target_t["NFQUEUE", xt_NFQ_info_v3, 3]
	CLASSIFY	xt_target_t["CLASSIFY", xt_classify_target_info, 0]
	IDLETIMER	xt_target_t["IDLETIMER", idletimer_tg_info, 0]
	AUDIT		xt_target_t["AUDIT", xt_audit_info, 0]
	MARK		xt_target_t["MARK", xt_mark_tginfo2, 2]
	CONNSECMARK	xt_target_t["CONNSECMARK", xt_connsecmark_target_info, 0]
	SECMARK		xt_target_t["SECMARK", xt_secmark_target_info, 0]
	NFLOG		xt_target_t["NFLOG", xt_nflog_info, 0]
	CONNMARK	xt_target_t["CONNMARK", xt_connmark_tginfo1, 1]
] [varlen]

nf_verdicts = 0, NF_DROP_VERDICT, NF_ACCEPT_VERDICT, NF_STOLEN_VERDICT, NF_QUEUE_VERDICT, NF_REPEAT_VERDICT

define NF_DROP_VERDICT	-NF_DROP - 1
define NF_ACCEPT_VERDICT	-NF_ACCEPT - 1
define NF_STOLEN_VERDICT	-NF_STOLEN - 1
define NF_QUEUE_VERDICT	-NF_QUEUE - 1
define NF_REPEAT_VERDICT	-NF_REPEAT - 1

xt_unspec_mangle_targets [
	CHECKSUM	xt_target_t["CHECKSUM", xt_CHECKSUM_info, 0]
] [varlen]

xt_unspec_nat_targets [
	SNAT1	xt_target_t["SNAT", nf_nat_range, 1]
	DNAT1	xt_target_t["DNAT", nf_nat_range, 1]
] [varlen]

xt_unspec_raw_targets [
	TRACE	xt_target_t["TRACE", void, 0]
	CT0	xt_target_t["CT", xt_ct_target_info, 0]
	CT1	xt_target_t["CT", xt_ct_target_info_v1, 1]
	CT2	xt_target_t["CT", xt_ct_target_info_v1, 2]
	NOTRACK	xt_target_t["NOTRACK", void, 0]
] [varlen]

xt_inet_targets [
	TEE		xt_target_t["TEE", xt_tee_tginfo, 1]
	TCPMSS		xt_target_t["TCPMSS", xt_tcpmss_info, 0]
	TCPOPTSTRIP	xt_target_t["TCPOPTSTRIP", xt_tcpoptstrip_target_info, 0]
	HMARK		xt_target_t["HMARK", xt_hmark_info, 0]
	SET1		xt_target_t["SET", xt_set_info_target_v1, 1]
	SET2		xt_target_t["SET", xt_set_info_target_v2, 2]
	SET3		xt_target_t["SET", xt_set_info_target_v3, 3]
	LOG		xt_target_t["LOG", xt_log_info, 0]
	SYNPROXY	xt_target_t["SYNPROXY", xt_synproxy_info, 0]
] [varlen]

xt_inet_mangle_targets [
	DSCP	xt_target_t["DSCP", xt_DSCP_info, 0]
	TOS	xt_target_t["TOS", xt_tos_target_info, 0]
	TPROXY1	xt_target_t["TPROXY", xt_tproxy_target_info_v1, 1]
] [varlen]

xt_tee_tginfo {
	gw	nf_inet_addr
	oif	devname
	priv	align64[intptr]
}

xt_led_info {
	id		string[xt_led_names, 27]
	always_blink	bool8
	delay		int32
	internal_data	align64[intptr]
}

xt_led_names = "syz0", "syz1"

xt_tcpmss_info {
	mss	int16
}

xt_rateest_target_info {
	name		string[xt_rateest_names, IFNAMSIZ]
	interval	int8
	ewma_log	int8
	est		align64[intptr]
}

xt_rateest_names = "syz0", "syz1"

nf_nat_range {
	flags		flags[nf_nat_flags, int32]
	min_addr	nf_inet_addr
	max_addr	nf_inet_addr
	min_proto	nf_conntrack_man_proto
	max_proto	nf_conntrack_man_proto
}

nf_nat_ipv4_multi_range_compat {
	rangesize	const[1, int32]
	range		nf_nat_ipv4_range
}

nf_nat_ipv4_range {
	flags	flags[nf_nat_flags, int32]
	min_ip	ipv4_addr
	max_ip	ipv4_addr
	min	nf_conntrack_man_proto
	max	nf_conntrack_man_proto
}

nf_nat_flags = NF_NAT_RANGE_MAP_IPS, NF_NAT_RANGE_PROTO_SPECIFIED, NF_NAT_RANGE_PROTO_RANDOM, NF_NAT_RANGE_PERSISTENT, NF_NAT_RANGE_PROTO_RANDOM_FULLY

xt_NFQ_info {
	queuenum	int16
}

xt_NFQ_info_v1 {
	queuenum	int16
	queues_total	int16
}

xt_NFQ_info_v3 {
	queuenum	int16
	queues_total	int16
	flags		flags[xt_NFQ_flags, int16]
}

xt_NFQ_flags = NFQ_FLAG_BYPASS, NFQ_FLAG_CPU_FANOUT

xt_DSCP_info {
	dscp	int8[0:XT_DSCP_MAX]
}

xt_tos_target_info {
	tos_value	int8
	tos_mask	int8
}

xt_classify_target_info {
	priority	int32
}

idletimer_tg_info {
	timeout	int32
	label	string[idletimer_tg_names, MAX_IDLETIMER_LABEL_SIZE]
	timer	align64[intptr]
}

idletimer_tg_names = "syz0", "syz1"

xt_tcpoptstrip_target_info {
	strip_bmap	array[int32, 8]
}

xt_ct_target_info {
	flags		bool16
	zone		int16
	ct_events	int32
	exp_events	int32
	helper		string[xt_ct_helpers, 16]
	ct		align64[intptr]
}

xt_ct_target_info_v1 {
	flags		flags[xt_ct_flags, int16]
	zone		int16
	ct_events	int32
	exp_events	int32
	helper		string[xt_ct_helpers, 16]
# TODO: these names must be registered somewhere from netlink.
	timeout		string[xt_ct_timeouts, 32]
	ct		align64[intptr]
}

xt_ct_flags = XT_CT_NOTRACK, XT_CT_NOTRACK_ALIAS, XT_CT_ZONE_DIR_ORIG, XT_CT_ZONE_DIR_REPL, XT_CT_ZONE_MARK
xt_ct_helpers = "", "snmp_trap", "netbios-ns", "pptp", "snmp", "syz0", "syz1"
xt_ct_timeouts = "syz0", "syz1"

xt_audit_info {
	type	flags[xt_audit_flags, int8]
}

xt_audit_flags = XT_AUDIT_TYPE_ACCEPT, XT_AUDIT_TYPE_DROP, XT_AUDIT_TYPE_REJECT

xt_hmark_info {
	src_mask	nf_inet_addr
	dst_mask	ipv6_addr_mask
	src_port_mask	sock_port
	dst_port_mask	sock_port
	src_port_set	sock_port
	dst_port_set	sock_port
	flags		int32
	proto_mask	int16
	hashrnd		int32
	hmodulus	int32
	hoffset		int32
}

xt_tproxy_target_info {
	mark_mask	int32
	mark_value	int32
	laddr		ipv4_addr
	lport		sock_port
}

xt_tproxy_target_info_v1 {
	mark_mask	int32
	mark_value	int32
	laddr		nf_inet_addr
	lport		sock_port
}

xt_set_info_target_v0 {
	add_set	xt_set_info_v0
	del_set	xt_set_info_v0
}

xt_set_info_target_v1 {
	add_set	xt_set_info
	del_set	xt_set_info
}

xt_set_info_target_v2 {
	add_set	xt_set_info
	del_set	xt_set_info
	flags	int32
	timeout	int32
}

xt_set_info_target_v3 {
	add_set	xt_set_info
	del_set	xt_set_info
	map_set	xt_set_info
	flags	int32
	timeout	int32
}

xt_set_info_v0 {
	index	ip_set_id_t
	flags	array[flags[xt_set_info_flags, int32], IPSET_DIM_MAX]
	dim	int8[0:IPSET_DIM_MAX]
	flags2	flags[xt_set_info_flags, int8]
}

xt_set_info {
	index	ip_set_id_t
	dim	int8[0:IPSET_DIM_MAX]
	flags	flags[xt_set_info_flags, int8]
}

xt_set_info_flags = IPSET_SRC, IPSET_DST, IPSET_MATCH_INV

ip_set_counter_match0 {
	op	int8
	value	int64
}

ip_set_counter_match {
	value	align64[int64]
	op	int8
}

xt_mark_tginfo2 {
	mark	int32
	mask	int32
}

xt_CHECKSUM_info {
	operation	const[XT_CHECKSUM_OP_FILL, int8]
}

xt_log_info {
	level		int8
	logflags	flags[xt_log_flags, int8]
	prefix		array[int8, 30]
}

xt_log_flags = XT_LOG_TCPSEQ, XT_LOG_TCPOPT, XT_LOG_IPOPT, XT_LOG_UID, XT_LOG_NFLOG, XT_LOG_MACDECODE

xt_connsecmark_target_info {
	mode	int8[1:2]
}

xt_secmark_target_info {
	mode	int8[1:1]
	secid	int32
	secctx	string[selinux_security_context, SECMARK_SECCTX_MAX]
}

xt_nflog_info {
	len		int32
	group		int16
	threshold	int16
	flags		bool16
	pad		const[0, int16]
	prefix		array[int8, 64]
}

xt_connmark_tginfo1 {
	ctmark	int32
	ctmask	int32
	nfmask	int32
	mode	flags[xt_connmark_mode, int8]
}

xt_connmark_mode = XT_CONNMARK_SET, XT_CONNMARK_SAVE, XT_CONNMARK_RESTORE

xt_synproxy_info {
	options	flags[xt_synproxy_options, int8]
	wscale	int8
	mss	int16
}

xt_synproxy_options = XT_SYNPROXY_OPT_MSS, XT_SYNPROXY_OPT_WSCALE, XT_SYNPROXY_OPT_SACK_PERM, XT_SYNPROXY_OPT_TIMESTAMP, XT_SYNPROXY_OPT_ECN