Lines Matching refs:asoc
27 struct sctp_association *asoc; in sctp_stream_shrink_out() local
31 asoc = container_of(stream, struct sctp_association, stream); in sctp_stream_shrink_out()
32 outq = &asoc->outqueue; in sctp_stream_shrink_out()
47 if (asoc->peer.prsctp_capable && in sctp_stream_shrink_out()
49 asoc->sent_cnt_removable--; in sctp_stream_shrink_out()
231 static int sctp_send_reconf(struct sctp_association *asoc, in sctp_send_reconf() argument
236 retval = sctp_primitive_RECONF(asoc->base.net, asoc, chunk); in sctp_send_reconf()
246 struct sctp_association *asoc; in sctp_stream_outq_is_empty() local
249 asoc = container_of(stream, struct sctp_association, stream); in sctp_stream_outq_is_empty()
250 if (!asoc->outqueue.out_qlen) in sctp_stream_outq_is_empty()
267 int sctp_send_reset_streams(struct sctp_association *asoc, in sctp_send_reset_streams() argument
270 struct sctp_stream *stream = &asoc->stream; in sctp_send_reset_streams()
277 if (!asoc->peer.reconf_capable || in sctp_send_reset_streams()
278 !(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) { in sctp_send_reset_streams()
283 if (asoc->strreset_outstanding) { in sctp_send_reset_streams()
336 chunk = sctp_make_strreset_req(asoc, str_nums, nstr_list, out, in); in sctp_send_reset_streams()
355 asoc->strreset_chunk = chunk; in sctp_send_reset_streams()
356 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_reset_streams()
358 retval = sctp_send_reconf(asoc, chunk); in sctp_send_reset_streams()
360 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_reset_streams()
361 asoc->strreset_chunk = NULL; in sctp_send_reset_streams()
376 asoc->strreset_outstanding = out + in; in sctp_send_reset_streams()
382 int sctp_send_reset_assoc(struct sctp_association *asoc) in sctp_send_reset_assoc() argument
384 struct sctp_stream *stream = &asoc->stream; in sctp_send_reset_assoc()
389 if (!asoc->peer.reconf_capable || in sctp_send_reset_assoc()
390 !(asoc->strreset_enable & SCTP_ENABLE_RESET_ASSOC_REQ)) in sctp_send_reset_assoc()
393 if (asoc->strreset_outstanding) in sctp_send_reset_assoc()
396 if (!sctp_outq_is_empty(&asoc->outqueue)) in sctp_send_reset_assoc()
399 chunk = sctp_make_strreset_tsnreq(asoc); in sctp_send_reset_assoc()
407 asoc->strreset_chunk = chunk; in sctp_send_reset_assoc()
408 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_reset_assoc()
410 retval = sctp_send_reconf(asoc, chunk); in sctp_send_reset_assoc()
412 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_reset_assoc()
413 asoc->strreset_chunk = NULL; in sctp_send_reset_assoc()
421 asoc->strreset_outstanding = 1; in sctp_send_reset_assoc()
426 int sctp_send_add_streams(struct sctp_association *asoc, in sctp_send_add_streams() argument
429 struct sctp_stream *stream = &asoc->stream; in sctp_send_add_streams()
435 if (!asoc->peer.reconf_capable || in sctp_send_add_streams()
436 !(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) { in sctp_send_add_streams()
441 if (asoc->strreset_outstanding) { in sctp_send_add_streams()
462 chunk = sctp_make_strreset_addstrm(asoc, out, in); in sctp_send_add_streams()
468 asoc->strreset_chunk = chunk; in sctp_send_add_streams()
469 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_add_streams()
471 retval = sctp_send_reconf(asoc, chunk); in sctp_send_add_streams()
473 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_add_streams()
474 asoc->strreset_chunk = NULL; in sctp_send_add_streams()
478 asoc->strreset_outstanding = !!out + !!in; in sctp_send_add_streams()
485 struct sctp_association *asoc, __be32 resp_seq, in sctp_chunk_lookup_strreset_param() argument
488 struct sctp_chunk *chunk = asoc->strreset_chunk; in sctp_chunk_lookup_strreset_param()
511 static void sctp_update_strreset_result(struct sctp_association *asoc, in sctp_update_strreset_result() argument
514 asoc->strreset_result[1] = asoc->strreset_result[0]; in sctp_update_strreset_result()
515 asoc->strreset_result[0] = result; in sctp_update_strreset_result()
519 struct sctp_association *asoc, in sctp_process_strreset_outreq() argument
524 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_outreq()
533 sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map)) { in sctp_process_strreset_outreq()
538 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_outreq()
539 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_outreq()
542 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_outreq()
543 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_outreq()
544 result = asoc->strreset_result[i]; in sctp_process_strreset_outreq()
547 asoc->strreset_inseq++; in sctp_process_strreset_outreq()
553 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) in sctp_process_strreset_outreq()
565 if (asoc->strreset_chunk) { in sctp_process_strreset_outreq()
567 asoc, outreq->response_seq, in sctp_process_strreset_outreq()
574 asoc->strreset_outstanding--; in sctp_process_strreset_outreq()
575 asoc->strreset_outseq++; in sctp_process_strreset_outreq()
577 if (!asoc->strreset_outstanding) { in sctp_process_strreset_outreq()
580 t = asoc->strreset_chunk->transport; in sctp_process_strreset_outreq()
584 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_outreq()
585 asoc->strreset_chunk = NULL; in sctp_process_strreset_outreq()
598 *evp = sctp_ulpevent_make_stream_reset_event(asoc, in sctp_process_strreset_outreq()
602 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_outreq()
604 return sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_outreq()
608 struct sctp_association *asoc, in sctp_process_strreset_inreq() argument
613 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_inreq()
621 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_inreq()
622 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_inreq()
625 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_inreq()
626 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_inreq()
627 result = asoc->strreset_result[i]; in sctp_process_strreset_inreq()
632 asoc->strreset_inseq++; in sctp_process_strreset_inreq()
634 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) in sctp_process_strreset_inreq()
637 if (asoc->strreset_outstanding) { in sctp_process_strreset_inreq()
653 asoc->strreset_inseq--; in sctp_process_strreset_inreq()
657 chunk = sctp_make_strreset_req(asoc, nums, str_p, 1, 0); in sctp_process_strreset_inreq()
669 asoc->strreset_chunk = chunk; in sctp_process_strreset_inreq()
670 asoc->strreset_outstanding = 1; in sctp_process_strreset_inreq()
671 sctp_chunk_hold(asoc->strreset_chunk); in sctp_process_strreset_inreq()
676 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_inreq()
679 chunk = sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_inreq()
685 struct sctp_association *asoc, in sctp_process_strreset_tsnreq() argument
691 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_tsnreq()
697 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_tsnreq()
698 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_tsnreq()
701 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_tsnreq()
702 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_tsnreq()
703 result = asoc->strreset_result[i]; in sctp_process_strreset_tsnreq()
705 next_tsn = asoc->ctsn_ack_point + 1; in sctp_process_strreset_tsnreq()
707 sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + 1; in sctp_process_strreset_tsnreq()
712 if (!sctp_outq_is_empty(&asoc->outqueue)) { in sctp_process_strreset_tsnreq()
717 asoc->strreset_inseq++; in sctp_process_strreset_tsnreq()
719 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_ASSOC_REQ)) in sctp_process_strreset_tsnreq()
722 if (asoc->strreset_outstanding) { in sctp_process_strreset_tsnreq()
732 max_tsn_seen = sctp_tsnmap_get_max_tsn_seen(&asoc->peer.tsn_map); in sctp_process_strreset_tsnreq()
733 asoc->stream.si->report_ftsn(&asoc->ulpq, max_tsn_seen); in sctp_process_strreset_tsnreq()
740 init_tsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + (1 << 31); in sctp_process_strreset_tsnreq()
741 sctp_tsnmap_init(&asoc->peer.tsn_map, SCTP_TSN_MAP_INITIAL, in sctp_process_strreset_tsnreq()
748 sctp_outq_free(&asoc->outqueue); in sctp_process_strreset_tsnreq()
755 next_tsn = asoc->next_tsn; in sctp_process_strreset_tsnreq()
756 asoc->ctsn_ack_point = next_tsn - 1; in sctp_process_strreset_tsnreq()
757 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; in sctp_process_strreset_tsnreq()
771 *evp = sctp_ulpevent_make_assoc_reset_event(asoc, 0, init_tsn, in sctp_process_strreset_tsnreq()
775 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_tsnreq()
777 return sctp_make_strreset_tsnresp(asoc, result, request_seq, in sctp_process_strreset_tsnreq()
782 struct sctp_association *asoc, in sctp_process_strreset_addstrm_out() argument
787 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_addstrm_out()
793 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_addstrm_out()
794 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_addstrm_out()
797 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_addstrm_out()
798 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_addstrm_out()
799 result = asoc->strreset_result[i]; in sctp_process_strreset_addstrm_out()
802 asoc->strreset_inseq++; in sctp_process_strreset_addstrm_out()
804 if (!(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) in sctp_process_strreset_addstrm_out()
815 if (asoc->strreset_chunk) { in sctp_process_strreset_addstrm_out()
817 asoc, 0, SCTP_PARAM_RESET_ADD_IN_STREAMS)) { in sctp_process_strreset_addstrm_out()
823 asoc->strreset_outstanding--; in sctp_process_strreset_addstrm_out()
824 asoc->strreset_outseq++; in sctp_process_strreset_addstrm_out()
826 if (!asoc->strreset_outstanding) { in sctp_process_strreset_addstrm_out()
829 t = asoc->strreset_chunk->transport; in sctp_process_strreset_addstrm_out()
833 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_addstrm_out()
834 asoc->strreset_chunk = NULL; in sctp_process_strreset_addstrm_out()
842 *evp = sctp_ulpevent_make_stream_change_event(asoc, in sctp_process_strreset_addstrm_out()
846 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_addstrm_out()
848 return sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_addstrm_out()
852 struct sctp_association *asoc, in sctp_process_strreset_addstrm_in() argument
857 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_addstrm_in()
865 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_addstrm_in()
866 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_addstrm_in()
869 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_addstrm_in()
870 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_addstrm_in()
871 result = asoc->strreset_result[i]; in sctp_process_strreset_addstrm_in()
876 asoc->strreset_inseq++; in sctp_process_strreset_addstrm_in()
878 if (!(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) in sctp_process_strreset_addstrm_in()
881 if (asoc->strreset_outstanding) { in sctp_process_strreset_addstrm_in()
895 chunk = sctp_make_strreset_addstrm(asoc, out, 0); in sctp_process_strreset_addstrm_in()
899 asoc->strreset_chunk = chunk; in sctp_process_strreset_addstrm_in()
900 asoc->strreset_outstanding = 1; in sctp_process_strreset_addstrm_in()
901 sctp_chunk_hold(asoc->strreset_chunk); in sctp_process_strreset_addstrm_in()
908 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_addstrm_in()
911 chunk = sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_addstrm_in()
917 struct sctp_association *asoc, in sctp_process_strreset_resp() argument
921 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_resp()
928 req = sctp_chunk_lookup_strreset_param(asoc, resp->response_seq, 0); in sctp_process_strreset_resp()
974 *evp = sctp_ulpevent_make_stream_reset_event(asoc, flags, in sctp_process_strreset_resp()
991 *evp = sctp_ulpevent_make_stream_reset_event(asoc, flags, in sctp_process_strreset_resp()
1007 &asoc->peer.tsn_map); in sctp_process_strreset_resp()
1010 asoc->stream.si->report_ftsn(&asoc->ulpq, mtsn); in sctp_process_strreset_resp()
1012 sctp_tsnmap_init(&asoc->peer.tsn_map, in sctp_process_strreset_resp()
1020 list_splice_init(&asoc->outqueue.out_chunk_list, &temp); in sctp_process_strreset_resp()
1021 sctp_outq_free(&asoc->outqueue); in sctp_process_strreset_resp()
1022 list_splice_init(&temp, &asoc->outqueue.out_chunk_list); in sctp_process_strreset_resp()
1024 asoc->next_tsn = rtsn; in sctp_process_strreset_resp()
1025 asoc->ctsn_ack_point = asoc->next_tsn - 1; in sctp_process_strreset_resp()
1026 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; in sctp_process_strreset_resp()
1039 *evp = sctp_ulpevent_make_assoc_reset_event(asoc, flags, in sctp_process_strreset_resp()
1057 *evp = sctp_ulpevent_make_stream_change_event(asoc, flags, in sctp_process_strreset_resp()
1071 *evp = sctp_ulpevent_make_stream_change_event(asoc, flags, in sctp_process_strreset_resp()
1075 asoc->strreset_outstanding--; in sctp_process_strreset_resp()
1076 asoc->strreset_outseq++; in sctp_process_strreset_resp()
1079 if (!asoc->strreset_outstanding) { in sctp_process_strreset_resp()
1080 t = asoc->strreset_chunk->transport; in sctp_process_strreset_resp()
1084 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_resp()
1085 asoc->strreset_chunk = NULL; in sctp_process_strreset_resp()