net: tcp: split ack slow/fast events from cwnd_event
The congestion control ops "cwnd_event" currently supports CA_EVENT_FAST_ACK and CA_EVENT_SLOW_ACK events (among others). Both FAST and SLOW_ACK are only used by Westwood congestion control algorithm. This removes both flags from cwnd_event and adds a new in_ack_event callback for this. The goal is to be able to provide more detailed information about ACKs, such as whether ECE flag was set, or whether the ACK resulted in a window update. It is required for DataCenter TCP (DCTCP) congestion control algorithm as it makes a different choice depending on ECE being set or not. 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>
This commit is contained in:

committed by
David S. Miller

parent
30e502a34b
commit
7354c8c389
@@ -763,8 +763,10 @@ enum tcp_ca_event {
|
||||
CA_EVENT_CWND_RESTART, /* congestion window restart */
|
||||
CA_EVENT_COMPLETE_CWR, /* end of congestion recovery */
|
||||
CA_EVENT_LOSS, /* loss timeout */
|
||||
CA_EVENT_FAST_ACK, /* in sequence ack */
|
||||
CA_EVENT_SLOW_ACK, /* other ack */
|
||||
};
|
||||
|
||||
enum tcp_ca_ack_event_flags {
|
||||
CA_ACK_SLOWPATH = (1 << 0),
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -796,6 +798,8 @@ struct tcp_congestion_ops {
|
||||
void (*set_state)(struct sock *sk, u8 new_state);
|
||||
/* call when cwnd event occurs (optional) */
|
||||
void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
|
||||
/* call when ack arrives (optional) */
|
||||
void (*in_ack_event)(struct sock *sk, u32 flags);
|
||||
/* new value of cwnd after loss (optional) */
|
||||
u32 (*undo_cwnd)(struct sock *sk);
|
||||
/* hook for packet ack accounting (optional) */
|
||||
|
Reference in New Issue
Block a user