Lines Matching refs:asoc

32 	struct sctp_association *asoc;  in sctp_stream_outq_migrate()  local
37 asoc = container_of(stream, struct sctp_association, stream); in sctp_stream_outq_migrate()
38 outq = &asoc->outqueue; in sctp_stream_outq_migrate()
53 if (asoc->peer.prsctp_capable && in sctp_stream_outq_migrate()
55 asoc->sent_cnt_removable--; in sctp_stream_outq_migrate()
218 static int sctp_send_reconf(struct sctp_association *asoc, in sctp_send_reconf() argument
221 struct net *net = sock_net(asoc->base.sk); in sctp_send_reconf()
224 retval = sctp_primitive_RECONF(net, asoc, chunk); in sctp_send_reconf()
234 struct sctp_association *asoc; in sctp_stream_outq_is_empty() local
237 asoc = container_of(stream, struct sctp_association, stream); in sctp_stream_outq_is_empty()
238 if (!asoc->outqueue.out_qlen) in sctp_stream_outq_is_empty()
255 int sctp_send_reset_streams(struct sctp_association *asoc, in sctp_send_reset_streams() argument
258 struct sctp_stream *stream = &asoc->stream; in sctp_send_reset_streams()
265 if (!asoc->peer.reconf_capable || in sctp_send_reset_streams()
266 !(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) { in sctp_send_reset_streams()
271 if (asoc->strreset_outstanding) { in sctp_send_reset_streams()
324 chunk = sctp_make_strreset_req(asoc, str_nums, nstr_list, out, in); in sctp_send_reset_streams()
343 asoc->strreset_chunk = chunk; in sctp_send_reset_streams()
344 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_reset_streams()
346 retval = sctp_send_reconf(asoc, chunk); in sctp_send_reset_streams()
348 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_reset_streams()
349 asoc->strreset_chunk = NULL; in sctp_send_reset_streams()
364 asoc->strreset_outstanding = out + in; in sctp_send_reset_streams()
370 int sctp_send_reset_assoc(struct sctp_association *asoc) in sctp_send_reset_assoc() argument
372 struct sctp_stream *stream = &asoc->stream; in sctp_send_reset_assoc()
377 if (!asoc->peer.reconf_capable || in sctp_send_reset_assoc()
378 !(asoc->strreset_enable & SCTP_ENABLE_RESET_ASSOC_REQ)) in sctp_send_reset_assoc()
381 if (asoc->strreset_outstanding) in sctp_send_reset_assoc()
384 if (!sctp_outq_is_empty(&asoc->outqueue)) in sctp_send_reset_assoc()
387 chunk = sctp_make_strreset_tsnreq(asoc); in sctp_send_reset_assoc()
395 asoc->strreset_chunk = chunk; in sctp_send_reset_assoc()
396 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_reset_assoc()
398 retval = sctp_send_reconf(asoc, chunk); in sctp_send_reset_assoc()
400 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_reset_assoc()
401 asoc->strreset_chunk = NULL; in sctp_send_reset_assoc()
409 asoc->strreset_outstanding = 1; in sctp_send_reset_assoc()
414 int sctp_send_add_streams(struct sctp_association *asoc, in sctp_send_add_streams() argument
417 struct sctp_stream *stream = &asoc->stream; in sctp_send_add_streams()
423 if (!asoc->peer.reconf_capable || in sctp_send_add_streams()
424 !(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) { in sctp_send_add_streams()
429 if (asoc->strreset_outstanding) { in sctp_send_add_streams()
450 chunk = sctp_make_strreset_addstrm(asoc, out, in); in sctp_send_add_streams()
456 asoc->strreset_chunk = chunk; in sctp_send_add_streams()
457 sctp_chunk_hold(asoc->strreset_chunk); in sctp_send_add_streams()
459 retval = sctp_send_reconf(asoc, chunk); in sctp_send_add_streams()
461 sctp_chunk_put(asoc->strreset_chunk); in sctp_send_add_streams()
462 asoc->strreset_chunk = NULL; in sctp_send_add_streams()
466 asoc->strreset_outstanding = !!out + !!in; in sctp_send_add_streams()
473 struct sctp_association *asoc, __be32 resp_seq, in sctp_chunk_lookup_strreset_param() argument
476 struct sctp_chunk *chunk = asoc->strreset_chunk; in sctp_chunk_lookup_strreset_param()
499 static void sctp_update_strreset_result(struct sctp_association *asoc, in sctp_update_strreset_result() argument
502 asoc->strreset_result[1] = asoc->strreset_result[0]; in sctp_update_strreset_result()
503 asoc->strreset_result[0] = result; in sctp_update_strreset_result()
507 struct sctp_association *asoc, in sctp_process_strreset_outreq() argument
512 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_outreq()
521 sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map)) { in sctp_process_strreset_outreq()
526 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_outreq()
527 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_outreq()
530 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_outreq()
531 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_outreq()
532 result = asoc->strreset_result[i]; in sctp_process_strreset_outreq()
535 asoc->strreset_inseq++; in sctp_process_strreset_outreq()
541 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) in sctp_process_strreset_outreq()
553 if (asoc->strreset_chunk) { in sctp_process_strreset_outreq()
555 asoc, outreq->response_seq, in sctp_process_strreset_outreq()
562 asoc->strreset_outstanding--; in sctp_process_strreset_outreq()
563 asoc->strreset_outseq++; in sctp_process_strreset_outreq()
565 if (!asoc->strreset_outstanding) { in sctp_process_strreset_outreq()
568 t = asoc->strreset_chunk->transport; in sctp_process_strreset_outreq()
572 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_outreq()
573 asoc->strreset_chunk = NULL; in sctp_process_strreset_outreq()
586 *evp = sctp_ulpevent_make_stream_reset_event(asoc, in sctp_process_strreset_outreq()
590 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_outreq()
592 return sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_outreq()
596 struct sctp_association *asoc, in sctp_process_strreset_inreq() argument
601 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_inreq()
609 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_inreq()
610 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_inreq()
613 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_inreq()
614 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_inreq()
615 result = asoc->strreset_result[i]; in sctp_process_strreset_inreq()
620 asoc->strreset_inseq++; in sctp_process_strreset_inreq()
622 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ)) in sctp_process_strreset_inreq()
625 if (asoc->strreset_outstanding) { in sctp_process_strreset_inreq()
641 asoc->strreset_inseq--; in sctp_process_strreset_inreq()
645 chunk = sctp_make_strreset_req(asoc, nums, str_p, 1, 0); in sctp_process_strreset_inreq()
657 asoc->strreset_chunk = chunk; in sctp_process_strreset_inreq()
658 asoc->strreset_outstanding = 1; in sctp_process_strreset_inreq()
659 sctp_chunk_hold(asoc->strreset_chunk); in sctp_process_strreset_inreq()
664 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_inreq()
667 chunk = sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_inreq()
673 struct sctp_association *asoc, in sctp_process_strreset_tsnreq() argument
679 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_tsnreq()
685 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_tsnreq()
686 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_tsnreq()
689 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_tsnreq()
690 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_tsnreq()
691 result = asoc->strreset_result[i]; in sctp_process_strreset_tsnreq()
693 next_tsn = asoc->ctsn_ack_point + 1; in sctp_process_strreset_tsnreq()
695 sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + 1; in sctp_process_strreset_tsnreq()
700 if (!sctp_outq_is_empty(&asoc->outqueue)) { in sctp_process_strreset_tsnreq()
705 asoc->strreset_inseq++; in sctp_process_strreset_tsnreq()
707 if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_ASSOC_REQ)) in sctp_process_strreset_tsnreq()
710 if (asoc->strreset_outstanding) { in sctp_process_strreset_tsnreq()
720 max_tsn_seen = sctp_tsnmap_get_max_tsn_seen(&asoc->peer.tsn_map); in sctp_process_strreset_tsnreq()
721 asoc->stream.si->report_ftsn(&asoc->ulpq, max_tsn_seen); in sctp_process_strreset_tsnreq()
728 init_tsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + (1 << 31); in sctp_process_strreset_tsnreq()
729 sctp_tsnmap_init(&asoc->peer.tsn_map, SCTP_TSN_MAP_INITIAL, in sctp_process_strreset_tsnreq()
736 sctp_outq_free(&asoc->outqueue); in sctp_process_strreset_tsnreq()
743 next_tsn = asoc->next_tsn; in sctp_process_strreset_tsnreq()
744 asoc->ctsn_ack_point = next_tsn - 1; in sctp_process_strreset_tsnreq()
745 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; in sctp_process_strreset_tsnreq()
759 *evp = sctp_ulpevent_make_assoc_reset_event(asoc, 0, init_tsn, in sctp_process_strreset_tsnreq()
763 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_tsnreq()
765 return sctp_make_strreset_tsnresp(asoc, result, request_seq, in sctp_process_strreset_tsnreq()
770 struct sctp_association *asoc, in sctp_process_strreset_addstrm_out() argument
775 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_addstrm_out()
781 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_addstrm_out()
782 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_addstrm_out()
785 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_addstrm_out()
786 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_addstrm_out()
787 result = asoc->strreset_result[i]; in sctp_process_strreset_addstrm_out()
790 asoc->strreset_inseq++; in sctp_process_strreset_addstrm_out()
792 if (!(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) in sctp_process_strreset_addstrm_out()
803 if (asoc->strreset_chunk) { in sctp_process_strreset_addstrm_out()
805 asoc, 0, SCTP_PARAM_RESET_ADD_IN_STREAMS)) { in sctp_process_strreset_addstrm_out()
811 asoc->strreset_outstanding--; in sctp_process_strreset_addstrm_out()
812 asoc->strreset_outseq++; in sctp_process_strreset_addstrm_out()
814 if (!asoc->strreset_outstanding) { in sctp_process_strreset_addstrm_out()
817 t = asoc->strreset_chunk->transport; in sctp_process_strreset_addstrm_out()
821 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_addstrm_out()
822 asoc->strreset_chunk = NULL; in sctp_process_strreset_addstrm_out()
830 *evp = sctp_ulpevent_make_stream_change_event(asoc, in sctp_process_strreset_addstrm_out()
834 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_addstrm_out()
836 return sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_addstrm_out()
840 struct sctp_association *asoc, in sctp_process_strreset_addstrm_in() argument
845 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_addstrm_in()
853 if (TSN_lt(asoc->strreset_inseq, request_seq) || in sctp_process_strreset_addstrm_in()
854 TSN_lt(request_seq, asoc->strreset_inseq - 2)) { in sctp_process_strreset_addstrm_in()
857 } else if (TSN_lt(request_seq, asoc->strreset_inseq)) { in sctp_process_strreset_addstrm_in()
858 i = asoc->strreset_inseq - request_seq - 1; in sctp_process_strreset_addstrm_in()
859 result = asoc->strreset_result[i]; in sctp_process_strreset_addstrm_in()
864 asoc->strreset_inseq++; in sctp_process_strreset_addstrm_in()
866 if (!(asoc->strreset_enable & SCTP_ENABLE_CHANGE_ASSOC_REQ)) in sctp_process_strreset_addstrm_in()
869 if (asoc->strreset_outstanding) { in sctp_process_strreset_addstrm_in()
883 chunk = sctp_make_strreset_addstrm(asoc, out, 0); in sctp_process_strreset_addstrm_in()
887 asoc->strreset_chunk = chunk; in sctp_process_strreset_addstrm_in()
888 asoc->strreset_outstanding = 1; in sctp_process_strreset_addstrm_in()
889 sctp_chunk_hold(asoc->strreset_chunk); in sctp_process_strreset_addstrm_in()
896 sctp_update_strreset_result(asoc, result); in sctp_process_strreset_addstrm_in()
899 chunk = sctp_make_strreset_resp(asoc, result, request_seq); in sctp_process_strreset_addstrm_in()
905 struct sctp_association *asoc, in sctp_process_strreset_resp() argument
909 struct sctp_stream *stream = &asoc->stream; in sctp_process_strreset_resp()
916 req = sctp_chunk_lookup_strreset_param(asoc, resp->response_seq, 0); in sctp_process_strreset_resp()
962 *evp = sctp_ulpevent_make_stream_reset_event(asoc, flags, in sctp_process_strreset_resp()
979 *evp = sctp_ulpevent_make_stream_reset_event(asoc, flags, in sctp_process_strreset_resp()
995 &asoc->peer.tsn_map); in sctp_process_strreset_resp()
998 asoc->stream.si->report_ftsn(&asoc->ulpq, mtsn); in sctp_process_strreset_resp()
1000 sctp_tsnmap_init(&asoc->peer.tsn_map, in sctp_process_strreset_resp()
1008 list_splice_init(&asoc->outqueue.out_chunk_list, &temp); in sctp_process_strreset_resp()
1009 sctp_outq_free(&asoc->outqueue); in sctp_process_strreset_resp()
1010 list_splice_init(&temp, &asoc->outqueue.out_chunk_list); in sctp_process_strreset_resp()
1012 asoc->next_tsn = rtsn; in sctp_process_strreset_resp()
1013 asoc->ctsn_ack_point = asoc->next_tsn - 1; in sctp_process_strreset_resp()
1014 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; in sctp_process_strreset_resp()
1027 *evp = sctp_ulpevent_make_assoc_reset_event(asoc, flags, in sctp_process_strreset_resp()
1043 *evp = sctp_ulpevent_make_stream_change_event(asoc, flags, in sctp_process_strreset_resp()
1057 *evp = sctp_ulpevent_make_stream_change_event(asoc, flags, in sctp_process_strreset_resp()
1061 asoc->strreset_outstanding--; in sctp_process_strreset_resp()
1062 asoc->strreset_outseq++; in sctp_process_strreset_resp()
1065 if (!asoc->strreset_outstanding) { in sctp_process_strreset_resp()
1066 t = asoc->strreset_chunk->transport; in sctp_process_strreset_resp()
1070 sctp_chunk_put(asoc->strreset_chunk); in sctp_process_strreset_resp()
1071 asoc->strreset_chunk = NULL; in sctp_process_strreset_resp()