diff options
author | rrs <rrs@FreeBSD.org> | 2009-04-04 11:43:32 +0000 |
---|---|---|
committer | rrs <rrs@FreeBSD.org> | 2009-04-04 11:43:32 +0000 |
commit | f72ef579b2bcf1c9f2abd735735fe92b2f8ada15 (patch) | |
tree | aa1f0e7c08d66758879376d7bd3ed3ff5a7c7bb3 /sys/netinet/sctp_usrreq.c | |
parent | 3503cf99e3ac0111488d2a57341ab1b1088e2436 (diff) | |
download | FreeBSD-src-f72ef579b2bcf1c9f2abd735735fe92b2f8ada15.zip FreeBSD-src-f72ef579b2bcf1c9f2abd735735fe92b2f8ada15.tar.gz |
Many bug fixes (from the IETF hack-fest):
- PR-SCTP had major issues when skipping through a multi-part message.
o Did not look at socket buffer.
o Did not properly handle the reassmebly queue.
o The MARKED segments could interfere and un-skip a chunk causing
a problem with the proper FWD-TSN.
o No FR of FWD-TSN's was being done.
- NR-Sack code was basically disabled. It needed fixes that
never got into the real code.
- CMT code had issues when the two paths were NOT the same b/w. We
found a few small bugs, but also the critcal one here was not
dividing the rwnd amongst the paths.
Obtained from: Michael Tuexen and myself at the IETF hack-fest ;-)
Diffstat (limited to 'sys/netinet/sctp_usrreq.c')
-rw-r--r-- | sys/netinet/sctp_usrreq.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c index b3bfea5..c80cca0 100644 --- a/sys/netinet/sctp_usrreq.c +++ b/sys/netinet/sctp_usrreq.c @@ -126,6 +126,10 @@ sctp_pathmtu_adjustment(struct sctp_inpcb *inp, * since we sent to big of chunk */ chk->flags |= CHUNK_FLAGS_FRAGMENT_OK; + if (chk->sent < SCTP_DATAGRAM_RESEND) { + sctp_flight_size_decrease(chk); + sctp_total_flight_decrease(stcb, chk); + } if (chk->sent != SCTP_DATAGRAM_RESEND) { sctp_ucount_incr(stcb->asoc.sent_queue_retran_cnt); } @@ -140,8 +144,6 @@ sctp_pathmtu_adjustment(struct sctp_inpcb *inp, } /* Clear any time so NO RTT is being done */ chk->do_rtt = 0; - sctp_flight_size_decrease(chk); - sctp_total_flight_decrease(stcb, chk); } } } |