summaryrefslogtreecommitdiffstats
path: root/sys/netinet/vinet.h
blob: 026869326e2844b4127e47f4055bf231844df954 (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
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
/*-
 * Copyright (c) 2006-2008 University of Zagreb
 * Copyright (c) 2006-2008 FreeBSD Foundation
 *
 * This software was developed by the University of Zagreb and the
 * FreeBSD Foundation under sponsorship by the Stichting NLnet and the
 * FreeBSD Foundation.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

#ifndef _NETINET_VINET_H_
#define _NETINET_VINET_H_

#include <sys/sysctl.h>

#include <netinet/in.h>
#include <netinet/in_var.h>
#include <netinet/in_pcb.h>
#include <netinet/ip_var.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netinet/icmp_var.h>
#include <netinet/igmp_var.h>
#include <netinet/tcp.h>
#include <netinet/tcp_var.h>
#include <netinet/tcp_hostcache.h>
#include <netinet/tcp_syncache.h>
#include <netinet/udp.h>
#include <netinet/udp_var.h>

struct vnet_inet {
	struct in_ifaddrhashhead *_in_ifaddrhashtbl;
	struct in_ifaddrhead	_in_ifaddrhead;
	u_long			_in_ifaddrhmask;

	int			_arpt_keep;
	int			_arp_maxtries;
	int			_useloopback;
	int			_arp_proxyall;
	int			_subnetsarelocal;
	int			_sameprefixcarponly;

	int			_ipforwarding;
	int			_ipstealth;
	int			_ipfastforward_active;
	int			_ipsendredirects;
	int			_ip_defttl;
	int			_ip_keepfaith;
	int			_ip_sendsourcequench;
	int			_ip_do_randomid;
	int			_ip_checkinterface;
	int			_ip_output_flowtable_size;
	u_short			_ip_id;

	uma_zone_t 		_ipq_zone;
	int			_nipq;	  /* Total # of reass queues */
	int			_maxnipq; /* Admin. limit on # reass queues. */
	int			_maxfragsperpacket;
	TAILQ_HEAD(ipqhead, ipq) _ipq[IPREASS_NHASH];

	struct inpcbhead	_tcb;	/* head of queue of active tcpcb's */
	struct inpcbinfo	_tcbinfo;
	struct tcpstat		_tcpstat; /* tcp statistics */
	struct tcp_hostcache	_tcp_hostcache;
	struct callout		_tcp_hc_callout;

	uma_zone_t		_tcp_reass_zone;
	uma_zone_t		_tcpcb_zone;
	uma_zone_t		_tcptw_zone;
	uma_zone_t		_sack_hole_zone;

	struct tcp_syncache	_tcp_syncache;
	int			_tcp_syncookies;
	int			_tcp_syncookiesonly;
	int			_tcp_sc_rst_sock_fail;

	struct inpcbhead	_divcb;
	struct inpcbinfo	_divcbinfo;
	TAILQ_HEAD(, tcptw)	_twq_2msl;

	int			_tcp_mssdflt;
	int			_tcp_v6mssdflt;
	int			_tcp_minmss;
	int			_tcp_do_rfc1323;
	int			_icmp_may_rst;
	int			_tcp_isn_reseed_interval;
	int			_tcp_inflight_enable;
	int			_tcp_inflight_rttthresh;
	int			_tcp_inflight_min;
	int			_tcp_inflight_max;
	int			_tcp_inflight_stab;
	int			_nolocaltimewait;
	int			_path_mtu_discovery;
	int			_ss_fltsz;
	int			_ss_fltsz_local;
	int			_tcp_do_newreno;
	int			_tcp_do_tso;
	int			_tcp_do_autosndbuf;
	int			_tcp_autosndbuf_inc;
	int			_tcp_autosndbuf_max;
	int			_tcp_do_sack;
	int			_tcp_sack_maxholes;
	int			_tcp_sack_globalmaxholes;
	int			_tcp_sack_globalholes;
	int			_blackhole;
	int			_tcp_delack_enabled;
	int			_drop_synfin;
	int			_tcp_do_rfc3042;
	int			_tcp_do_rfc3390;
	int			_tcp_do_rfc3465;
	int			_tcp_abc_l_var;
	int			_tcp_do_ecn;
	int			_tcp_ecn_maxretries;
	int			_tcp_insecure_rst;
	int			_tcp_do_autorcvbuf;
	int			_tcp_autorcvbuf_inc;
	int			_tcp_autorcvbuf_max;
	int			_tcp_reass_maxseg;
	int			_tcp_reass_qsize;
	int			_tcp_reass_maxqlen;
	int			_tcp_reass_overflows;

	u_char			_isn_secret[32];
	int			_isn_last_reseed;
	u_int32_t		_isn_offset;
	u_int32_t		_isn_offset_old;

	struct inpcbhead	_udb;
	struct inpcbinfo	_udbinfo;
	uma_zone_t		_udpcb_zone;
	struct udpstat		_udpstat;
	int			_udp_blackhole;

	struct inpcbhead	_ripcb;
	struct inpcbinfo	_ripcbinfo;
	struct socket *		_ip_mrouter;

	struct socket *		_ip_rsvpd;
	int			_ip_rsvp_on;
	int			_rsvp_on;

	struct icmpstat		_icmpstat;
	struct ipstat		_ipstat;

	LIST_HEAD(, igmp_ifinfo) _igi_head;
	struct igmpstat		_igmpstat;
	int			_interface_timers_running;
	int			_state_change_timers_running;
	int			_current_state_timers_running;
	int			_igmp_recvifkludge;
	int			_igmp_sendra;
	int			_igmp_sendlocal;
	int			_igmp_v1enable;
	int			_igmp_v2enable;
	int			_igmp_legacysupp;
	int			_igmp_sgalloc;
	int			_igmp_default_version;
	struct timeval		_igmp_gsrdelay;

	int			_rtq_timeout;
	int			_rtq_reallyold;
	int			_rtq_minreallyold;
	int			_rtq_toomany;
	struct callout		_rtq_timer;

	int			_ipport_lowfirstauto;
	int			_ipport_lowlastauto;
	int			_ipport_firstauto;
	int			_ipport_lastauto;
	int			_ipport_hifirstauto;
	int			_ipport_hilastauto;
	int			_ipport_reservedhigh;
	int			_ipport_reservedlow;
	int			_ipport_randomized;
	int			_ipport_randomcps;
	int			_ipport_randomtime;
	int			_ipport_stoprandom;
	int			_ipport_tcpallocs;
	int			_ipport_tcplastcount;

	int			_icmpmaskrepl;
	u_int			_icmpmaskfake;
	int			_drop_redirect;
	int			_log_redirect;
	int			_icmplim;
	int			_icmplim_output;
	char			_reply_src[IFNAMSIZ];
	int			_icmp_rfi;
	int			_icmp_quotelen;
	int			_icmpbmcastecho;

	int			_fw_one_pass;
};

