summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/netinet/sctp_indata.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/sys/netinet/sctp_indata.c b/sys/netinet/sctp_indata.c
index 53dcf8f..a7e6c08 100644
--- a/sys/netinet/sctp_indata.c
+++ b/sys/netinet/sctp_indata.c
@@ -1466,7 +1466,7 @@ sctp_process_a_data_chunk(struct sctp_tcb *stcb, struct sctp_association *asoc,
asoc->send_sack = 1;
}
protocol_id = ch->dp.protocol_id;
- ordered = ((ch->ch.chunk_flags & SCTP_DATA_UNORDERED) == 0);
+ ordered = ((chunk_flags & SCTP_DATA_UNORDERED) == 0);
if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_MAP_LOGGING_ENABLE) {
sctp_log_map(tsn, asoc->cumulative_tsn, asoc->highest_tsn_inside_map, SCTP_MAP_TSN_ENTERS);
}
@@ -2300,7 +2300,12 @@ sctp_slide_mapping_arrays(struct sctp_tcb *stcb)
if ((asoc->cumulative_tsn == highest_tsn) && (at >= 8)) {
/* The complete array was completed by a single FR */
/* highest becomes the cum-ack */
- int clr, i;
+ int clr;
+
+#ifdef INVARIANTS
+ unsigned int i;
+
+#endif
/* clear the array */
clr = ((at + 7) >> 3);
@@ -2309,12 +2314,14 @@ sctp_slide_mapping_arrays(struct sctp_tcb *stcb)
}
memset(asoc->mapping_array, 0, clr);
memset(asoc->nr_mapping_array, 0, clr);
+#ifdef INVARIANTS
for (i = 0; i < asoc->mapping_array_size; i++) {
if ((asoc->mapping_array[i]) || (asoc->nr_mapping_array[i])) {
printf("Error Mapping array's not clean at clear\n");
sctp_print_mapping_array(asoc);
}
}
+#endif
asoc->mapping_array_base_tsn = asoc->cumulative_tsn + 1;
asoc->highest_tsn_inside_nr_map = asoc->highest_tsn_inside_map = asoc->cumulative_tsn;
} else if (at >= 8) {
@@ -2371,10 +2378,8 @@ sctp_slide_mapping_arrays(struct sctp_tcb *stcb)
int ii;
for (ii = 0; ii < distance; ii++) {
- asoc->mapping_array[ii] =
- asoc->mapping_array[slide_from + ii];
- asoc->nr_mapping_array[ii] =
- asoc->nr_mapping_array[slide_from + ii];
+ asoc->mapping_array[ii] = asoc->mapping_array[slide_from + ii];
+ asoc->nr_mapping_array[ii] = asoc->nr_mapping_array[slide_from + ii];
}
for (ii = distance; ii < asoc->mapping_array_size; ii++) {
@@ -2808,8 +2813,8 @@ sctp_process_data(struct mbuf **mm, int iphlen, int *offset, int length,
stcb->asoc.send_sack = 1;
}
/* Start a sack timer or QUEUE a SACK for sending */
- if ((stcb->asoc.cumulative_tsn == stcb->asoc.highest_tsn_inside_map) &&
- (stcb->asoc.mapping_array[0] != 0xff)) {
+ if ((stcb->asoc.cumulative_tsn == stcb->asoc.highest_tsn_inside_nr_map) &&
+ (stcb->asoc.nr_mapping_array[0] != 0xff)) {
if ((stcb->asoc.data_pkts_seen >= stcb->asoc.sack_freq) ||
(stcb->asoc.delayed_ack == 0) ||
(stcb->asoc.numduptsns) ||
OpenPOWER on IntegriCloud