summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authortuexen <tuexen@FreeBSD.org>2015-05-29 13:08:43 +0000
committertuexen <tuexen@FreeBSD.org>2015-05-29 13:08:43 +0000
commitb42d72caa31f46b296680a055df482adebbdf1cf (patch)
treece8e2290cef8c271e7a6999ae3ab271de89c6e04 /sys/netinet
parentd21c3896b93d34446f98d0cd35168e5e1d00f8a0 (diff)
downloadFreeBSD-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.c24
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;
}
}
}
OpenPOWER on IntegriCloud