Store segment transmit count.
This will aid in segment reordering detection. Updates #691 PiperOrigin-RevId: 301692638
This commit is contained in:
parent
b5ea65c07c
commit
92a00ca91a
|
@ -56,9 +56,9 @@ type segment struct {
|
|||
options []byte `state:".([]byte)"`
|
||||
hasNewSACKInfo bool
|
||||
rcvdTime time.Time `state:".(unixTime)"`
|
||||
// xmitTime is the last transmit time of this segment. A zero value
|
||||
// indicates that the segment has yet to be transmitted.
|
||||
xmitTime time.Time `state:".(unixTime)"`
|
||||
// xmitTime is the last transmit time of this segment.
|
||||
xmitTime time.Time `state:".(unixTime)"`
|
||||
xmitCount uint32
|
||||
}
|
||||
|
||||
func newSegment(r *stack.Route, id stack.TransportEndpointID, pkt tcpip.PacketBuffer) *segment {
|
||||
|
|
|
@ -1229,7 +1229,7 @@ func (s *sender) handleRcvdSegment(seg *segment) {
|
|||
|
||||
// sendSegment sends the specified segment.
|
||||
func (s *sender) sendSegment(seg *segment) *tcpip.Error {
|
||||
if !seg.xmitTime.IsZero() {
|
||||
if seg.xmitCount > 0 {
|
||||
s.ep.stack.Stats().TCP.Retransmits.Increment()
|
||||
s.ep.stats.SendErrors.Retransmits.Increment()
|
||||
if s.sndCwnd < s.sndSsthresh {
|
||||
|
@ -1237,6 +1237,7 @@ func (s *sender) sendSegment(seg *segment) *tcpip.Error {
|
|||
}
|
||||
}
|
||||
seg.xmitTime = time.Now()
|
||||
seg.xmitCount++
|
||||
return s.sendSegmentFromView(seg.data, seg.flags, seg.sequenceNumber)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue