]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC 300981
authorsephe <sephe@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Thu, 23 Jun 2016 08:38:01 +0000 (08:38 +0000)
committersephe <sephe@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Thu, 23 Jun 2016 08:38:01 +0000 (08:38 +0000)
commitc5b36fe0eaa15ea41e013e64f093550348742284
treea366d1ce003df14d08538944ec431daee7eb7ed3
parent4be4b80122909b6aab180bf6b38aae7e645454d6
MFC 300981

    tcp: Don't prematurely drop receiving-only connections

    If the connection was persistent and receiving-only, several (12)
    sporadic device insufficient buffers would cause the connection be
    dropped prematurely:
    Upon ENOBUFS in tcp_output() for an ACK, retransmission timer is
    started.  No one will stop this retransmission timer for receiving-
    only connection, so the retransmission timer promises to expire and
    t_rxtshift is promised to be increased.  And t_rxtshift will not be
    reset to 0, since no RTT measurement will be done for receiving-only
    connection.  If this receiving-only connection lived long enough
    (e.g. >350sec, given the RTO starts from 200ms), and it suffered 12
    sporadic device insufficient buffers, i.e. t_rxtshift >= 12, this
    receiving-only connection would be dropped prematurely by the
    retransmission timer.

    We now assert that for data segments, SYNs or FINs either rexmit or
    persist timer was wired upon ENOBUFS.  And don't set rexmit timer
    for other cases, i.e. ENOBUFS upon ACKs.

    Discussed with:     lstewart, hiren, jtl, Mike Karels
    MFC after:  3 weeks
    Sponsored by:       Microsoft OSTC
    Differential Revision:      https://reviews.freebsd.org/D5872

git-svn-id: svn://svn.freebsd.org/base/stable/10@302132 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/netinet/tcp_output.c