diff options
author | tuexen <tuexen@FreeBSD.org> | 2015-05-29 13:08:43 +0000 |
---|---|---|
committer | tuexen <tuexen@FreeBSD.org> | 2015-05-29 13:08:43 +0000 |
commit | b42d72caa31f46b296680a055df482adebbdf1cf (patch) | |
tree | ce8e2290cef8c271e7a6999ae3ab271de89c6e04 /sys/netinet | |
parent | d21c3896b93d34446f98d0cd35168e5e1d00f8a0 (diff) | |
download | FreeBSD-src-b42d72caa31f46b296680a055df482adebbdf1cf.zip FreeBSD-src-b42d72caa31f46b296680a055df482adebbdf1cf.tar.gz |
MFC r280404:
When an ICMP message is received and the MTU shrinks, only
mark outstanding chunks for retransmissions.
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/sctp_usrreq.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c index e745cc4..442b80b 100644 --- a/sys/netinet/sctp_usrreq.c +++ b/sys/netinet/sctp_usrreq.c @@ -125,21 +125,19 @@ sctp_pathmtu_adjustment(struct sctp_tcb *stcb, uint16_t nxtsz) if (chk->sent < SCTP_DATAGRAM_RESEND) { sctp_flight_size_decrease(chk); sctp_total_flight_decrease(stcb, chk); - } - if (chk->sent != SCTP_DATAGRAM_RESEND) { + chk->sent = SCTP_DATAGRAM_RESEND; sctp_ucount_incr(stcb->asoc.sent_queue_retran_cnt); + chk->rec.data.doing_fast_retransmit = 0; + if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_FLIGHT_LOGGING_ENABLE) { + sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_PMTU, + chk->whoTo->flight_size, + chk->book_size, + (uintptr_t) chk->whoTo, + chk->rec.data.TSN_seq); + } + /* Clear any time so NO RTT is being done */ + chk->do_rtt = 0; } - chk->sent = SCTP_DATAGRAM_RESEND; - chk->rec.data.doing_fast_retransmit = 0; - if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_FLIGHT_LOGGING_ENABLE) { - sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_PMTU, - chk->whoTo->flight_size, - chk->book_size, - (uintptr_t) chk->whoTo, - chk->rec.data.TSN_seq); - } - /* Clear any time so NO RTT is being done */ - chk->do_rtt = 0; } } } |