tcp: Factor out tcp_initial_window; ease further IW adjustment
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 11 Apr 2012 09:51:04 +0000 (17:51 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 11 Apr 2012 10:28:46 +0000 (18:28 +0800)
sys/netinet/tcp_input.c
sys/netinet/tcp_subr.c
sys/netinet/tcp_var.h

index d8c90fb..e414183 100644 (file)
@@ -3020,13 +3020,11 @@ tcp_mss(struct tcpcb *tp, int offer)
        }
 
        /*
-        * Set the slow-start flight size depending on whether this
-        * is a local network or not.
+        * Set the slow-start flight size
+        *
+        * NOTE: t_maxseg must have been configured!
         */
-       if (tcp_do_rfc3390)
-               tp->snd_cwnd = min(4 * mss, max(2 * mss, 4380));
-       else
-               tp->snd_cwnd = mss;
+       tp->snd_cwnd = tcp_initial_window(tp);
 
        if (rt->rt_rmx.rmx_ssthresh) {
                /*
index eec53a1..706b82a 100644 (file)
@@ -1959,6 +1959,15 @@ tcp_xmit_bandwidth_limit(struct tcpcb *tp, tcp_seq ack_seq)
        tp->snd_bwnd = bwnd;
 }
 
+u_long
+tcp_initial_window(const struct tcpcb *tp)
+{
+       if (tcp_do_rfc3390)
+               return min(4 * tp->t_maxseg, max(2 * tp->t_maxseg, 4380));
+       else
+               return tp->t_maxseg;
+}
+
 #ifdef TCP_SIGNATURE
 /*
  * Compute TCP-MD5 hash of a TCP segment. (RFC2385)
index 57535d0..a448a68 100644 (file)
@@ -654,6 +654,7 @@ struct tcpcb *
 void    tcp_trace (short, short, struct tcpcb *, void *, struct tcphdr *,
                        int);
 void    tcp_xmit_bandwidth_limit(struct tcpcb *tp, tcp_seq ack_seq);
+u_long  tcp_initial_window(const struct tcpcb *tp);
 void    tcp_timer_keep_activity(struct tcpcb *tp, int thflags);
 void    syncache_init(void);
 void    syncache_unreach(struct in_conninfo *, struct tcphdr *);