summaryrefslogtreecommitdiffstats
path: root/sys/netinet/sctputil.c
diff options
context:
space:
mode:
authorrrs <rrs@FreeBSD.org>2007-03-20 10:23:11 +0000
committerrrs <rrs@FreeBSD.org>2007-03-20 10:23:11 +0000
commiteecb0a8aa72ff92a9cc4881892c8fa117737ad7f (patch)
treec1ac41de5e74c6da148fd963903611df770236c1 /sys/netinet/sctputil.c
parente588f34e9ccbae45abec18203973bfaeb542187d (diff)
downloadFreeBSD-src-eecb0a8aa72ff92a9cc4881892c8fa117737ad7f.zip
FreeBSD-src-eecb0a8aa72ff92a9cc4881892c8fa117737ad7f.tar.gz
- window update sacks sent incorrectly after
shutdown which caused extra abort from peer. - RTT time calculation was not being done in express sack handling since it refered to an unused variable (rto_pending). Removed variable. - socket buffer high water access macro-ized.
Diffstat (limited to 'sys/netinet/sctputil.c')
-rw-r--r--sys/netinet/sctputil.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c
index ea7a830..aa84b98 100644
--- a/sys/netinet/sctputil.c
+++ b/sys/netinet/sctputil.c
@@ -1024,8 +1024,8 @@ sctp_init_asoc(struct sctp_inpcb *m, struct sctp_association *asoc,
asoc->ipv6_addr_legal = 0;
}
- asoc->my_rwnd = max(m->sctp_socket->so_rcv.sb_hiwat, SCTP_MINIMAL_RWND);
- asoc->peers_rwnd = m->sctp_socket->so_rcv.sb_hiwat;
+ asoc->my_rwnd = max(SCTP_SB_LIMIT_RCV(m->sctp_socket), SCTP_MINIMAL_RWND);
+ asoc->peers_rwnd = SCTP_SB_LIMIT_RCV(m->sctp_socket);
asoc->smallest_mtu = m->sctp_frag_point;
asoc->minrto = m->sctp_ep.sctp_minrto;
@@ -4354,7 +4354,10 @@ sctp_user_rcvd(struct sctp_tcb *stcb, int *freed_so_far, int hold_rlock,
atomic_add_int(&stcb->asoc.refcnt, 1);
- if (stcb->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) {
+ if (stcb->asoc.state & (SCTP_STATE_ABOUT_TO_BE_FREED |
+ SCTP_STATE_SHUTDOWN_RECEIVED |
+ SCTP_STATE_SHUTDOWN_ACK_SENT)
+ ) {
/* Pre-check If we are freeing no update */
goto no_lock;
}
@@ -4504,7 +4507,7 @@ sctp_sorecvmsg(struct socket *so,
if (inp == NULL) {
return (EFAULT);
}
- rwnd_req = (so->so_rcv.sb_hiwat >> SCTP_RWND_HIWAT_SHIFT);
+ rwnd_req = (SCTP_SB_LIMIT_RCV(so) >> SCTP_RWND_HIWAT_SHIFT);
/* Must be at least a MTU's worth */
if (rwnd_req < SCTP_MIN_RWND)
rwnd_req = SCTP_MIN_RWND;
OpenPOWER on IntegriCloud