Hi!, I think that the current Westwood algorithm implemented in the Linux kernel (since 2.6.13) is not same with one described in its original paper. In the Linux implementation, Westwood uses 'tcp_reno_ssthresh' function as a 'ssthresh' interface as below codes. --------------------------------------------------- <tcp_westwood.c> ... static struct tcp_congestion_ops tcp_westwood = { .init = tcp_westwood_init, .ssthresh = tcp_reno_ssthresh, .cong_avoid = tcp_reno_cong_avoid, .min_cwnd = tcp_westwood_bw_rttmin, .cwnd_event = tcp_westwood_event, .get_info = tcp_westwood_info, .pkts_acked = tcp_westwood_pkts_acked, .owner = THIS_MODULE, .name = "westwood" }; ---------------------------------------------------- But, Westwood basically sets its ssthresh value based on bandwidth estimation, not by cwnd/2 as Reno does. In this case, Linux-Westwood would call 'tcp_reno_ssthresh' to set its ssthresh value when retransmission timeout expires. I don't know why Westwood uses Reno's ssthresh function. In my opinion, 1) '.ssthresh' interface should be changed from 'tcp_reno_ssthresh' to 'tcp_westwood_bw_rttmin'. Then, '.min_cwnd' interface can be removed. 2) In 'tcp_westwood_event()' function, 2.1) The case of 'CA_EVENT_COMPLETE_CWR' can be removed. (corresponding codes are already executed) 2.2) In the case of 'CA_EVENT_FRTO', 'tp->snd_ssthresh = tcp_westwood_bw_rttmin(sk);' can be removed because '.ssthresh' interface is called before tcp_ca_event(sk, CA_EVENT_FRTO) is called. Thanks, Jaehyun Hwang -- To unsubscribe from this list: send the line "unsubscribe linux-net" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html