Commit bd37a088 authored by Wei Yongjun's avatar Wei Yongjun Committed by David S. Miller

[TCP]: SNMPv2 tcpOutSegs counter error

Do not count retransmitted segments.
Signed-off-by: default avatarWei Yongjun <yjwei@nanjing-fnst.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 69d8c28c
...@@ -466,7 +466,8 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, ...@@ -466,7 +466,8 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
if (skb->len != tcp_header_size) if (skb->len != tcp_header_size)
tcp_event_data_sent(tp, skb, sk); tcp_event_data_sent(tp, skb, sk);
TCP_INC_STATS(TCP_MIB_OUTSEGS); if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq)
TCP_INC_STATS(TCP_MIB_OUTSEGS);
err = icsk->icsk_af_ops->queue_xmit(skb, 0); err = icsk->icsk_af_ops->queue_xmit(skb, 0);
if (likely(err <= 0)) if (likely(err <= 0))
...@@ -2157,10 +2158,9 @@ int tcp_connect(struct sock *sk) ...@@ -2157,10 +2158,9 @@ int tcp_connect(struct sock *sk)
skb_shinfo(buff)->gso_size = 0; skb_shinfo(buff)->gso_size = 0;
skb_shinfo(buff)->gso_type = 0; skb_shinfo(buff)->gso_type = 0;
buff->csum = 0; buff->csum = 0;
tp->snd_nxt = tp->write_seq;
TCP_SKB_CB(buff)->seq = tp->write_seq++; TCP_SKB_CB(buff)->seq = tp->write_seq++;
TCP_SKB_CB(buff)->end_seq = tp->write_seq; TCP_SKB_CB(buff)->end_seq = tp->write_seq;
tp->snd_nxt = tp->write_seq;
tp->pushed_seq = tp->write_seq;
/* Send it off. */ /* Send it off. */
TCP_SKB_CB(buff)->when = tcp_time_stamp; TCP_SKB_CB(buff)->when = tcp_time_stamp;
...@@ -2170,6 +2170,12 @@ int tcp_connect(struct sock *sk) ...@@ -2170,6 +2170,12 @@ int tcp_connect(struct sock *sk)
sk_charge_skb(sk, buff); sk_charge_skb(sk, buff);
tp->packets_out += tcp_skb_pcount(buff); tp->packets_out += tcp_skb_pcount(buff);
tcp_transmit_skb(sk, buff, 1, GFP_KERNEL); tcp_transmit_skb(sk, buff, 1, GFP_KERNEL);
/* We change tp->snd_nxt after the tcp_transmit_skb() call
* in order to make this packet get counted in tcpOutSegs.
*/
tp->snd_nxt = tp->write_seq;
tp->pushed_seq = tp->write_seq;
TCP_INC_STATS(TCP_MIB_ACTIVEOPENS); TCP_INC_STATS(TCP_MIB_ACTIVEOPENS);
/* Timer for repeating the SYN until an answer. */ /* Timer for repeating the SYN until an answer. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment