diff options
author | Wei Wang <weiwan@google.com> | 2018-07-31 20:46:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-08-01 12:56:10 -0400 |
commit | ba113c3aa79a7f941ac162d05a3620bdc985c58d (patch) | |
tree | 6ac064d13a2920d19c52998bb91e138916fccae3 /net/ipv4/tcp.c | |
parent | 984988aa72188453f8c8a42dcf94bba1c57e73aa (diff) |
tcp: add data bytes sent stats
Introduce a new TCP stat to record the number of bytes sent
(RFC4898 tcpEStatsPerfHCDataOctetsOut) and expose it in both tcp_info
(TCP_INFO) and opt_stats (SOF_TIMESTAMPING_OPT_STATS).
Signed-off-by: Wei Wang <weiwan@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Acked-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r-- | net/ipv4/tcp.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 27bbe6a792b7..873cb9968ff5 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -2594,6 +2594,7 @@ int tcp_disconnect(struct sock *sk, int flags) | |||
2594 | sk->sk_rx_dst = NULL; | 2594 | sk->sk_rx_dst = NULL; |
2595 | tcp_saved_syn_free(tp); | 2595 | tcp_saved_syn_free(tp); |
2596 | tp->compressed_ack = 0; | 2596 | tp->compressed_ack = 0; |
2597 | tp->bytes_sent = 0; | ||
2597 | 2598 | ||
2598 | /* Clean up fastopen related fields */ | 2599 | /* Clean up fastopen related fields */ |
2599 | tcp_free_fastopen_req(tp); | 2600 | tcp_free_fastopen_req(tp); |
@@ -3201,6 +3202,7 @@ void tcp_get_info(struct sock *sk, struct tcp_info *info) | |||
3201 | info->tcpi_delivery_rate = rate64; | 3202 | info->tcpi_delivery_rate = rate64; |
3202 | info->tcpi_delivered = tp->delivered; | 3203 | info->tcpi_delivered = tp->delivered; |
3203 | info->tcpi_delivered_ce = tp->delivered_ce; | 3204 | info->tcpi_delivered_ce = tp->delivered_ce; |
3205 | info->tcpi_bytes_sent = tp->bytes_sent; | ||
3204 | unlock_sock_fast(sk, slow); | 3206 | unlock_sock_fast(sk, slow); |
3205 | } | 3207 | } |
3206 | EXPORT_SYMBOL_GPL(tcp_get_info); | 3208 | EXPORT_SYMBOL_GPL(tcp_get_info); |
@@ -3225,6 +3227,7 @@ static size_t tcp_opt_stats_get_size(void) | |||
3225 | nla_total_size(sizeof(u32)) + /* TCP_NLA_SND_SSTHRESH */ | 3227 | nla_total_size(sizeof(u32)) + /* TCP_NLA_SND_SSTHRESH */ |
3226 | nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED */ | 3228 | nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED */ |
3227 | nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED_CE */ | 3229 | nla_total_size(sizeof(u32)) + /* TCP_NLA_DELIVERED_CE */ |
3230 | nla_total_size_64bit(sizeof(u64)) + /* TCP_NLA_BYTES_SENT */ | ||
3228 | 0; | 3231 | 0; |
3229 | } | 3232 | } |
3230 | 3233 | ||
@@ -3272,6 +3275,9 @@ struct sk_buff *tcp_get_timestamping_opt_stats(const struct sock *sk) | |||
3272 | nla_put_u32(stats, TCP_NLA_SNDQ_SIZE, tp->write_seq - tp->snd_una); | 3275 | nla_put_u32(stats, TCP_NLA_SNDQ_SIZE, tp->write_seq - tp->snd_una); |
3273 | nla_put_u8(stats, TCP_NLA_CA_STATE, inet_csk(sk)->icsk_ca_state); | 3276 | nla_put_u8(stats, TCP_NLA_CA_STATE, inet_csk(sk)->icsk_ca_state); |
3274 | 3277 | ||
3278 | nla_put_u64_64bit(stats, TCP_NLA_BYTES_SENT, tp->bytes_sent, | ||
3279 | TCP_NLA_PAD); | ||
3280 | |||
3275 | return stats; | 3281 | return stats; |
3276 | } | 3282 | } |
3277 | 3283 | ||