aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2014-09-26 16:37:35 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-29 00:13:10 -0400
commit9890092e46b2996bb85f7f973e69424cb5c07bc0 (patch)
tree4cc1000c27918b9fcf63806bb5ae02cee36feeda /net/ipv4/tcp_output.c
parent7354c8c389d18719dd71cc810da70b0921d66694 (diff)
net: tcp: more detailed ACK events and events for CE marked packets
DataCenter TCP (DCTCP) determines cwnd growth based on ECN information and ACK properties, e.g. ACK that updates window is treated differently than DUPACK. Also DCTCP needs information whether ACK was delayed ACK. Furthermore, DCTCP also implements a CE state machine that keeps track of CE markings of incoming packets. Therefore, extend the congestion control framework to provide these event types, so that DCTCP can be properly implemented as a normal congestion algorithm module outside of the core stack. Joint work with Daniel Borkmann and Glenn Judd. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: Glenn Judd <glenn.judd@morganstanley.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 20e73271d75c..124f9e4e4594 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -3130,6 +3130,8 @@ void tcp_send_delayed_ack(struct sock *sk)
3130 int ato = icsk->icsk_ack.ato; 3130 int ato = icsk->icsk_ack.ato;
3131 unsigned long timeout; 3131 unsigned long timeout;
3132 3132
3133 tcp_ca_event(sk, CA_EVENT_DELAYED_ACK);
3134
3133 if (ato > TCP_DELACK_MIN) { 3135 if (ato > TCP_DELACK_MIN) {
3134 const struct tcp_sock *tp = tcp_sk(sk); 3136 const struct tcp_sock *tp = tcp_sk(sk);
3135 int max_ato = HZ / 2; 3137 int max_ato = HZ / 2;
@@ -3186,6 +3188,8 @@ void tcp_send_ack(struct sock *sk)
3186 if (sk->sk_state == TCP_CLOSE) 3188 if (sk->sk_state == TCP_CLOSE)
3187 return; 3189 return;
3188 3190
3191 tcp_ca_event(sk, CA_EVENT_NON_DELAYED_ACK);
3192
3189 /* We are not putting this on the write queue, so 3193 /* We are not putting this on the write queue, so
3190 * tcp_transmit_skb() will set the ownership to this 3194 * tcp_transmit_skb() will set the ownership to this
3191 * sock. 3195 * sock.