/* Size guard. See sys/vimage.h. */
VIMAGE_CTASSERT(SIZEOF_vnet_inet, sizeof(struct vnet_inet));

#ifndef VIMAGE
#ifndef VIMAGE_GLOBALS
extern struct vnet_inet vnet_inet_0;
#endif
#endif

/*
 * Symbol translation macros
 */
#define	INIT_VNET_INET(vnet) \
	INIT_FROM_VNET(vnet, VNET_MOD_INET, struct vnet_inet, vnet_inet)

#define	VNET_INET(sym)	VSYM(vnet_inet, sym)

#define	V_arp_maxtries		VNET_INET(arp_maxtries)
#define	V_arp_proxyall		VNET_INET(arp_proxyall)
#define	V_arpt_keep		VNET_INET(arpt_keep)
#define	V_blackhole		VNET_INET(blackhole)
#define	V_divcb			VNET_INET(divcb)
#define	V_divcbinfo		VNET_INET(divcbinfo)
#define	V_drop_redirect		VNET_INET(drop_redirect)
#define	V_drop_synfin		VNET_INET(drop_synfin)
#define	V_fw_one_pass		VNET_INET(fw_one_pass)
#define	V_icmp_may_rst		VNET_INET(icmp_may_rst)
#define	V_icmp_quotelen		VNET_INET(icmp_quotelen)
#define	V_icmp_rfi		VNET_INET(icmp_rfi)
#define	V_icmpbmcastecho	VNET_INET(icmpbmcastecho)
#define	V_icmplim		VNET_INET(icmplim)
#define	V_icmplim_output	VNET_INET(icmplim_output)
#define	V_icmpmaskfake		VNET_INET(icmpmaskfake)
#define	V_icmpmaskrepl		VNET_INET(icmpmaskrepl)
#define	V_icmpstat		VNET_INET(icmpstat)
#define	V_igi_head		VNET_INET(igi_head)
#define	V_igmpstat		VNET_INET(igmpstat)
#define V_interface_timers_running \
				VNET_INET(interface_timers_running)
#define V_state_change_timers_running \
				VNET_INET(state_change_timers_running)
#define V_current_state_timers_running \
				VNET_INET(current_state_timers_running)
