mirror of
https://github.com/opnsense/src.git
synced 2026-06-03 13:58:30 -04:00
BUG:Turns out we need to use both bit maps
to calculate the cum-ack (we were not doing it for the NR-Sack case). With this fix NR-sack should now work correctly. MFC after: 1 week
This commit is contained in:
parent
f40645c83d
commit
8dcde5165e
1 changed files with 1 additions and 11 deletions
|
|
@ -2267,7 +2267,6 @@ sctp_slide_mapping_arrays(struct sctp_tcb *stcb)
|
|||
uint8_t val;
|
||||
int slide_from, slide_end, lgap, distance;
|
||||
uint32_t old_cumack, old_base, old_highest, highest_tsn;
|
||||
int type;
|
||||
|
||||
asoc = &stcb->asoc;
|
||||
at = 0;
|
||||
|
|
@ -2279,18 +2278,9 @@ sctp_slide_mapping_arrays(struct sctp_tcb *stcb)
|
|||
* We could probably improve this a small bit by calculating the
|
||||
* offset of the current cum-ack as the starting point.
|
||||
*/
|
||||
if (SCTP_BASE_SYSCTL(sctp_nr_sack_on_off) &&
|
||||
stcb->asoc.peer_supports_nr_sack) {
|
||||
type = SCTP_NR_SELECTIVE_ACK;
|
||||
} else {
|
||||
type = SCTP_SELECTIVE_ACK;
|
||||
}
|
||||
at = 0;
|
||||
for (slide_from = 0; slide_from < stcb->asoc.mapping_array_size; slide_from++) {
|
||||
if (type == SCTP_NR_SELECTIVE_ACK)
|
||||
val = asoc->nr_mapping_array[slide_from];
|
||||
else
|
||||
val = asoc->nr_mapping_array[slide_from] | asoc->mapping_array[slide_from];
|
||||
val = asoc->nr_mapping_array[slide_from] | asoc->mapping_array[slide_from];
|
||||
if (val == 0xff) {
|
||||
at += 8;
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue