Lines Matching refs:asoc
94 struct sctp_association *asoc; in sctp_stream_outq_migrate() local
99 asoc = container_of(stream, struct sctp_association, stream); in sctp_stream_outq_migrate()
100 outq = &asoc->outqueue; in sctp_stream_outq_migrate()
115 if (asoc->peer.prsctp_capable && in sctp_stream_outq_migrate()
117 asoc->sent_cnt_removable--; in sctp_stream_outq_migrate()
291 static int sctp_send_reconf(struct sctp_association *asoc, in sctp_send_reconf() argument
294 struct net *net = sock_net(asoc->base.sk); in sctp_send_reconf()
297 retval = sctp_primitive_RECONF(net, asoc, chunk); in sctp_send_reconf()
307 struct sctp_association *asoc; in sctp_stream_outq_is_empty() local
310 asoc = container_of(stream, struct sctp_association, stream); in sctp_stream_outq_is_empty()
311 if (!asoc->outqueue.out_qlen) in sctp_stream_outq_is_empty()
328 int sctp_send_reset_streams(struct sctp_association *asoc, in sctp_send_reset_streams() argument
331 struct sctp_stream *stream = &asoc->stream; in sctp_send_reset_streams()
338 if (!asoc->peer.reconf_capable || in sctp_send_reset_streams()
339 !(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) { in sctp_send_reset_streams()
344 if (asoc->strreset_outstanding) { in sctp_send_reset_streams()
396 chunk = sctp_make_strreset_req(asoc, str_nums, nstr_list, out, in); in sctp_send_reset_streams()
415 asoc->strreset_chunk = chunk; in sctp_send_reset_streams()
416 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_reset_streams()
418 retval = sctp_send_reconf(asoc, chunk); in sctp_send_reset_streams()
420 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_reset_streams()
421 asoc->strreset_chunk = NULL; in sctp_send_reset_streams()
436 asoc->strreset_outstanding = out + in; in sctp_send_reset_streams()
442 int sctp_send_reset_assoc(struct sctp_association *asoc) in sctp_send_reset_assoc() argument
444 struct sctp_stream *stream = &asoc->stream; in sctp_send_reset_assoc()
449 if (!asoc->peer.reconf_capable || in sctp_send_reset_assoc()
450 !(asoc->strreset_enable & SCTP_ENABLE_RESET_ASSOC_REQ)) in sctp_send_reset_assoc()
453 if (asoc->strreset_outstanding) in sctp_send_reset_assoc()
456 if (!sctp_outq_is_empty(&asoc->outqueue)) in sctp_send_reset_assoc()
459 chunk = sctp_make_strreset_tsnreq(asoc); in sctp_send_reset_assoc()
467 asoc->strreset_chunk = chunk; in sctp_send_reset_assoc()
468 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_reset_assoc()
470 retval = sctp_send_reconf(asoc, chunk); in sctp_send_reset_assoc()
472 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_reset_assoc()
473 asoc->strreset_chunk = NULL; in sctp_send_reset_assoc()
481 asoc->strreset_outstanding = 1; in sctp_send_reset_assoc()
486 int sctp_send_add_streams(struct sctp_association *asoc, in sctp_send_add_streams() argument
489 struct sctp_stream *stream = &asoc->stream; in sctp_send_add_streams()
495 if (!asoc->peer.reconf_capable || in sctp_send_add_streams()
496 !(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) { in sctp_send_add_streams()
501 if (asoc->strreset_outstanding) { in sctp_send_add_streams()
522 chunk = sctp_make_strreset_addstrm(asoc, out, in); in sctp_send_add_streams()
528 asoc->strreset_chunk = chunk; in sctp_send_add_streams()
529 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_add_streams()
531 retval = sctp_send_reconf(asoc, chunk); in sctp_send_add_streams()
533 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_add_streams()
534 asoc->strreset_chunk = NULL; in sctp_send_add_streams()
541 asoc->strreset_outstanding = !!out + !!in; in sctp_send_add_streams()
548 struct sctp_association *asoc, __be32 resp_seq, in sctp_chunk_lookup_strreset_param() argument
551 struct sctp_chunk *chunk = asoc->strreset_chunk; in sctp_chunk_lookup_strreset_param()
574 static void sctp_update_strreset_result(struct sctp_association *asoc, in sctp_update_strreset_result() argument
577 asoc->strreset_result[1] = asoc->strreset_result[0]; in sctp_update_strreset_result()
578 asoc->strreset_result[0] = result; in sctp_update_strreset_result()
582 struct sctp_association *asoc, in sctp_process_strreset_outreq() argument
587 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_outreq()
596 sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map)) { in sctp_process_strreset_outreq()
601 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_outreq()
602 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_outreq()
605 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_outreq()
606 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_outreq()
607 result = asoc->strreset_result[i]; in sctp_process_strreset_outreq()
610 asoc->strreset_inseq++; in sctp_process_strreset_outreq()
616 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) in sctp_process_strreset_outreq()
619 if (asoc->strreset_chunk) { in sctp_process_strreset_outreq()
621 asoc, outreq->response_seq, in sctp_process_strreset_outreq()
628 asoc->strreset_outstanding--; in sctp_process_strreset_outreq()
629 asoc->strreset_outseq++; in sctp_process_strreset_outreq()
631 if (!asoc->strreset_outstanding) { in sctp_process_strreset_outreq()
634 t = asoc->strreset_chunk->transport; in sctp_process_strreset_outreq()
638 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_outreq()
639 asoc->strreset_chunk = NULL; in sctp_process_strreset_outreq()
664 *evp = sctp_ulpevent_make_stream_reset_event(asoc, in sctp_process_strreset_outreq()
669 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_outreq()
671 return sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_outreq()
675 struct sctp_association *asoc, in sctp_process_strreset_inreq() argument
680 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_inreq()
688 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_inreq()
689 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_inreq()
692 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_inreq()
693 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_inreq()
694 result = asoc->strreset_result[i]; in sctp_process_strreset_inreq()
699 asoc->strreset_inseq++; in sctp_process_strreset_inreq()
701 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) in sctp_process_strreset_inreq()
704 if (asoc->strreset_outstanding) { in sctp_process_strreset_inreq()
720 asoc->strreset_inseq--; in sctp_process_strreset_inreq()
724 chunk = sctp_make_strreset_req(asoc, nums, str_p, 1, 0); in sctp_process_strreset_inreq()
736 asoc->strreset_chunk = chunk; in sctp_process_strreset_inreq()
737 asoc->strreset_outstanding = 1; in sctp_process_strreset_inreq()
738 sctp_chunk_hold(asoc->strreset_chunk); in sctp_process_strreset_inreq()
742 *evp = sctp_ulpevent_make_stream_reset_event(asoc, in sctp_process_strreset_inreq()
746 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_inreq()
749 chunk = sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_inreq()
755 struct sctp_association *asoc, in sctp_process_strreset_tsnreq() argument
761 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_tsnreq()
767 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_tsnreq()
768 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_tsnreq()
771 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_tsnreq()
772 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_tsnreq()
773 result = asoc->strreset_result[i]; in sctp_process_strreset_tsnreq()
775 next_tsn = asoc->ctsn_ack_point + 1; in sctp_process_strreset_tsnreq()
777 sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + 1; in sctp_process_strreset_tsnreq()
782 if (!sctp_outq_is_empty(&asoc->outqueue)) { in sctp_process_strreset_tsnreq()
787 asoc->strreset_inseq++; in sctp_process_strreset_tsnreq()
789 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_ASSOC_REQ)) in sctp_process_strreset_tsnreq()
792 if (asoc->strreset_outstanding) { in sctp_process_strreset_tsnreq()
802 max_tsn_seen = sctp_tsnmap_get_max_tsn_seen(&asoc->peer.tsn_map); in sctp_process_strreset_tsnreq()
803 asoc->stream.si->report_ftsn(&asoc->ulpq, max_tsn_seen); in sctp_process_strreset_tsnreq()
810 init_tsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + (1 << 31); in sctp_process_strreset_tsnreq()
811 sctp_tsnmap_init(&asoc->peer.tsn_map, SCTP_TSN_MAP_INITIAL, in sctp_process_strreset_tsnreq()
818 sctp_outq_free(&asoc->outqueue); in sctp_process_strreset_tsnreq()
825 next_tsn = asoc->next_tsn; in sctp_process_strreset_tsnreq()
826 asoc->ctsn_ack_point = next_tsn - 1; in sctp_process_strreset_tsnreq()
827 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; in sctp_process_strreset_tsnreq()
841 *evp = sctp_ulpevent_make_assoc_reset_event(asoc, 0, init_tsn, in sctp_process_strreset_tsnreq()
845 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_tsnreq()
847 return sctp_make_strreset_tsnresp(asoc, result, request_seq, in sctp_process_strreset_tsnreq()
852 struct sctp_association *asoc, in sctp_process_strreset_addstrm_out() argument
857 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_addstrm_out()
863 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_addstrm_out()
864 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_addstrm_out()
867 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_addstrm_out()
868 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_addstrm_out()
869 result = asoc->strreset_result[i]; in sctp_process_strreset_addstrm_out()
872 asoc->strreset_inseq++; in sctp_process_strreset_addstrm_out()
874 if (!(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) in sctp_process_strreset_addstrm_out()
877 if (asoc->strreset_chunk) { in sctp_process_strreset_addstrm_out()
879 asoc, 0, SCTP_PARAM_RESET_ADD_IN_STREAMS)) { in sctp_process_strreset_addstrm_out()
885 asoc->strreset_outstanding--; in sctp_process_strreset_addstrm_out()
886 asoc->strreset_outseq++; in sctp_process_strreset_addstrm_out()
888 if (!asoc->strreset_outstanding) { in sctp_process_strreset_addstrm_out()
891 t = asoc->strreset_chunk->transport; in sctp_process_strreset_addstrm_out()
895 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_addstrm_out()
896 asoc->strreset_chunk = NULL; in sctp_process_strreset_addstrm_out()
912 *evp = sctp_ulpevent_make_stream_change_event(asoc, in sctp_process_strreset_addstrm_out()
916 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_addstrm_out()
918 return sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_addstrm_out()
922 struct sctp_association *asoc, in sctp_process_strreset_addstrm_in() argument
927 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_addstrm_in()
935 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_addstrm_in()
936 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_addstrm_in()
939 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_addstrm_in()
940 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_addstrm_in()
941 result = asoc->strreset_result[i]; in sctp_process_strreset_addstrm_in()
946 asoc->strreset_inseq++; in sctp_process_strreset_addstrm_in()
948 if (!(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) in sctp_process_strreset_addstrm_in()
951 if (asoc->strreset_outstanding) { in sctp_process_strreset_addstrm_in()
965 chunk = sctp_make_strreset_addstrm(asoc, out, 0); in sctp_process_strreset_addstrm_in()
969 asoc->strreset_chunk = chunk; in sctp_process_strreset_addstrm_in()
970 asoc->strreset_outstanding = 1; in sctp_process_strreset_addstrm_in()
971 sctp_chunk_hold(asoc->strreset_chunk); in sctp_process_strreset_addstrm_in()
977 *evp = sctp_ulpevent_make_stream_change_event(asoc, in sctp_process_strreset_addstrm_in()
981 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_addstrm_in()
984 chunk = sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_addstrm_in()
990 struct sctp_association *asoc, in sctp_process_strreset_resp() argument
994 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_resp()
1001 req = sctp_chunk_lookup_strreset_param(asoc, resp->response_seq, 0); in sctp_process_strreset_resp()
1047 *evp = sctp_ulpevent_make_stream_reset_event(asoc, flags, in sctp_process_strreset_resp()
1062 *evp = sctp_ulpevent_make_stream_reset_event(asoc, flags, in sctp_process_strreset_resp()
1078 &asoc->peer.tsn_map); in sctp_process_strreset_resp()
1081 asoc->stream.si->report_ftsn(&asoc->ulpq, mtsn); in sctp_process_strreset_resp()
1083 sctp_tsnmap_init(&asoc->peer.tsn_map, in sctp_process_strreset_resp()
1091 list_splice_init(&asoc->outqueue.out_chunk_list, &temp); in sctp_process_strreset_resp()
1092 sctp_outq_free(&asoc->outqueue); in sctp_process_strreset_resp()
1093 list_splice_init(&temp, &asoc->outqueue.out_chunk_list); in sctp_process_strreset_resp()
1095 asoc->next_tsn = rtsn; in sctp_process_strreset_resp()
1096 asoc->ctsn_ack_point = asoc->next_tsn - 1; in sctp_process_strreset_resp()
1097 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; in sctp_process_strreset_resp()
1110 *evp = sctp_ulpevent_make_assoc_reset_event(asoc, flags, in sctp_process_strreset_resp()
1126 *evp = sctp_ulpevent_make_stream_change_event(asoc, flags, in sctp_process_strreset_resp()
1140 *evp = sctp_ulpevent_make_stream_change_event(asoc, flags, in sctp_process_strreset_resp()
1144 asoc->strreset_outstanding--; in sctp_process_strreset_resp()
1145 asoc->strreset_outseq++; in sctp_process_strreset_resp()
1148 if (!asoc->strreset_outstanding) { in sctp_process_strreset_resp()
1149 t = asoc->strreset_chunk->transport; in sctp_process_strreset_resp()
1153 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_resp()
1154 asoc->strreset_chunk = NULL; in sctp_process_strreset_resp()