diff options
| author | Randall Stewart <rrs@FreeBSD.org> | 2006-12-14 17:02:55 +0000 |
|---|---|---|
| committer | Randall Stewart <rrs@FreeBSD.org> | 2006-12-14 17:02:55 +0000 |
| commit | a5d547add3475cbba521b738f99e366f187bedf1 (patch) | |
| tree | 940611c208a2462c47614c0688becd97244ad6fe /sys/netinet6 | |
| parent | e0ccd04489940f08680d14c8c443e884542fb4f1 (diff) | |
Notes
Diffstat (limited to 'sys/netinet6')
| -rw-r--r-- | sys/netinet6/sctp6_usrreq.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sys/netinet6/sctp6_usrreq.c b/sys/netinet6/sctp6_usrreq.c index 8f8b62aab299..7bf4aafa235a 100644 --- a/sys/netinet6/sctp6_usrreq.c +++ b/sys/netinet6/sctp6_usrreq.c @@ -241,7 +241,15 @@ sctp_skip_csum: (u_int8_t *) & chunk_buf); sh->v_tag = init_chk->init.initiate_tag; } - sctp_send_abort(m, iphlen, sh, 0, NULL); + if (ch->chunk_type == SCTP_SHUTDOWN_ACK) { + sctp_send_shutdown_complete2(m, iphlen, sh); + goto bad; + } + if (ch->chunk_type == SCTP_SHUTDOWN_COMPLETE) { + goto bad; + } + if (ch->chunk_type != SCTP_ABORT_ASSOCIATION) + sctp_send_abort(m, iphlen, sh, 0, NULL); goto bad; } else if (stcb == NULL) { refcount_up = 1; @@ -326,7 +334,7 @@ sctp6_notify_mbuf(struct sctp_inpcb *inp, */ nxtsz = ntohl(icmp6->icmp6_mtu); /* Stop any PMTU timer */ - sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, NULL); + sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, NULL, SCTP_FROM_SCTP6_USRREQ + SCTP_LOC_1); /* Adjust destination size limit */ if (net->mtu > nxtsz) { @@ -822,7 +830,8 @@ sctp6_disconnect(struct socket *so) (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_SHUTDOWN_RECEIVED)) { SCTP_STAT_DECR_GAUGE32(sctps_currestab); } - sctp_free_assoc(inp, stcb, 0); + sctp_free_assoc(inp, stcb, SCTP_DONOT_SETSCOPE, + SCTP_FROM_SCTP6_USRREQ + SCTP_LOC_2); /* No unlock tcb assoc is gone */ splx(s); return (0); |
