diff options
author | tuexen <tuexen@9df1edf5-d72c-5b5f-11c0-5f5209eb73f7> | 2011-12-27 12:24:52 +0000 |
---|---|---|
committer | tuexen <tuexen@9df1edf5-d72c-5b5f-11c0-5f5209eb73f7> | 2011-12-27 12:24:52 +0000 |
commit | b7ebbfc1bd4420174e2a11b3b2bfd64281f44032 (patch) | |
tree | ecee607c0e3e8ebcfa87ede8431a92a0f0c070d9 /netinet/sctp_indata.c | |
parent | f840325bb9bca0f8732b3f8179ce54fa594160ab (diff) | |
download | usrsctplib-b7ebbfc1bd4420174e2a11b3b2bfd64281f44032.tar.gz |
Integrate changes from main sources.
git-svn-id: http://sctp-refimpl.googlecode.com/svn/trunk/KERN/usrsctp/usrsctplib@7421 9df1edf5-d72c-5b5f-11c0-5f5209eb73f7
Diffstat (limited to 'netinet/sctp_indata.c')
-rwxr-xr-x | netinet/sctp_indata.c | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/netinet/sctp_indata.c b/netinet/sctp_indata.c index 4a87eb6..5bb7f7c 100755 --- a/netinet/sctp_indata.c +++ b/netinet/sctp_indata.c @@ -34,7 +34,7 @@ #ifdef __FreeBSD__ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/netinet/sctp_indata.c 228653 2011-12-17 19:21:40Z tuexen $"); +__FBSDID("$FreeBSD: head/sys/netinet/sctp_indata.c 228907 2011-12-27 10:16:24Z tuexen $"); #endif #include <netinet/sctp_os.h> @@ -70,7 +70,7 @@ sctp_set_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc) uint32_t sctp_calc_rwnd(struct sctp_tcb *stcb, struct sctp_association *asoc) { - uint32_t calc=0; + uint32_t calc = 0; /* * This is really set wrong with respect to a 1-2-m socket. Since @@ -844,7 +844,7 @@ sctp_queue_data_for_reasm(struct sctp_tcb *stcb, struct sctp_association *asoc, struct sctp_tmit_chunk *chk, int *abort_flag) { struct mbuf *oper; - uint32_t cum_ackp1, last_tsn, prev_tsn, post_tsn; + uint32_t cum_ackp1, prev_tsn, post_tsn; struct sctp_tmit_chunk *at, *prev, *next; prev = next = NULL; @@ -1031,7 +1031,6 @@ sctp_queue_data_for_reasm(struct sctp_tcb *stcb, struct sctp_association *asoc, sctp_free_a_chunk(stcb, chk, SCTP_SO_NOT_LOCKED); return; } else { - last_tsn = at->rec.data.TSN_seq; prev = at; if (TAILQ_NEXT(at, sctp_next) == NULL) { /* @@ -1696,12 +1695,11 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, #ifdef SCTP_MBUF_LOGGING if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_MBUF_LOGGING_ENABLE) { struct mbuf *mat; - mat = dmbuf; - while(mat) { + + for (mat = dmbuf; mat; mat = SCTP_BUF_NEXT(mat)) { if (SCTP_BUF_IS_EXTENDED(mat)) { sctp_log_mb(mat, SCTP_MBUF_ICOPY); } - mat = SCTP_BUF_NEXT(mat); } } #endif @@ -1718,11 +1716,10 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc, * does not hit this to often :-0 */ struct mbuf *lat; + l_len = 0; - lat = dmbuf; - while(lat) { + for (lat = dmbuf; lat; lat = SCTP_BUF_NEXT(lat)) { l_len += SCTP_BUF_LEN(lat); - lat = SCTP_BUF_NEXT(lat); } } if (l_len > the_len) { @@ -1799,14 +1796,10 @@ failed_express_del: if (tsn == (control->sinfo_tsn + 1)) { /* Yep, we can add it on */ int end = 0; - uint32_t cumack; + if (chunk_flags & SCTP_DATA_LAST_FRAG) { end = 1; } - cumack = asoc->cumulative_tsn; - if ((cumack + 1) == tsn) - cumack = tsn; - if (sctp_append_to_readq(stcb->sctp_ep, stcb, control, dmbuf, end, tsn, &stcb->sctp_socket->so_rcv)) { @@ -2155,7 +2148,7 @@ finish_express_del: TAILQ_REMOVE(&asoc->pending_reply_queue, ctl, next); sctp_queue_data_to_stream(stcb, asoc, ctl, abort_flag); if (*abort_flag) { - return(0); + return (0); } } } else { @@ -2171,7 +2164,7 @@ finish_express_del: TAILQ_REMOVE(&asoc->pending_reply_queue, ctl, next); sctp_queue_data_to_stream(stcb, asoc, ctl, abort_flag); if (*abort_flag) { - return(0); + return (0); } } } @@ -2446,7 +2439,7 @@ sctp_sack_check(struct sctp_tcb *stcb, int was_a_gap) (stcb->asoc.data_pkts_seen >= stcb->asoc.sack_freq) /* hit limit of pkts */ ) { - if ((stcb->asoc.sctp_cmt_on_off > 0)&& + if ((stcb->asoc.sctp_cmt_on_off > 0) && (SCTP_BASE_SYSCTL(sctp_cmt_use_dac)) && (stcb->asoc.send_sack == 0) && (stcb->asoc.numduptsns == 0) && @@ -2628,7 +2621,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, if (length - *offset < chk_length) { /* all done, mutulated chunk */ stop_proc = 1; - break; + continue; } if (ch->ch.chunk_type == SCTP_DATA) { if ((size_t)chk_length < sizeof(struct sctp_data_chunk) + 1) { @@ -2684,7 +2677,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, * drop rep space left. */ stop_proc = 1; - break; + continue; } } else { /* not a data chunk in the data region */ @@ -2692,7 +2685,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, case SCTP_INITIATION: case SCTP_INITIATION_ACK: case SCTP_SELECTIVE_ACK: - case SCTP_NR_SELECTIVE_ACK: /* EY */ + case SCTP_NR_SELECTIVE_ACK: case SCTP_HEARTBEAT_REQUEST: case SCTP_HEARTBEAT_ACK: case SCTP_ABORT_ASSOCIATION: @@ -2766,7 +2759,7 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, } /* else skip this bad chunk and * continue... */ break; - }; /* switch of chunk type */ + } /* switch of chunk type */ } *offset += SCTP_SIZE32(chk_length); if ((*offset >= length) || stop_proc) { @@ -2779,10 +2772,9 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length, if (ch == NULL) { *offset = length; stop_proc = 1; - break; - + continue; } - } /* while */ + } if (break_flag) { /* * we need to report rwnd overrun drops. @@ -3577,7 +3569,8 @@ sctp_strike_gap_ack_chunks(struct sctp_tcb *stcb, struct sctp_association *asoc, * this guy had a RTO calculation pending on * it, cancel it */ - if(tp1->whoTo->rto_needed == 0) { + if ((tp1->whoTo != NULL) && + (tp1->whoTo->rto_needed == 0)) { tp1->whoTo->rto_needed = 1; } tp1->do_rtt = 0; @@ -3688,7 +3681,7 @@ static int sctp_fs_audit(struct sctp_association *asoc) { struct sctp_tmit_chunk *chk; - int inflight=0, resend=0, inbetween=0, acked=0, above=0; + int inflight = 0, resend = 0, inbetween = 0, acked = 0, above = 0; int entry_flight, entry_cnt, ret; entry_flight = asoc->total_flight; entry_cnt = asoc->total_flight_count; @@ -3778,7 +3771,7 @@ sctp_express_handle_sack(struct sctp_tcb *stcb, uint32_t cumack, int win_probe_recovery = 0; int win_probe_recovered = 0; int j, done_once = 0; - int rto_ok=1; + int rto_ok = 1; #if defined (CALLBACK_API) struct socket *so; uint32_t inqueue_bytes, sb_free_now; @@ -4357,7 +4350,7 @@ sctp_handle_sack(struct mbuf *m, int offset_seg, int offset_dup, int win_probe_recovered = 0; struct sctp_nets *net = NULL; int done_once; - int rto_ok=1; + int rto_ok = 1; uint8_t reneged_all = 0; uint8_t cmt_dac_flag; #if defined (CALLBACK_API) |