diff options
author | Michael Tuexen <tuexen@FreeBSD.org> | 2016-08-06 12:33:15 +0000 |
---|---|---|
committer | Michael Tuexen <tuexen@FreeBSD.org> | 2016-08-06 12:33:15 +0000 |
commit | d1ea5fa9c2e99d46da7d02b83476d77889dd6a55 (patch) | |
tree | b605e79419d885e80fb1ff844184a4c324f9ea01 /sys/netinet/sctputil.c | |
parent | 4fb51b52ef81b70aa0cd778ff1389f8673229527 (diff) | |
download | src-d1ea5fa9c2e99d46da7d02b83476d77889dd6a55.tar.gz src-d1ea5fa9c2e99d46da7d02b83476d77889dd6a55.zip |
Fix various bugs in relation to the I-DATA chunk support
This is joint work with rrs.
MFC after: 3 days
Notes
Notes:
svn path=/head/; revision=303792
Diffstat (limited to 'sys/netinet/sctputil.c')
-rw-r--r-- | sys/netinet/sctputil.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c index 15c2dd18a88e..9cd3bffb9279 100644 --- a/sys/netinet/sctputil.c +++ b/sys/netinet/sctputil.c @@ -1077,7 +1077,6 @@ sctp_init_asoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, asoc->minrto = inp->sctp_ep.sctp_minrto; asoc->maxrto = inp->sctp_ep.sctp_maxrto; - asoc->locked_on_sending = NULL; asoc->stream_locked_on = 0; asoc->ecn_echo_cnt_onq = 0; asoc->stream_locked = 0; @@ -1139,7 +1138,7 @@ sctp_init_asoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, asoc->strmout[i].stream_no = i; asoc->strmout[i].last_msg_incomplete = 0; asoc->strmout[i].state = SCTP_STREAM_OPENING; - asoc->ss_functions.sctp_ss_init_stream(&asoc->strmout[i], NULL); + asoc->ss_functions.sctp_ss_init_stream(stcb, &asoc->strmout[i], NULL); } asoc->ss_functions.sctp_ss_init(stcb, asoc, 0); @@ -3907,7 +3906,6 @@ sctp_report_all_outbound(struct sctp_tcb *stcb, uint16_t error, int holds_lock, /* For each stream */ outs = &asoc->strmout[i]; /* clean up any sends there */ - asoc->locked_on_sending = NULL; TAILQ_FOREACH_SAFE(sp, &outs->outqueue, next, nsp) { asoc->stream_queue_cnt--; TAILQ_REMOVE(&outs->outqueue, sp, next); @@ -4878,6 +4876,9 @@ sctp_release_pr_sctp_chunk(struct sctp_tcb *stcb, struct sctp_tmit_chunk *tp1, stcb->asoc.pr_sctp_cnt++; } chk->rec.data.rcv_flags |= SCTP_DATA_LAST_FRAG; + if (sp->sinfo_flags & SCTP_UNORDERED) { + chk->rec.data.rcv_flags |= SCTP_DATA_UNORDERED; + } if (stcb->asoc.idata_supported == 0) { if ((sp->sinfo_flags & SCTP_UNORDERED) == 0) { strq->next_mid_ordered++; |