Lines Matching refs:chunk

218 	struct sctp_chunk *chunk, *tmp;  in __sctp_outq_teardown()  local
224 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
227 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
228 sctp_chunk_free(chunk); in __sctp_outq_teardown()
235 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
237 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
238 sctp_chunk_free(chunk); in __sctp_outq_teardown()
244 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
246 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
247 sctp_chunk_free(chunk); in __sctp_outq_teardown()
253 chunk = list_entry(lchunk, struct sctp_chunk, in __sctp_outq_teardown()
255 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
256 sctp_chunk_free(chunk); in __sctp_outq_teardown()
260 while ((chunk = sctp_outq_dequeue_data(q)) != NULL) { in __sctp_outq_teardown()
263 sctp_chunk_fail(chunk, q->error); in __sctp_outq_teardown()
264 sctp_chunk_free(chunk); in __sctp_outq_teardown()
268 list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) { in __sctp_outq_teardown()
269 list_del_init(&chunk->list); in __sctp_outq_teardown()
270 sctp_chunk_free(chunk); in __sctp_outq_teardown()
288 int sctp_outq_tail(struct sctp_outq *q, struct sctp_chunk *chunk) in sctp_outq_tail() argument
293 pr_debug("%s: outq:%p, chunk:%p[%s]\n", __func__, q, chunk, in sctp_outq_tail()
294 chunk && chunk->chunk_hdr ? in sctp_outq_tail()
295 sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : in sctp_outq_tail()
301 if (sctp_chunk_is_data(chunk)) { in sctp_outq_tail()
323 __func__, q, chunk, chunk && chunk->chunk_hdr ? in sctp_outq_tail()
324 sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : in sctp_outq_tail()
327 sctp_outq_tail_data(q, chunk); in sctp_outq_tail()
328 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) in sctp_outq_tail()
335 list_add_tail(&chunk->list, &q->control_chunk_list); in sctp_outq_tail()
380 struct sctp_chunk *chunk; in sctp_retransmit_mark() local
384 chunk = list_entry(lchunk, struct sctp_chunk, in sctp_retransmit_mark()
388 if (sctp_chunk_abandoned(chunk)) { in sctp_retransmit_mark()
397 if (!chunk->tsn_gap_acked) { in sctp_retransmit_mark()
398 if (chunk->transport) in sctp_retransmit_mark()
399 chunk->transport->flight_size -= in sctp_retransmit_mark()
400 sctp_data_size(chunk); in sctp_retransmit_mark()
401 q->outstanding_bytes -= sctp_data_size(chunk); in sctp_retransmit_mark()
402 q->asoc->peer.rwnd += sctp_data_size(chunk); in sctp_retransmit_mark()
412 (chunk->fast_retransmit == SCTP_NEED_FRTX)) || in sctp_retransmit_mark()
413 (reason != SCTP_RTXR_FAST_RTX && !chunk->tsn_gap_acked)) { in sctp_retransmit_mark()
422 q->asoc->peer.rwnd += sctp_data_size(chunk); in sctp_retransmit_mark()
423 q->outstanding_bytes -= sctp_data_size(chunk); in sctp_retransmit_mark()
424 if (chunk->transport) in sctp_retransmit_mark()
425 transport->flight_size -= sctp_data_size(chunk); in sctp_retransmit_mark()
432 chunk->tsn_missing_report = 0; in sctp_retransmit_mark()
440 if (chunk->rtt_in_progress) { in sctp_retransmit_mark()
441 chunk->rtt_in_progress = 0; in sctp_retransmit_mark()
445 chunk->resent = 1; in sctp_retransmit_mark()
532 struct sctp_chunk *chunk, *chunk1; in sctp_outq_flush_rtx() local
564 list_for_each_entry_safe(chunk, chunk1, lqueue, transmitted_list) { in sctp_outq_flush_rtx()
566 if (sctp_chunk_abandoned(chunk)) { in sctp_outq_flush_rtx()
567 list_del_init(&chunk->transmitted_list); in sctp_outq_flush_rtx()
569 &chunk->transmitted_list); in sctp_outq_flush_rtx()
578 if (chunk->tsn_gap_acked) { in sctp_outq_flush_rtx()
579 list_move_tail(&chunk->transmitted_list, in sctp_outq_flush_rtx()
587 if (fast_rtx && !chunk->fast_retransmit) in sctp_outq_flush_rtx()
592 status = sctp_packet_append_chunk(pkt, chunk); in sctp_outq_flush_rtx()
644 list_move_tail(&chunk->transmitted_list, in sctp_outq_flush_rtx()
650 if (chunk->fast_retransmit == SCTP_NEED_FRTX) in sctp_outq_flush_rtx()
651 chunk->fast_retransmit = SCTP_DONT_FRTX; in sctp_outq_flush_rtx()
715 struct sctp_chunk *chunk, *tmp; in sctp_outq_flush() local
738 list_for_each_entry_safe(chunk, tmp, &q->control_chunk_list, list) { in sctp_outq_flush()
746 chunk->chunk_hdr->type != SCTP_CID_ASCONF) in sctp_outq_flush()
749 list_del_init(&chunk->list); in sctp_outq_flush()
752 new_transport = chunk->transport; in sctp_outq_flush()
766 sctp_cmp_addr_exact(&chunk->dest, in sctp_outq_flush()
771 &chunk->dest); in sctp_outq_flush()
794 if (chunk->chunk_hdr->type != SCTP_CID_HEARTBEAT && in sctp_outq_flush()
795 chunk->chunk_hdr->type != SCTP_CID_HEARTBEAT_ACK && in sctp_outq_flush()
796 chunk->chunk_hdr->type != SCTP_CID_ASCONF_ACK) in sctp_outq_flush()
814 switch (chunk->chunk_hdr->type) { in sctp_outq_flush()
826 sctp_packet_append_chunk(&singleton, chunk); in sctp_outq_flush()
833 if (sctp_test_T_bit(chunk)) { in sctp_outq_flush()
857 status = sctp_packet_transmit_chunk(packet, chunk, in sctp_outq_flush()
861 list_add(&chunk->list, &q->control_chunk_list); in sctp_outq_flush()
868 if (chunk->chunk_hdr->type == SCTP_CID_FWD_TSN) in sctp_outq_flush()
951 while ((chunk = sctp_outq_dequeue_data(q)) != NULL) { in sctp_outq_flush()
955 if (chunk->sinfo.sinfo_stream >= in sctp_outq_flush()
959 sctp_chunk_fail(chunk, SCTP_ERROR_INV_STRM); in sctp_outq_flush()
960 sctp_chunk_free(chunk); in sctp_outq_flush()
965 if (sctp_chunk_abandoned(chunk)) { in sctp_outq_flush()
966 sctp_chunk_fail(chunk, 0); in sctp_outq_flush()
967 sctp_chunk_free(chunk); in sctp_outq_flush()
974 new_transport = chunk->transport; in sctp_outq_flush()
1006 __func__, q, chunk, chunk && chunk->chunk_hdr ? in sctp_outq_flush()
1007 sctp_cname(SCTP_ST_CHUNK(chunk->chunk_hdr->type)) : in sctp_outq_flush()
1008 "illegal chunk", ntohl(chunk->subh.data_hdr->tsn), in sctp_outq_flush()
1009 chunk->skb ? chunk->skb->head : NULL, chunk->skb ? in sctp_outq_flush()
1010 atomic_read(&chunk->skb->users) : -1); in sctp_outq_flush()
1013 status = sctp_packet_transmit_chunk(packet, chunk, 0); in sctp_outq_flush()
1023 __func__, ntohl(chunk->subh.data_hdr->tsn), in sctp_outq_flush()
1026 sctp_outq_head_data(q, chunk); in sctp_outq_flush()
1035 chunk->chunk_hdr->flags |= SCTP_DATA_SACK_IMM; in sctp_outq_flush()
1036 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) in sctp_outq_flush()
1057 list_add_tail(&chunk->transmitted_list, in sctp_outq_flush()
1123 int sctp_outq_sack(struct sctp_outq *q, struct sctp_chunk *chunk) in sctp_outq_sack() argument
1126 struct sctp_sackhdr *sack = chunk->subh.sack_hdr; in sctp_outq_sack()
1205 transport, &chunk->source, sack, in sctp_outq_sack()
1578 struct sctp_chunk *chunk; in sctp_mark_missing() local
1584 list_for_each_entry(chunk, transmitted_queue, transmitted_list) { in sctp_mark_missing()
1586 tsn = ntohl(chunk->subh.data_hdr->tsn); in sctp_mark_missing()
1595 if (chunk->fast_retransmit == SCTP_CAN_FRTX && in sctp_mark_missing()
1596 !chunk->tsn_gap_acked && in sctp_mark_missing()
1603 chunk->transport, in sctp_mark_missing()
1605 chunk->tsn_missing_report++; in sctp_mark_missing()
1608 __func__, tsn, chunk->tsn_missing_report); in sctp_mark_missing()
1618 if (chunk->tsn_missing_report >= 3) { in sctp_mark_missing()
1619 chunk->fast_retransmit = SCTP_NEED_FRTX; in sctp_mark_missing()
1692 struct sctp_chunk *chunk; in sctp_generate_fwdtsn() local
1729 chunk = list_entry(lchunk, struct sctp_chunk, in sctp_generate_fwdtsn()
1731 tsn = ntohl(chunk->subh.data_hdr->tsn); in sctp_generate_fwdtsn()
1738 sctp_chunk_free(chunk); in sctp_generate_fwdtsn()
1742 if (chunk->chunk_hdr->flags & in sctp_generate_fwdtsn()
1747 chunk->subh.data_hdr->stream); in sctp_generate_fwdtsn()
1749 chunk->subh.data_hdr->stream; in sctp_generate_fwdtsn()
1751 chunk->subh.data_hdr->ssn; in sctp_generate_fwdtsn()