SNMPv2 tcpOutSegs counter error
Subsystems (3)
I used tcb->end_seq instead of tcb->seq. And add a new condition 'tcb- seq == tcb->end_seq' to make ACK segment to be counted.
Quoted 10 lines · Herbert Xu
Quoted 9 lines · David Miller
From: Herbert Xu <[email protected]>
Date: Mon, 07 Aug 2006 12:40:34 +1000Quoted 4 lines
The general approach looks sound. I have one esoteric question though. If a retransmitted packet is coalesced with one that is yet to be transmitted (a fairly unlikely scenario, but possible I think), should it count towards OUTSEGS?
Probably the packet should be counted to OUTSEGS if any of it
contains
Quoted 6 lines
Quoted 1 line
new data.
OK, in that case Yongjun please update your patch to test against
tcb->end_seqinstead oftcb->seq.Cheers,
net/ipv4/tcp_output.c +8 -3
@@ -462,7 +462,8 @@ static int tcp_transmit_skb(struct sockif (skb->len != tcp_header_size)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 );if (likely (err <=0 ))
@@ -2151,10 +2152,9 @@ int tcp_connect(struct sock *sk)skb_shinfo (buff)->tso_segs =1 ;skb_shinfo (buff)->tso_size =0 ; buff->csum =0 ; + tp->snd_nxt = tp->write_seq;TCP_SKB_CB (buff)->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. */ TCP_SKB_CB (buff)->when = tcp_time_stamp;
@@ -2164,6 +2164,11 @@ int tcp_connect(struct sock *sk)sk_charge_skb (sk, buff); tp->packets_out +=tcp_skb_pcount (buff);tcp_transmit_skb (sk, buff,1 ,GFP_KERNEL ); +/* change tp->snd_nxt after tcp_transmit_skb() to make this packet to be +* counted to tcpOutSegs +*/ + tp->snd_nxt = tp->write_seq; + tp->pushed_seq = tp->write_seq;TCP_INC_STATS (TCP_MIB_ACTIVEOPENS );/* Timer for repeating the SYN until an answer. */
From: Wei Yongjun <[email protected]>
Date: Mon, 07 Aug 2006 04:45:13 -0400
Quoted 2 lines
I used
tcb->end_seqinstead oftcb->seq. And add a new condition 'tcb- seq ==tcb->end_seq' to make ACK segment to be counted.
...
Quoted 1 line
Signed-off-by Wei Yongjun <[email protected]>
Applied, thanks a lot.