mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-12 09:58:36 +00:00
tcp: virtualise net.inet.tcp.msl sysctl.
VNET teardown waits 2*MSL (60 seconds by default) before expiring tcp PCBs. These PCBs holds references to nexthops, which, in turn, reference ifnets. This chain results in VNET interfaces being destroyed and moved to default VNET only after 60 seconds. Allow tcp_msl to be set in jail by virtualising net.inet.tcp.msl sysctl, permitting more predictable VNET tests outcomes. MFC after: 1 week Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D33270
This commit is contained in:
parent
ace3370392
commit
c2c8e360d8
@ -1506,19 +1506,20 @@ tcp_init(void)
|
||||
COUNTER_ARRAY_ALLOC(V_tcps_states, TCP_NSTATES, M_WAITOK);
|
||||
VNET_PCPUSTAT_ALLOC(tcpstat, M_WAITOK);
|
||||
|
||||
V_tcp_msl = TCPTV_MSL;
|
||||
|
||||
/* Skip initialization of globals for non-default instances. */
|
||||
if (!IS_DEFAULT_VNET(curvnet))
|
||||
return;
|
||||
|
||||
tcp_reass_global_init();
|
||||
|
||||
/* XXX virtualize those bellow? */
|
||||
/* XXX virtualize those below? */
|
||||
tcp_delacktime = TCPTV_DELACK;
|
||||
tcp_keepinit = TCPTV_KEEP_INIT;
|
||||
tcp_keepidle = TCPTV_KEEP_IDLE;
|
||||
tcp_keepintvl = TCPTV_KEEPINTVL;
|
||||
tcp_maxpersistidle = TCPTV_KEEP_IDLE;
|
||||
tcp_msl = TCPTV_MSL;
|
||||
tcp_rexmit_initial = TCPTV_RTOBASE;
|
||||
if (tcp_rexmit_initial < 1)
|
||||
tcp_rexmit_initial = 1;
|
||||
|
@ -117,10 +117,10 @@ SYSCTL_PROC(_net_inet_tcp, TCPCTL_DELACKTIME, delacktime,
|
||||
&tcp_delacktime, 0, sysctl_msec_to_ticks, "I",
|
||||
"Time before a delayed ACK is sent");
|
||||
|
||||
int tcp_msl;
|
||||
VNET_DEFINE(int, tcp_msl);
|
||||
SYSCTL_PROC(_net_inet_tcp, OID_AUTO, msl,
|
||||
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
|
||||
&tcp_msl, 0, sysctl_msec_to_ticks, "I",
|
||||
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_VNET,
|
||||
&VNET_NAME(tcp_msl), 0, sysctl_msec_to_ticks, "I",
|
||||
"Maximum segment lifetime");
|
||||
|
||||
int tcp_rexmit_initial;
|
||||
|
@ -195,7 +195,6 @@ extern int tcp_maxpersistidle;
|
||||
extern int tcp_rexmit_initial;
|
||||
extern int tcp_rexmit_min;
|
||||
extern int tcp_rexmit_slop;
|
||||
extern int tcp_msl;
|
||||
extern int tcp_ttl; /* time to live for TCP segs */
|
||||
extern int tcp_backoff[];
|
||||
extern int tcp_totbackoff;
|
||||
@ -212,6 +211,8 @@ VNET_DECLARE(int, tcp_pmtud_blackhole_mss);
|
||||
#define V_tcp_pmtud_blackhole_mss VNET(tcp_pmtud_blackhole_mss)
|
||||
VNET_DECLARE(int, tcp_v6pmtud_blackhole_mss);
|
||||
#define V_tcp_v6pmtud_blackhole_mss VNET(tcp_v6pmtud_blackhole_mss)
|
||||
VNET_DECLARE(int, tcp_msl);
|
||||
#define V_tcp_msl VNET(tcp_msl)
|
||||
|
||||
void tcp_inpinfo_lock_del(struct inpcb *inp, struct tcpcb *tp);
|
||||
|
||||
|
@ -765,7 +765,7 @@ tcp_tw_2msl_reset(struct tcptw *tw, int rearm)
|
||||
TW_WLOCK(V_tw_lock);
|
||||
if (rearm)
|
||||
TAILQ_REMOVE(&V_twq_2msl, tw, tw_2msl);
|
||||
tw->tw_time = ticks + 2 * tcp_msl;
|
||||
tw->tw_time = ticks + 2 * V_tcp_msl;
|
||||
TAILQ_INSERT_TAIL(&V_twq_2msl, tw, tw_2msl);
|
||||
TW_WUNLOCK(V_tw_lock);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user