#define V_igmp_recvifkludge	VNET_INET(igmp_recvifkludge)
#define V_igmp_sendra		VNET_INET(igmp_sendra)
#define V_igmp_sendlocal	VNET_INET(igmp_sendlocal)
#define V_igmp_v1enable		VNET_INET(igmp_v1enable)
#define V_igmp_v2enable		VNET_INET(igmp_v2enable)
#define V_igmp_legacysupp	VNET_INET(igmp_legacysupp)
#define V_igmp_sgalloc		VNET_INET(igmp_sgalloc)
#define V_igmp_default_version	VNET_INET(igmp_default_version)
#define V_igmp_gsrdelay		VNET_INET(igmp_gsrdelay)
#define	V_in_ifaddrhashtbl	VNET_INET(in_ifaddrhashtbl)
#define	V_in_ifaddrhead		VNET_INET(in_ifaddrhead)
#define	V_in_ifaddrhmask	VNET_INET(in_ifaddrhmask)
#define	V_ip_checkinterface	VNET_INET(ip_checkinterface)
#define	V_ip_defttl		VNET_INET(ip_defttl)
#define	V_ip_do_randomid	VNET_INET(ip_do_randomid)
#define	V_ip_id			VNET_INET(ip_id)
#define	V_ip_keepfaith		VNET_INET(ip_keepfaith)
#define	V_ip_mrouter		VNET_INET(ip_mrouter)
#define	V_ip_rsvp_on		VNET_INET(ip_rsvp_on)
#define	V_ip_rsvpd		VNET_INET(ip_rsvpd)
#define	V_ip_sendsourcequench	VNET_INET(ip_sendsourcequench)
#define	V_ipfastforward_active	VNET_INET(ipfastforward_active)
#define	V_ipforwarding		VNET_INET(ipforwarding)
#define	V_ipport_firstauto	VNET_INET(ipport_firstauto)
#define	V_ipport_hifirstauto	VNET_INET(ipport_hifirstauto)
#define	V_ipport_hilastauto	VNET_INET(ipport_hilastauto)
#define	V_ipport_lastauto	VNET_INET(ipport_lastauto)
#define	V_ipport_lowfirstauto	VNET_INET(ipport_lowfirstauto)
#define	V_ipport_lowlastauto	VNET_INET(ipport_lowlastauto)
#define	V_ipport_randomcps	VNET_INET(ipport_randomcps)
#define	V_ipport_randomized	VNET_INET(ipport_randomized)
#define	V_ipport_randomtime	VNET_INET(ipport_randomtime)
#define	V_ipport_reservedhigh	VNET_INET(ipport_reservedhigh)
#define	V_ipport_reservedlow	VNET_INET(ipport_reservedlow)
#define	V_ipport_stoprandom	VNET_INET(ipport_stoprandom)
#define	V_ipport_tcpallocs	VNET_INET(ipport_tcpallocs)
#define	V_ipport_tcplastcount	VNET_INET(ipport_tcplastcount)
#define	V_ipq			VNET_INET(ipq)
#define	V_ipq_zone		VNET_INET(ipq_zone)
#define	V_ipsendredirects	VNET_INET(ipsendredirects)
#define	V_ipstat		VNET_INET(ipstat)
#define	V_ipstealth		VNET_INET(ipstealth)
#define	V_isn_last_reseed	VNET_INET(isn_last_reseed)
#define	V_isn_offset		VNET_INET(isn_offset)
#define	V_isn_offset_old	VNET_INET(isn_offset_old)
#define	V_isn_secret		VNET_INET(isn_secret)
#define	V_llinfo_arp		VNET_INET(llinfo_arp)
#define	V_log_redirect		VNET_INET(log_redirect)
#define	V_maxfragsperpacket	VNET_INET(maxfragsperpacket)
#define	V_maxnipq		VNET_INET(maxnipq)
#define	V_nipq			VNET_INET(nipq)
#define	V_nolocaltimewait	VNET_INET(nolocaltimewait)
#define	V_path_mtu_discovery	VNET_INET(path_mtu_discovery)
#define	V_reply_src		VNET_INET(reply_src)
#define	V_ripcb			VNET_INET(ripcb)
#define	V_ripcbinfo		VNET_INET(ripcbinfo)
#define	V_router_info_head	VNET_INET(router_info_head)
#define	V_rsvp_on		VNET_INET(rsvp_on)
#define	V_rtq_minreallyold	VNET_INET(rtq_minreallyold)
#define	V_rtq_reallyold		VNET_INET(rtq_reallyold)
#define	V_rtq_timeout		VNET_INET(rtq_timeout)
#define	V_rtq_timer		VNET_INET(rtq_timer)
#define	V_rtq_toomany		VNET_INET(rtq_toomany)
#define	V_sack_hole_zone	VNET_INET(sack_hole_zone)
#define	V_sameprefixcarponly	VNET_INET(sameprefixcarponly)
#define	V_ss_fltsz		VNET_INET(ss_fltsz)
#define	V_ss_fltsz_local	VNET_INET(ss_fltsz_local)
#define	V_subnetsarelocal	VNET_INET(subnetsarelocal)
#define	V_tcb			VNET_INET(tcb)
#define	V_tcbinfo		VNET_INET(tcbinfo)
#define	V_tcpcb_zone		VNET_INET(tcpcb_zone)
#define	V_tcptw_zone		VNET_INET(tcptw_zone)
#define	V_tcp_abc_l_var		VNET_INET(tcp_abc_l_var)
#define	V_tcp_autorcvbuf_inc	VNET_INET(tcp_autorcvbuf_inc)
#define	V_tcp_autorcvbuf_max	VNET_INET(tcp_autorcvbuf_max)
#define	V_tcp_autosndbuf_inc	VNET_INET(tcp_autosndbuf_inc)
#define	V_tcp_autosndbuf_max	VNET_INET(tcp_autosndbuf_max)
#define	V_tcp_delack_enabled	VNET_INET(tcp_delack_enabled)
#define	V_tcp_do_autorcvbuf	VNET_INET(tcp_do_autorcvbuf)
#define	V_tcp_do_autosndbuf	VNET_INET(tcp_do_autosndbuf)
#define	V_tcp_do_ecn		VNET_INET(tcp_do_ecn)
#define	V_tcp_do_newreno	VNET_INET(tcp_do_newreno)
#define	V_tcp_do_rfc1323	VNET_INET(tcp_do_rfc1323)
#define	V_tcp_do_rfc3042	VNET_INET(tcp_do_rfc3042)
#define	V_tcp_do_rfc3390	VNET_INET(tcp_do_rfc3390)
#define	V_tcp_do_rfc3465	VNET_INET(tcp_do_rfc3465)
#define	V_tcp_do_sack		VNET_INET(tcp_do_sack)
#define	V_tcp_do_tso		VNET_INET(tcp_do_tso)
#define	V_tcp_ecn_maxretries	VNET_INET(tcp_ecn_maxretries)
#define	V_tcp_hc_callout	VNET_INET(tcp_hc_callout)
#define	V_tcp_hostcache		VNET_INET(tcp_hostcache)
#define	V_tcp_inflight_enable	VNET_INET(tcp_inflight_enable)
#define	V_tcp_inflight_max	VNET_INET(tcp_inflight_max)
#define	V_tcp_inflight_min	VNET_INET(tcp_inflight_min)
#define	V_tcp_inflight_rttthresh VNET_INET(tcp_inflight_rttthresh)
#define	V_tcp_inflight_stab	VNET_INET(tcp_inflight_stab)
#define	V_tcp_insecure_rst	VNET_INET(tcp_insecure_rst)
#define	V_tcp_isn_reseed_interval VNET_INET(tcp_isn_reseed_interval)
#define	V_tcp_minmss		VNET_INET(tcp_minmss)
#define	V_tcp_mssdflt		VNET_INET(tcp_mssdflt)
#define	V_tcp_reass_maxqlen	VNET_INET(tcp_reass_maxqlen)
#define	V_tcp_reass_maxseg	VNET_INET(tcp_reass_maxseg)
#define	V_tcp_reass_overflows	VNET_INET(tcp_reass_overflows)
#define	V_tcp_reass_qsize	VNET_INET(tcp_reass_qsize)
#define	V_tcp_reass_zone	VNET_INET(tcp_reass_zone)
#define	V_tcp_sack_globalholes	VNET_INET(tcp_sack_globalholes)
#define	V_tcp_sack_globalmaxholes VNET_INET(tcp_sack_globalmaxholes)
#define	V_tcp_sack_maxholes	VNET_INET(tcp_sack_maxholes)
#define	V_tcp_sc_rst_sock_fail	VNET_INET(tcp_sc_rst_sock_fail)
#define	V_tcp_syncache		VNET_INET(tcp_syncache)
#define	V_tcp_syncookies	VNET_INET(tcp_syncookies)
#define	V_tcp_syncookiesonly	VNET_INET(tcp_syncookiesonly)
#define	V_tcp_v6mssdflt		VNET_INET(tcp_v6mssdflt)
#define	V_tcpstat		VNET_INET(tcpstat)
#define	V_twq_2msl		VNET_INET(twq_2msl)
#define	V_udb			VNET_INET(udb)
#define	V_udbinfo		VNET_INET(udbinfo)
#define	V_udpcb_zone		VNET_INET(udpcb_zone)
#define	V_udp_blackhole		VNET_INET(udp_blackhole)
#define	V_udpstat		VNET_INET(udpstat)
#define	V_useloopback		VNET_INET(useloopback)

#define ip_newid() ((V_ip_do_randomid != 0) ? ip_randomid() : htons(V_ip_id++))

#endif /* !_NETINET_VINET_H_ */
OpenPOWER on IntegriCloud