More PR-SCTP bugs:
- Make sure that when you kick the streams you add correctly using a 16 bit unsigned. - Make sure when sending out you allow FWD-TSN to skip over and list the ACKED chunks in the stream/seq list (so the rcv will kick the stream) MFC after: 3 days
This commit is contained in:
parent
7cd75bfd82
commit
83128708b4
@ -3750,7 +3750,8 @@ sctp_try_advance_peer_ack_point(struct sctp_tcb *stcb,
|
|||||||
* the chunk, advance our peer ack point and we can check
|
* the chunk, advance our peer ack point and we can check
|
||||||
* the next chunk.
|
* the next chunk.
|
||||||
*/
|
*/
|
||||||
if (tp1->sent == SCTP_FORWARD_TSN_SKIP) {
|
if ((tp1->sent == SCTP_FORWARD_TSN_SKIP) ||
|
||||||
|
(tp1->sent == SCTP_DATAGRAM_ACKED)) {
|
||||||
/* advance PeerAckPoint goes forward */
|
/* advance PeerAckPoint goes forward */
|
||||||
if (compare_with_wrap(tp1->rec.data.TSN_seq,
|
if (compare_with_wrap(tp1->rec.data.TSN_seq,
|
||||||
asoc->advanced_peer_ack_point,
|
asoc->advanced_peer_ack_point,
|
||||||
@ -5351,7 +5352,7 @@ sctp_kick_prsctp_reorder_queue(struct sctp_tcb *stcb,
|
|||||||
{
|
{
|
||||||
struct sctp_queued_to_read *ctl, *nctl;
|
struct sctp_queued_to_read *ctl, *nctl;
|
||||||
struct sctp_association *asoc;
|
struct sctp_association *asoc;
|
||||||
int tt;
|
uint16_t tt;
|
||||||
|
|
||||||
asoc = &stcb->asoc;
|
asoc = &stcb->asoc;
|
||||||
tt = strmin->last_sequence_delivered;
|
tt = strmin->last_sequence_delivered;
|
||||||
|
@ -9707,7 +9707,6 @@ send_forward_tsn(struct sctp_tcb *stcb,
|
|||||||
chk->rec.chunk_id.can_take_data = 0;
|
chk->rec.chunk_id.can_take_data = 0;
|
||||||
chk->asoc = asoc;
|
chk->asoc = asoc;
|
||||||
chk->whoTo = NULL;
|
chk->whoTo = NULL;
|
||||||
|
|
||||||
chk->data = sctp_get_mbuf_for_msg(MCLBYTES, 0, M_DONTWAIT, 1, MT_DATA);
|
chk->data = sctp_get_mbuf_for_msg(MCLBYTES, 0, M_DONTWAIT, 1, MT_DATA);
|
||||||
if (chk->data == NULL) {
|
if (chk->data == NULL) {
|
||||||
sctp_free_a_chunk(stcb, chk);
|
sctp_free_a_chunk(stcb, chk);
|
||||||
@ -9734,7 +9733,8 @@ send_forward_tsn(struct sctp_tcb *stcb,
|
|||||||
unsigned int cnt_of_skipped = 0;
|
unsigned int cnt_of_skipped = 0;
|
||||||
|
|
||||||
TAILQ_FOREACH(at, &asoc->sent_queue, sctp_next) {
|
TAILQ_FOREACH(at, &asoc->sent_queue, sctp_next) {
|
||||||
if (at->sent != SCTP_FORWARD_TSN_SKIP) {
|
if ((at->sent != SCTP_FORWARD_TSN_SKIP) &&
|
||||||
|
(at->sent != SCTP_DATAGRAM_ACKED)) {
|
||||||
/* no more to look at */
|
/* no more to look at */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user