tcp: add SYN/data info to TCP_INFO
Add a bit TCPI_OPT_SYN_DATA (32) to the socket option TCP_INFO:tcpi_options. It's set if the data in SYN (sent or received) is acked by SYN-ACK. Server or client application can use this information to check Fast Open success rate. Signed-off-by: Yuchung Cheng <ycheng@google.com> Acked-by: Neal Cardwell <ncardwell@google.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e6e71054cd
commit
6f73601efb
|
@ -191,7 +191,8 @@ struct tcp_sock {
|
|||
u8 do_early_retrans:1,/* Enable RFC5827 early-retransmit */
|
||||
early_retrans_delayed:1, /* Delayed ER timer installed */
|
||||
syn_data:1, /* SYN includes data */
|
||||
syn_fastopen:1; /* SYN includes Fast Open option */
|
||||
syn_fastopen:1, /* SYN includes Fast Open option */
|
||||
syn_data_acked:1;/* data in SYN is acked by SYN-ACK */
|
||||
|
||||
/* RTT measurement */
|
||||
u32 srtt; /* smoothed round trip time << 3 */
|
||||
|
|
|
@ -130,6 +130,7 @@ enum {
|
|||
#define TCPI_OPT_WSCALE 4
|
||||
#define TCPI_OPT_ECN 8 /* ECN was negociated at TCP session init */
|
||||
#define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */
|
||||
#define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */
|
||||
|
||||
enum tcp_ca_state {
|
||||
TCP_CA_Open = 0,
|
||||
|
|
|
@ -2764,6 +2764,8 @@ void tcp_get_info(const struct sock *sk, struct tcp_info *info)
|
|||
info->tcpi_options |= TCPI_OPT_ECN;
|
||||
if (tp->ecn_flags & TCP_ECN_SEEN)
|
||||
info->tcpi_options |= TCPI_OPT_ECN_SEEN;
|
||||
if (tp->syn_data_acked)
|
||||
info->tcpi_options |= TCPI_OPT_SYN_DATA;
|
||||
|
||||
info->tcpi_rto = jiffies_to_usecs(icsk->icsk_rto);
|
||||
info->tcpi_ato = jiffies_to_usecs(icsk->icsk_ack.ato);
|
||||
|
|
|
@ -5646,6 +5646,7 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, struct sk_buff *synack,
|
|||
tcp_rearm_rto(sk);
|
||||
return true;
|
||||
}
|
||||
tp->syn_data_acked = tp->syn_data;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1461,6 +1461,7 @@ static int tcp_v4_conn_req_fastopen(struct sock *sk,
|
|||
skb_set_owner_r(skb, child);
|
||||
__skb_queue_tail(&child->sk_receive_queue, skb);
|
||||
tp->rcv_nxt = TCP_SKB_CB(skb)->end_seq;
|
||||
tp->syn_data_acked = 1;
|
||||
}
|
||||
sk->sk_data_ready(sk, 0);
|
||||
bh_unlock_sock(child);
|
||||
|
|
|
@ -510,6 +510,7 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req,
|
|||
newtp->rx_opt.mss_clamp = req->mss;
|
||||
TCP_ECN_openreq_child(newtp, req);
|
||||
newtp->fastopen_rsk = NULL;
|
||||
newtp->syn_data_acked = 0;
|
||||
|
||||
TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_PASSIVEOPENS);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue