blog_20161016_1_2211698 28行 Text
Raw
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
static void tcp_cong_control(struct sock *sk, u32 ack, u32 acked_sacked,
int flag, const struct rate_sample *rs)
{
const struct inet_connection_sock *icsk = inet_csk(sk);

if (icsk->icsk_ca_ops->cong_control) {
// 如果是bbr,则完全被bbr接管,不管现在处在什么状态!
/* 目前而言,只有bbr使用了这个机制,但我相信,不久的将来,
* 会有越来越多的拥塞控制算法使用这个统一的完全接管机制!
* 就我个人而言,在几个月前就写过一个patch,接管了tcp_cwnd_reduction
* 这个prr的降窗过程。如果当时有了这个框架,我就有福了!
*/
icsk->icsk_ca_ops->cong_control(sk, rs);
return;
}
// 否则继续以往的错误方法!
if (tcp_in_cwnd_reduction(sk)) {

/* Reduce cwnd if state mandates */

// 非Open状态中拥塞算法不受理窗口调整
tcp_cwnd_reduction(sk, acked_sacked, flag);
} else if (tcp_may_raise_cwnd(sk, flag)) {
/* Advance cwnd if state allows */
tcp_cong_avoid(sk, ack, acked_sacked);
}
tcp_update_pacing_rate(sk);
}