194 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
	
		
			6.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Index: sys/netinet/tcp_reass.c
 | |
| ===================================================================
 | |
| --- sys/netinet/tcp_reass.c	(revision 285923)
 | |
| +++ sys/netinet/tcp_reass.c	(working copy)
 | |
| @@ -79,25 +79,22 @@ static int tcp_reass_sysctl_qsize(SYSCTL_HANDLER_A
 | |
|  static SYSCTL_NODE(_net_inet_tcp, OID_AUTO, reass, CTLFLAG_RW, 0,
 | |
|      "TCP Segment Reassembly Queue");
 | |
|  
 | |
| -static VNET_DEFINE(int, tcp_reass_maxseg) = 0;
 | |
| -#define	V_tcp_reass_maxseg		VNET(tcp_reass_maxseg)
 | |
| -SYSCTL_VNET_INT(_net_inet_tcp_reass, OID_AUTO, maxsegments, CTLFLAG_RDTUN,
 | |
| -    &VNET_NAME(tcp_reass_maxseg), 0,
 | |
| +static int tcp_reass_maxseg = 0;
 | |
| +SYSCTL_INT(_net_inet_tcp_reass, OID_AUTO, maxsegments, CTLFLAG_RDTUN,
 | |
| +    &tcp_reass_maxseg, 0,
 | |
|      "Global maximum number of TCP Segments in Reassembly Queue");
 | |
|  
 | |
| -SYSCTL_VNET_PROC(_net_inet_tcp_reass, OID_AUTO, cursegments,
 | |
| +SYSCTL_PROC(_net_inet_tcp_reass, OID_AUTO, cursegments,
 | |
|      (CTLTYPE_INT | CTLFLAG_RD), NULL, 0, &tcp_reass_sysctl_qsize, "I",
 | |
|      "Global number of TCP Segments currently in Reassembly Queue");
 | |
|  
 | |
| -static VNET_DEFINE(int, tcp_reass_overflows) = 0;
 | |
| -#define	V_tcp_reass_overflows		VNET(tcp_reass_overflows)
 | |
| -SYSCTL_VNET_INT(_net_inet_tcp_reass, OID_AUTO, overflows,
 | |
| +static int tcp_reass_overflows = 0;
 | |
| +SYSCTL_INT(_net_inet_tcp_reass, OID_AUTO, overflows,
 | |
|      CTLTYPE_INT | CTLFLAG_RD,
 | |
| -    &VNET_NAME(tcp_reass_overflows), 0,
 | |
| +    &tcp_reass_overflows, 0,
 | |
|      "Global number of TCP Segment Reassembly Queue Overflows");
 | |
|  
 | |
| -static VNET_DEFINE(uma_zone_t, tcp_reass_zone);
 | |
| -#define	V_tcp_reass_zone		VNET(tcp_reass_zone)
 | |
| +static uma_zone_t tcp_reass_zone;
 | |
|  
 | |
|  /* Initialize TCP reassembly queue */
 | |
|  static void
 | |
| @@ -105,37 +102,28 @@ tcp_reass_zone_change(void *tag)
 | |
|  {
 | |
|  
 | |
|  	/* Set the zone limit and read back the effective value. */
 | |
| -	V_tcp_reass_maxseg = nmbclusters / 16;
 | |
| -	V_tcp_reass_maxseg = uma_zone_set_max(V_tcp_reass_zone,
 | |
| -	    V_tcp_reass_maxseg);
 | |
| +	tcp_reass_maxseg = nmbclusters / 16;
 | |
| +	tcp_reass_maxseg = uma_zone_set_max(tcp_reass_zone,
 | |
| +	    tcp_reass_maxseg);
 | |
|  }
 | |
|  
 | |
|  void
 | |
| -tcp_reass_init(void)
 | |
| +tcp_reass_global_init(void)
 | |
|  {
 | |
|  
 | |
| -	V_tcp_reass_maxseg = nmbclusters / 16;
 | |
| +	tcp_reass_maxseg = nmbclusters / 16;
 | |
|  	TUNABLE_INT_FETCH("net.inet.tcp.reass.maxsegments",
 | |
| -	    &V_tcp_reass_maxseg);
 | |
| -	V_tcp_reass_zone = uma_zcreate("tcpreass", sizeof (struct tseg_qent),
 | |
| +	    &tcp_reass_maxseg);
 | |
| +	tcp_reass_zone = uma_zcreate("tcpreass", sizeof (struct tseg_qent),
 | |
|  	    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
 | |
|  	/* Set the zone limit and read back the effective value. */
 | |
| -	V_tcp_reass_maxseg = uma_zone_set_max(V_tcp_reass_zone,
 | |
| -	    V_tcp_reass_maxseg);
 | |
| +	tcp_reass_maxseg = uma_zone_set_max(tcp_reass_zone,
 | |
| +	    tcp_reass_maxseg);
 | |
|  	EVENTHANDLER_REGISTER(nmbclusters_change,
 | |
|  	    tcp_reass_zone_change, NULL, EVENTHANDLER_PRI_ANY);
 | |
|  }
 | |
|  
 | |
| -#ifdef VIMAGE
 | |
|  void
 | |
| -tcp_reass_destroy(void)
 | |
| -{
 | |
| -
 | |
| -	uma_zdestroy(V_tcp_reass_zone);
 | |
| -}
 | |
| -#endif
 | |
| -
 | |
| -void
 | |
|  tcp_reass_flush(struct tcpcb *tp)
 | |
|  {
 | |
|  	struct tseg_qent *qe;
 | |
| @@ -145,7 +133,7 @@ tcp_reass_flush(struct tcpcb *tp)
 | |
|  	while ((qe = LIST_FIRST(&tp->t_segq)) != NULL) {
 | |
|  		LIST_REMOVE(qe, tqe_q);
 | |
|  		m_freem(qe->tqe_m);
 | |
| -		uma_zfree(V_tcp_reass_zone, qe);
 | |
| +		uma_zfree(tcp_reass_zone, qe);
 | |
|  		tp->t_segqlen--;
 | |
|  	}
 | |
|  
 | |
| @@ -159,7 +147,7 @@ tcp_reass_sysctl_qsize(SYSCTL_HANDLER_ARGS)
 | |
|  {
 | |
|  	int qsize;
 | |
|  
 | |
| -	qsize = uma_zone_get_cur(V_tcp_reass_zone);
 | |
| +	qsize = uma_zone_get_cur(tcp_reass_zone);
 | |
|  	return (sysctl_handle_int(oidp, &qsize, 0, req));
 | |
|  }
 | |
|  
 | |
| @@ -207,7 +195,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int
 | |
|  	 */
 | |
|  	if ((th->th_seq != tp->rcv_nxt || !TCPS_HAVEESTABLISHED(tp->t_state)) &&
 | |
|  	    tp->t_segqlen >= (so->so_rcv.sb_hiwat / tp->t_maxseg) + 1) {
 | |
| -		V_tcp_reass_overflows++;
 | |
| +		tcp_reass_overflows++;
 | |
|  		TCPSTAT_INC(tcps_rcvmemdrop);
 | |
|  		m_freem(m);
 | |
|  		*tlenp = 0;
 | |
| @@ -226,7 +214,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int
 | |
|  	 * Use a temporary structure on the stack for the missing segment
 | |
|  	 * when the zone is exhausted. Otherwise we may get stuck.
 | |
|  	 */
 | |
| -	te = uma_zalloc(V_tcp_reass_zone, M_NOWAIT);
 | |
| +	te = uma_zalloc(tcp_reass_zone, M_NOWAIT);
 | |
|  	if (te == NULL) {
 | |
|  		if (th->th_seq != tp->rcv_nxt || !TCPS_HAVEESTABLISHED(tp->t_state)) {
 | |
|  			TCPSTAT_INC(tcps_rcvmemdrop);
 | |
| @@ -277,7 +265,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int
 | |
|  				TCPSTAT_ADD(tcps_rcvdupbyte, *tlenp);
 | |
|  				m_freem(m);
 | |
|  				if (te != &tqs)
 | |
| -					uma_zfree(V_tcp_reass_zone, te);
 | |
| +					uma_zfree(tcp_reass_zone, te);
 | |
|  				tp->t_segqlen--;
 | |
|  				/*
 | |
|  				 * Try to present any queued data
 | |
| @@ -314,7 +302,7 @@ tcp_reass(struct tcpcb *tp, struct tcphdr *th, int
 | |
|  		nq = LIST_NEXT(q, tqe_q);
 | |
|  		LIST_REMOVE(q, tqe_q);
 | |
|  		m_freem(q->tqe_m);
 | |
| -		uma_zfree(V_tcp_reass_zone, q);
 | |
| +		uma_zfree(tcp_reass_zone, q);
 | |
|  		tp->t_segqlen--;
 | |
|  		q = nq;
 | |
|  	}
 | |
| @@ -353,7 +341,7 @@ present:
 | |
|  		else
 | |
|  			sbappendstream_locked(&so->so_rcv, q->tqe_m);
 | |
|  		if (q != &tqs)
 | |
| -			uma_zfree(V_tcp_reass_zone, q);
 | |
| +			uma_zfree(tcp_reass_zone, q);
 | |
|  		tp->t_segqlen--;
 | |
|  		q = nq;
 | |
|  	} while (q && q->tqe_th->th_seq == tp->rcv_nxt);
 | |
| Index: sys/netinet/tcp_subr.c
 | |
| ===================================================================
 | |
| --- sys/netinet/tcp_subr.c	(revision 285923)
 | |
| +++ sys/netinet/tcp_subr.c	(working copy)
 | |
| @@ -375,7 +375,6 @@ tcp_init(void)
 | |
|  	tcp_tw_init();
 | |
|  	syncache_init();
 | |
|  	tcp_hc_init();
 | |
| -	tcp_reass_init();
 | |
|  
 | |
|  	TUNABLE_INT_FETCH("net.inet.tcp.sack.enable", &V_tcp_do_sack);
 | |
|  	V_sack_hole_zone = uma_zcreate("sackhole", sizeof(struct sackhole),
 | |
| @@ -385,6 +384,8 @@ tcp_init(void)
 | |
|  	if (!IS_DEFAULT_VNET(curvnet))
 | |
|  		return;
 | |
|  
 | |
| +	tcp_reass_global_init();
 | |
| +
 | |
|  	/* XXX virtualize those bellow? */
 | |
|  	tcp_delacktime = TCPTV_DELACK;
 | |
|  	tcp_keepinit = TCPTV_KEEP_INIT;
 | |
| @@ -432,7 +433,6 @@ void
 | |
|  tcp_destroy(void)
 | |
|  {
 | |
|  
 | |
| -	tcp_reass_destroy();
 | |
|  	tcp_hc_destroy();
 | |
|  	syncache_destroy();
 | |
|  	tcp_tw_destroy();
 | |
| Index: sys/netinet/tcp_var.h
 | |
| ===================================================================
 | |
| --- sys/netinet/tcp_var.h	(revision 285923)
 | |
| +++ sys/netinet/tcp_var.h	(working copy)
 | |
| @@ -666,11 +666,8 @@ char	*tcp_log_addrs(struct in_conninfo *, struct t
 | |
|  char	*tcp_log_vain(struct in_conninfo *, struct tcphdr *, void *,
 | |
|  	    const void *);
 | |
|  int	 tcp_reass(struct tcpcb *, struct tcphdr *, int *, struct mbuf *);
 | |
| -void	 tcp_reass_init(void);
 | |
| +void	 tcp_reass_global_init(void);
 | |
|  void	 tcp_reass_flush(struct tcpcb *);
 | |
| -#ifdef VIMAGE
 | |
| -void	 tcp_reass_destroy(void);
 | |
| -#endif
 | |
|  void	 tcp_input(struct mbuf *, int);
 | |
|  u_long	 tcp_maxmtu(struct in_conninfo *, struct tcp_ifcap *);
 | |
|  u_long	 tcp_maxmtu6(struct in_conninfo *, struct tcp_ifcap *);
 |