diff options
author | Randall Stewart <rrs@FreeBSD.org> | 2007-04-22 11:06:27 +0000 |
---|---|---|
committer | Randall Stewart <rrs@FreeBSD.org> | 2007-04-22 11:06:27 +0000 |
commit | 9a6142d8cdaf65e334a5d31e32634c7a206fbcf7 (patch) | |
tree | cdfe74b46c1b17927d990e112c62556cf444c46e /sys/netinet/sctp_indata.c | |
parent | 7621783a55615854f7f3ac6c1f39772bd68e17a6 (diff) | |
download | src-9a6142d8cdaf65e334a5d31e32634c7a206fbcf7.tar.gz src-9a6142d8cdaf65e334a5d31e32634c7a206fbcf7.zip |
- Somehow the disable fragment option got lost. We could
set/clear it but would not do it. Now we will.
- Moved to latest socket api for extended sndrcv info struct.
- Moved to support all new levels of fragment interleave.
Notes
Notes:
svn path=/head/; revision=168943
Diffstat (limited to 'sys/netinet/sctp_indata.c')
-rw-r--r-- | sys/netinet/sctp_indata.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sys/netinet/sctp_indata.c b/sys/netinet/sctp_indata.c index 81d678063d1e..2010d2a9457f 100644 --- a/sys/netinet/sctp_indata.c +++ b/sys/netinet/sctp_indata.c @@ -211,6 +211,7 @@ sctp_build_readq_entry(struct sctp_tcb *stcb, read_queue_e->port_from = stcb->rport; read_queue_e->do_not_ref_stcb = 0; read_queue_e->end_added = 0; + read_queue_e->some_taken = 0; read_queue_e->pdapi_aborted = 0; failed_build: return (read_queue_e); @@ -249,6 +250,7 @@ sctp_build_readq_entry_chk(struct sctp_tcb *stcb, read_queue_e->spec_flags = 0; read_queue_e->do_not_ref_stcb = 0; read_queue_e->end_added = 0; + read_queue_e->some_taken = 0; read_queue_e->pdapi_aborted = 0; failed_build: return (read_queue_e); @@ -5810,6 +5812,8 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, */ if ((asoc->fragmented_delivery_inprogress) && (chk->rec.data.rcv_flags & SCTP_DATA_FIRST_FRAG)) { + uint32_t str_seq; + /* * Special case PD-API is up and * what we fwd-tsn' over includes @@ -5817,8 +5821,10 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, * longer need to do the PD-API. */ asoc->fragmented_delivery_inprogress = 0; + + str_seq = (asoc->str_of_pdapi << 16) | asoc->ssn_of_pdapi; sctp_ulp_notify(SCTP_NOTIFY_PARTIAL_DELVIERY_INDICATION, - stcb, SCTP_PARTIAL_DELIVERY_ABORTED, (void *)NULL); + stcb, SCTP_PARTIAL_DELIVERY_ABORTED, (void *)&str_seq); } break; @@ -5831,8 +5837,11 @@ sctp_handle_forward_tsn(struct sctp_tcb *stcb, * Ok we removed cnt_gone chunks in the PD-API queue that * were being delivered. So now we must turn off the flag. */ + uint32_t str_seq; + + str_seq = (asoc->str_of_pdapi << 16) | asoc->ssn_of_pdapi; sctp_ulp_notify(SCTP_NOTIFY_PARTIAL_DELVIERY_INDICATION, - stcb, SCTP_PARTIAL_DELIVERY_ABORTED, (void *)NULL); + stcb, SCTP_PARTIAL_DELIVERY_ABORTED, (void *)&str_seq); asoc->fragmented_delivery_inprogress = 0; } /*************************************************************/ |