diff -ru linux-2.2.17-cut-tcp_rto/include/linux/sysctl.h linux-2.2.17c/include/linux/sysctl.h --- linux-2.2.17-cut-tcp_rto/include/linux/sysctl.h Sat Jul 22 05:31:27 2000 +++ linux-2.2.17c/include/linux/sysctl.h Fri Sep 22 15:29:18 2000 @@ -228,7 +228,8 @@ NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64, NET_IPV4_IGMP_MAX_MEMBERSHIPS=65, NET_IPV4_ALWAYS_DEFRAG=67, - NET_IPV4_IP_MASQ_UDP_DLOOSE=68 + NET_IPV4_IP_MASQ_UDP_DLOOSE=68, + NET_TCP_RTO_MAX=69, }; enum { diff -ru linux-2.2.17-cut-tcp_rto/include/net/tcp.h linux-2.2.17c/include/net/tcp.h --- linux-2.2.17-cut-tcp_rto/include/net/tcp.h Fri May 5 22:25:17 2000 +++ linux-2.2.17c/include/net/tcp.h Fri Sep 22 16:08:55 2000 @@ -558,6 +558,10 @@ extern __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb, __u16 *mss); +/* tcp_input.c */ + +extern int sysctl_tcp_rto_max; + /* tcp_output.c */ extern void tcp_read_wakeup(struct sock *); diff -ru linux-2.2.17-cut-tcp_rto/net/ipv4/sysctl_net_ipv4.c linux-2.2.17c/net/ipv4/sysctl_net_ipv4.c --- linux-2.2.17-cut-tcp_rto/net/ipv4/sysctl_net_ipv4.c Sat Jul 22 05:31:27 2000 +++ linux-2.2.17c/net/ipv4/sysctl_net_ipv4.c Fri Sep 22 15:33:55 2000 @@ -207,6 +207,8 @@ {NET_IPV4_IGMP_MAX_MEMBERSHIPS, "igmp_max_memberships", &sysctl_igmp_max_memberships, sizeof(int), 0644, NULL, &proc_dointvec}, #endif + {NET_TCP_RTO_MAX, "tcp_rto_max", + &sysctl_tcp_rto_max, sizeof(int), 0644, NULL, &proc_dointvec}, {0} }; diff -ru linux-2.2.17-cut-tcp_rto/net/ipv4/tcp_input.c linux-2.2.17c/net/ipv4/tcp_input.c --- linux-2.2.17-cut-tcp_rto/net/ipv4/tcp_input.c Fri Sep 22 15:44:20 2000 +++ linux-2.2.17c/net/ipv4/tcp_input.c Fri Sep 22 15:42:44 2000 @@ -83,6 +83,8 @@ int sysctl_tcp_stdurg; int sysctl_tcp_rfc1337; +int sysctl_tcp_rto_max = 120*HZ; + static int prune_queue(struct sock *sk); /* There is something which you must keep in mind when you analyze the @@ -204,8 +206,8 @@ */ static __inline__ void tcp_bound_rto(struct tcp_opt *tp) { - if (tp->rto > 120*HZ) - tp->rto = 120*HZ; + if (tp->rto > sysctl_tcp_rto_max) + tp->rto = sysctl_tcp_rto_max; if (tp->rto < HZ/5) tp->rto = HZ/5; } @@ -682,7 +684,7 @@ tcp_clear_xmit_timer(sk, TIME_PROBE0); } else { tcp_reset_xmit_timer(sk, TIME_PROBE0, - min(tp->rto << tp->backoff, 120*HZ)); + min(tp->rto << tp->backoff, sysctl_tcp_rto_max)); } } diff -ru linux-2.2.17-cut-tcp_rto/net/ipv4/tcp_output.c linux-2.2.17c/net/ipv4/tcp_output.c --- linux-2.2.17-cut-tcp_rto/net/ipv4/tcp_output.c Fri Sep 22 15:44:20 2000 +++ linux-2.2.17c/net/ipv4/tcp_output.c Fri Sep 22 15:42:44 2000 @@ -1174,5 +1174,5 @@ tp->backoff++; tp->probes_out++; tcp_reset_xmit_timer (sk, TIME_PROBE0, - min(tp->rto << tp->backoff, 120*HZ)); + min(tp->rto << tp->backoff, sysctl_tcp_rto_max)); } diff -ru linux-2.2.17-cut-tcp_rto/net/ipv4/tcp_timer.c linux-2.2.17c/net/ipv4/tcp_timer.c --- linux-2.2.17-cut-tcp_rto/net/ipv4/tcp_timer.c Sat Jul 22 05:31:27 2000 +++ linux-2.2.17c/net/ipv4/tcp_timer.c Fri Sep 22 15:33:32 2000 @@ -501,7 +501,7 @@ * the 120 second clamps though! */ tp->backoff++; - tp->rto = min(tp->rto << 1, 120*HZ); + tp->rto = min(tp->rto << 1, sysctl_tcp_rto_max); tcp_reset_xmit_timer(sk, TIME_RETRANS, tp->rto); tcp_write_timeout(sk); @@ -566,7 +566,7 @@ #endif timeo = min((TCP_TIMEOUT_INIT << conn->retrans), - 120*HZ); + sysctl_tcp_rto_max); conn->expires = now + timeo; op = prev->dl_next; tcp_synq_queue(tp, conn);