Lines Matching refs:asoc

73 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
86 static int sctp_send_asconf(struct sctp_association *asoc,
105 static inline int sctp_wspace(struct sctp_association *asoc) in sctp_wspace() argument
107 struct sock *sk = asoc->base.sk; in sctp_wspace()
109 return asoc->ep->sndbuf_policy ? sk->sk_sndbuf - asoc->sndbuf_used in sctp_wspace()
124 struct sctp_association *asoc = chunk->asoc; in sctp_set_owner_w() local
125 struct sock *sk = asoc->base.sk; in sctp_set_owner_w()
128 sctp_association_hold(asoc); in sctp_set_owner_w()
140 asoc->sndbuf_used += chunk->skb->truesize + sizeof(struct sctp_chunk); in sctp_set_owner_w()
156 if ((clear && asoc->base.sk == c->skb->sk) || \
157 (!clear && asoc->base.sk != c->skb->sk)) \
163 static void sctp_for_each_tx_datachunk(struct sctp_association *asoc, in sctp_for_each_tx_datachunk() argument
169 struct sctp_outq *q = &asoc->outqueue; in sctp_for_each_tx_datachunk()
173 list_for_each_entry(t, &asoc->peer.transport_addr_list, transports) in sctp_for_each_tx_datachunk()
190 static void sctp_for_each_rx_skb(struct sctp_association *asoc, struct sock *sk, in sctp_for_each_rx_skb() argument
196 sctp_skb_for_each(skb, &asoc->ulpq.lobby, tmp) in sctp_for_each_rx_skb()
199 sctp_skb_for_each(skb, &asoc->ulpq.reasm, tmp) in sctp_for_each_rx_skb()
202 sctp_skb_for_each(skb, &asoc->ulpq.reasm_uo, tmp) in sctp_for_each_rx_skb()
232 struct sctp_association *asoc = NULL; in sctp_id2assoc() local
245 asoc = list_entry(sctp_sk(sk)->ep->asocs.next, in sctp_id2assoc()
247 return asoc; in sctp_id2assoc()
255 asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id); in sctp_id2assoc()
256 if (asoc && (asoc->base.sk != sk || asoc->base.dead)) in sctp_id2assoc()
257 asoc = NULL; in sctp_id2assoc()
260 return asoc; in sctp_id2assoc()
451 static int sctp_send_asconf(struct sctp_association *asoc, in sctp_send_asconf() argument
459 if (asoc->addip_last_asconf) { in sctp_send_asconf()
460 list_add_tail(&chunk->list, &asoc->addip_chunk_list); in sctp_send_asconf()
466 retval = sctp_primitive_ASCONF(asoc->base.net, asoc, chunk); in sctp_send_asconf()
470 asoc->addip_last_asconf = chunk; in sctp_send_asconf()
544 struct sctp_association *asoc; in sctp_send_asconf_add_ip() local
565 list_for_each_entry(asoc, &ep->asocs, asocs) { in sctp_send_asconf_add_ip()
566 if (!asoc->peer.asconf_capable) in sctp_send_asconf_add_ip()
569 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_ADD_IP) in sctp_send_asconf_add_ip()
572 if (!sctp_state(asoc, ESTABLISHED)) in sctp_send_asconf_add_ip()
589 if (sctp_assoc_lookup_laddr(asoc, addr)) in sctp_send_asconf_add_ip()
600 bp = &asoc->base.bind_addr; in sctp_send_asconf_add_ip()
603 chunk = sctp_make_asconf_update_ip(asoc, &laddr->a, addrs, in sctp_send_asconf_add_ip()
623 if (asoc->src_out_of_asoc_ok) { in sctp_send_asconf_add_ip()
627 &asoc->peer.transport_addr_list, transports) { in sctp_send_asconf_add_ip()
628 trans->cwnd = min(4*asoc->pathmtu, max_t(__u32, in sctp_send_asconf_add_ip()
629 2*asoc->pathmtu, 4380)); in sctp_send_asconf_add_ip()
630 trans->ssthresh = asoc->peer.i.a_rwnd; in sctp_send_asconf_add_ip()
631 trans->rto = asoc->rto_initial; in sctp_send_asconf_add_ip()
632 sctp_max_rto(asoc, trans); in sctp_send_asconf_add_ip()
636 sctp_sk(asoc->base.sk)); in sctp_send_asconf_add_ip()
639 retval = sctp_send_asconf(asoc, chunk); in sctp_send_asconf_add_ip()
746 struct sctp_association *asoc; in sctp_send_asconf_del_ip() local
768 list_for_each_entry(asoc, &ep->asocs, asocs) { in sctp_send_asconf_del_ip()
770 if (!asoc->peer.asconf_capable) in sctp_send_asconf_del_ip()
773 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_DEL_IP) in sctp_send_asconf_del_ip()
776 if (!sctp_state(asoc, ESTABLISHED)) in sctp_send_asconf_del_ip()
793 if (!sctp_assoc_lookup_laddr(asoc, laddr)) in sctp_send_asconf_del_ip()
806 bp = &asoc->base.bind_addr; in sctp_send_asconf_del_ip()
810 if (asoc->asconf_addr_del_pending) in sctp_send_asconf_del_ip()
812 asoc->asconf_addr_del_pending = in sctp_send_asconf_del_ip()
814 if (asoc->asconf_addr_del_pending == NULL) { in sctp_send_asconf_del_ip()
818 asoc->asconf_addr_del_pending->sa.sa_family = in sctp_send_asconf_del_ip()
820 asoc->asconf_addr_del_pending->v4.sin_port = in sctp_send_asconf_del_ip()
826 asoc->asconf_addr_del_pending->v4.sin_addr.s_addr = sin->sin_addr.s_addr; in sctp_send_asconf_del_ip()
831 asoc->asconf_addr_del_pending->v6.sin6_addr = sin6->sin6_addr; in sctp_send_asconf_del_ip()
835 __func__, asoc, &asoc->asconf_addr_del_pending->sa, in sctp_send_asconf_del_ip()
836 asoc->asconf_addr_del_pending); in sctp_send_asconf_del_ip()
838 asoc->src_out_of_asoc_ok = 1; in sctp_send_asconf_del_ip()
850 chunk = sctp_make_asconf_update_ip(asoc, laddr, addrs, addrcnt, in sctp_send_asconf_del_ip()
876 list_for_each_entry(transport, &asoc->peer.transport_addr_list, in sctp_send_asconf_del_ip()
879 sctp_sk(asoc->base.sk)); in sctp_send_asconf_del_ip()
885 retval = sctp_send_asconf(asoc, chunk); in sctp_send_asconf_del_ip()
1055 struct sctp_association *asoc; in sctp_connect_new_asoc() local
1074 asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL); in sctp_connect_new_asoc()
1075 if (!asoc) in sctp_connect_new_asoc()
1078 err = sctp_assoc_set_bind_addr_from_ep(asoc, scope, GFP_KERNEL); in sctp_connect_new_asoc()
1082 *tp = sctp_assoc_add_peer(asoc, daddr, GFP_KERNEL, SCTP_UNKNOWN); in sctp_connect_new_asoc()
1094 asoc->c.sinit_num_ostreams = outcnt; in sctp_connect_new_asoc()
1096 err = sctp_stream_init(&asoc->stream, outcnt, 0, GFP_KERNEL); in sctp_connect_new_asoc()
1102 asoc->c.sinit_max_instreams = init->sinit_max_instreams; in sctp_connect_new_asoc()
1105 asoc->max_init_attempts = init->sinit_max_attempts; in sctp_connect_new_asoc()
1108 asoc->max_init_timeo = in sctp_connect_new_asoc()
1113 sctp_association_free(asoc); in sctp_connect_new_asoc()
1117 static int sctp_connect_add_peer(struct sctp_association *asoc, in sctp_connect_add_peer() argument
1120 struct sctp_endpoint *ep = asoc->ep; in sctp_connect_add_peer()
1130 if (old && old != asoc) in sctp_connect_add_peer()
1137 t = sctp_assoc_add_peer(asoc, daddr, GFP_KERNEL, SCTP_UNKNOWN); in sctp_connect_add_peer()
1155 struct sctp_association *asoc; in __sctp_connect() local
1175 asoc = sctp_endpoint_lookup_assoc(ep, daddr, &transport); in __sctp_connect()
1176 if (asoc) in __sctp_connect()
1177 return asoc->state >= SCTP_STATE_ESTABLISHED ? -EISCONN in __sctp_connect()
1183 asoc = transport->asoc; in __sctp_connect()
1197 if (asoc->peer.port != ntohs(daddr->v4.sin_port)) in __sctp_connect()
1200 err = sctp_connect_add_peer(asoc, daddr, af->sockaddr_len); in __sctp_connect()
1212 err = sctp_assoc_set_id(asoc, GFP_KERNEL); in __sctp_connect()
1217 err = sctp_primitive_ASSOCIATE(sock_net(sk), asoc, NULL); in __sctp_connect()
1222 inet_sk(sk)->inet_dport = htons(asoc->peer.port); in __sctp_connect()
1227 *assoc_id = asoc->assoc_id; in __sctp_connect()
1230 return sctp_wait_for_connect(asoc, &timeo); in __sctp_connect()
1234 __func__, asoc, kaddrs, err); in __sctp_connect()
1235 sctp_association_free(asoc); in __sctp_connect()
1470 struct sctp_association *asoc; in sctp_close() local
1488 asoc = list_entry(pos, struct sctp_association, asocs); in sctp_close()
1496 if (sctp_state(asoc, CLOSED)) { in sctp_close()
1497 sctp_association_free(asoc); in sctp_close()
1502 if (data_was_unread || !skb_queue_empty(&asoc->ulpq.lobby) || in sctp_close()
1503 !skb_queue_empty(&asoc->ulpq.reasm) || in sctp_close()
1504 !skb_queue_empty(&asoc->ulpq.reasm_uo) || in sctp_close()
1508 chunk = sctp_make_abort_user(asoc, NULL, 0); in sctp_close()
1509 sctp_primitive_ABORT(net, asoc, chunk); in sctp_close()
1511 sctp_primitive_SHUTDOWN(net, asoc, NULL); in sctp_close()
1646 struct sctp_association *asoc; in sctp_sendmsg_new_asoc() local
1679 asoc = (*tp)->asoc; in sctp_sendmsg_new_asoc()
1708 daddr->v4.sin_port = htons(asoc->peer.port); in sctp_sendmsg_new_asoc()
1719 daddr->v6.sin6_port = htons(asoc->peer.port); in sctp_sendmsg_new_asoc()
1723 err = sctp_connect_add_peer(asoc, daddr, sizeof(*daddr)); in sctp_sendmsg_new_asoc()
1731 sctp_association_free(asoc); in sctp_sendmsg_new_asoc()
1735 static int sctp_sendmsg_check_sflags(struct sctp_association *asoc, in sctp_sendmsg_check_sflags() argument
1739 struct sock *sk = asoc->base.sk; in sctp_sendmsg_check_sflags()
1742 if (sctp_state(asoc, CLOSED) && sctp_style(sk, TCP)) in sctp_sendmsg_check_sflags()
1746 !sctp_state(asoc, ESTABLISHED)) in sctp_sendmsg_check_sflags()
1750 pr_debug("%s: shutting down association:%p\n", __func__, asoc); in sctp_sendmsg_check_sflags()
1751 sctp_primitive_SHUTDOWN(net, asoc, NULL); in sctp_sendmsg_check_sflags()
1759 chunk = sctp_make_abort_user(asoc, msg, msg_len); in sctp_sendmsg_check_sflags()
1763 pr_debug("%s: aborting association:%p\n", __func__, asoc); in sctp_sendmsg_check_sflags()
1764 sctp_primitive_ABORT(net, asoc, chunk); in sctp_sendmsg_check_sflags()
1773 static int sctp_sendmsg_to_asoc(struct sctp_association *asoc, in sctp_sendmsg_to_asoc() argument
1778 struct sock *sk = asoc->base.sk; in sctp_sendmsg_to_asoc()
1787 if (sinfo->sinfo_stream >= asoc->stream.outcnt) { in sctp_sendmsg_to_asoc()
1792 if (unlikely(!SCTP_SO(&asoc->stream, sinfo->sinfo_stream)->ext)) { in sctp_sendmsg_to_asoc()
1793 err = sctp_stream_init_ext(&asoc->stream, sinfo->sinfo_stream); in sctp_sendmsg_to_asoc()
1798 if (sp->disable_fragments && msg_len > asoc->frag_point) { in sctp_sendmsg_to_asoc()
1803 if (asoc->pmtu_pending) { in sctp_sendmsg_to_asoc()
1805 sctp_assoc_sync_pmtu(asoc); in sctp_sendmsg_to_asoc()
1806 asoc->pmtu_pending = 0; in sctp_sendmsg_to_asoc()
1809 if (sctp_wspace(asoc) < (int)msg_len) in sctp_sendmsg_to_asoc()
1810 sctp_prsctp_prune(asoc, sinfo, msg_len - sctp_wspace(asoc)); in sctp_sendmsg_to_asoc()
1815 if (sctp_wspace(asoc) <= 0 || !sk_wmem_schedule(sk, msg_len)) { in sctp_sendmsg_to_asoc()
1817 err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len); in sctp_sendmsg_to_asoc()
1822 if (sctp_state(asoc, CLOSED)) { in sctp_sendmsg_to_asoc()
1823 err = sctp_primitive_ASSOCIATE(net, asoc, NULL); in sctp_sendmsg_to_asoc()
1827 if (asoc->ep->intl_enable) { in sctp_sendmsg_to_asoc()
1829 err = sctp_wait_for_connect(asoc, &timeo); in sctp_sendmsg_to_asoc()
1841 datamsg = sctp_datamsg_from_user(asoc, sinfo, &msg->msg_iter); in sctp_sendmsg_to_asoc()
1847 asoc->force_delay = !!(msg->msg_flags & MSG_MORE); in sctp_sendmsg_to_asoc()
1855 err = sctp_primitive_SEND(net, asoc, datamsg); in sctp_sendmsg_to_asoc()
1867 sctp_wait_for_connect(asoc, &timeo); in sctp_sendmsg_to_asoc()
1899 static void sctp_sendmsg_update_sinfo(struct sctp_association *asoc, in sctp_sendmsg_update_sinfo() argument
1904 sinfo->sinfo_stream = asoc->default_stream; in sctp_sendmsg_update_sinfo()
1905 sinfo->sinfo_ppid = asoc->default_ppid; in sctp_sendmsg_update_sinfo()
1906 sinfo->sinfo_context = asoc->default_context; in sctp_sendmsg_update_sinfo()
1907 sinfo->sinfo_assoc_id = sctp_assoc2id(asoc); in sctp_sendmsg_update_sinfo()
1910 sinfo->sinfo_flags = asoc->default_flags; in sctp_sendmsg_update_sinfo()
1914 sinfo->sinfo_timetolive = asoc->default_timetolive; in sctp_sendmsg_update_sinfo()
1930 struct sctp_association *asoc, *tmp; in sctp_sendmsg() local
1956 list_for_each_entry_safe(asoc, tmp, &ep->asocs, asocs) { in sctp_sendmsg()
1957 err = sctp_sendmsg_check_sflags(asoc, sflags, msg, in sctp_sendmsg()
1964 sctp_sendmsg_update_sinfo(asoc, sinfo, &cmsgs); in sctp_sendmsg()
1966 err = sctp_sendmsg_to_asoc(asoc, msg, msg_len, in sctp_sendmsg()
1979 asoc = sctp_endpoint_lookup_assoc(ep, daddr, &transport); in sctp_sendmsg()
1980 if (asoc) { in sctp_sendmsg()
1981 err = sctp_sendmsg_check_sflags(asoc, sflags, msg, in sctp_sendmsg()
1991 asoc = transport->asoc; in sctp_sendmsg()
1998 asoc = sctp_id2assoc(sk, sinfo->sinfo_assoc_id); in sctp_sendmsg()
1999 if (!asoc) { in sctp_sendmsg()
2004 err = sctp_sendmsg_check_sflags(asoc, sflags, msg, msg_len); in sctp_sendmsg()
2010 sctp_sendmsg_update_sinfo(asoc, sinfo, &cmsgs); in sctp_sendmsg()
2013 err = sctp_sendmsg_to_asoc(asoc, msg, msg_len, transport, sinfo); in sctp_sendmsg()
2015 sctp_association_free(asoc); in sctp_sendmsg()
2154 sctp_assoc_rwnd_increase(event->asoc, copied); in sctp_recvmsg()
2200 struct sctp_association *asoc; in sctp_setsockopt_events() local
2210 list_for_each_entry(asoc, &sp->ep->asocs, asocs) in sctp_setsockopt_events()
2211 asoc->subscribe = sctp_sk(sk)->subscribe; in sctp_setsockopt_events()
2220 asoc = sctp_id2assoc(sk, 0); in sctp_setsockopt_events()
2221 if (asoc && sctp_outq_is_empty(&asoc->outqueue)) { in sctp_setsockopt_events()
2222 event = sctp_ulpevent_make_sender_dry_event(asoc, in sctp_setsockopt_events()
2227 asoc->stream.si->enqueue_event(&asoc->ulpq, event); in sctp_setsockopt_events()
2404 struct sctp_association *asoc, in sctp_apply_peer_addr_params() argument
2413 error = sctp_primitive_REQUESTHEARTBEAT(trans->asoc->base.net, in sctp_apply_peer_addr_params()
2414 trans->asoc, trans); in sctp_apply_peer_addr_params()
2437 } else if (asoc) { in sctp_apply_peer_addr_params()
2438 asoc->hbinterval = in sctp_apply_peer_addr_params()
2450 } else if (asoc) { in sctp_apply_peer_addr_params()
2451 asoc->param_flags = in sctp_apply_peer_addr_params()
2452 (asoc->param_flags & ~SPP_HB) | hb_change; in sctp_apply_peer_addr_params()
2467 sctp_assoc_sync_pmtu(asoc); in sctp_apply_peer_addr_params()
2468 } else if (asoc) { in sctp_apply_peer_addr_params()
2469 sctp_assoc_set_pmtu(asoc, params->spp_pathmtu); in sctp_apply_peer_addr_params()
2483 sctp_assoc_sync_pmtu(asoc); in sctp_apply_peer_addr_params()
2485 } else if (asoc) { in sctp_apply_peer_addr_params()
2486 asoc->param_flags = in sctp_apply_peer_addr_params()
2487 (asoc->param_flags & ~SPP_PMTUD) | pmtud_change; in sctp_apply_peer_addr_params()
2502 } else if (asoc) { in sctp_apply_peer_addr_params()
2503 asoc->sackdelay = in sctp_apply_peer_addr_params()
2515 } else if (asoc) { in sctp_apply_peer_addr_params()
2516 asoc->param_flags = in sctp_apply_peer_addr_params()
2517 (asoc->param_flags & ~SPP_SACKDELAY) | in sctp_apply_peer_addr_params()
2532 } else if (asoc) { in sctp_apply_peer_addr_params()
2533 asoc->pathmaxrxt = params->spp_pathmaxrxt; in sctp_apply_peer_addr_params()
2546 } else if (asoc) { in sctp_apply_peer_addr_params()
2549 list_for_each_entry(t, &asoc->peer.transport_addr_list, in sctp_apply_peer_addr_params()
2557 asoc->flowlabel = params->spp_ipv6_flowlabel & in sctp_apply_peer_addr_params()
2559 asoc->flowlabel |= SCTP_FLOWLABEL_SET_MASK; in sctp_apply_peer_addr_params()
2571 } else if (asoc) { in sctp_apply_peer_addr_params()
2574 list_for_each_entry(t, &asoc->peer.transport_addr_list, in sctp_apply_peer_addr_params()
2580 asoc->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK; in sctp_apply_peer_addr_params()
2581 asoc->dscp |= SCTP_DSCP_SET_MASK; in sctp_apply_peer_addr_params()
2596 struct sctp_association *asoc = NULL; in sctp_setsockopt_peer_addr_params() local
2636 asoc = sctp_id2assoc(sk, params->spp_assoc_id); in sctp_setsockopt_peer_addr_params()
2637 if (!asoc && params->spp_assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_peer_addr_params()
2644 if (params->spp_flags & SPP_HB_DEMAND && !trans && !asoc) in sctp_setsockopt_peer_addr_params()
2648 error = sctp_apply_peer_addr_params(params, trans, asoc, sp, in sctp_setsockopt_peer_addr_params()
2658 if (!trans && asoc) { in sctp_setsockopt_peer_addr_params()
2659 list_for_each_entry(trans, &asoc->peer.transport_addr_list, in sctp_setsockopt_peer_addr_params()
2661 sctp_apply_peer_addr_params(params, trans, asoc, sp, in sctp_setsockopt_peer_addr_params()
2681 struct sctp_association *asoc) in sctp_apply_asoc_delayed_ack() argument
2686 asoc->sackdelay = msecs_to_jiffies(params->sack_delay); in sctp_apply_asoc_delayed_ack()
2687 asoc->param_flags = in sctp_apply_asoc_delayed_ack()
2688 sctp_spp_sackdelay_enable(asoc->param_flags); in sctp_apply_asoc_delayed_ack()
2691 asoc->param_flags = in sctp_apply_asoc_delayed_ack()
2692 sctp_spp_sackdelay_disable(asoc->param_flags); in sctp_apply_asoc_delayed_ack()
2694 asoc->sackfreq = params->sack_freq; in sctp_apply_asoc_delayed_ack()
2695 asoc->param_flags = in sctp_apply_asoc_delayed_ack()
2696 sctp_spp_sackdelay_enable(asoc->param_flags); in sctp_apply_asoc_delayed_ack()
2699 list_for_each_entry(trans, &asoc->peer.transport_addr_list, in sctp_apply_asoc_delayed_ack()
2756 struct sctp_association *asoc; in __sctp_setsockopt_delayed_ack() local
2766 asoc = sctp_id2assoc(sk, params->sack_assoc_id); in __sctp_setsockopt_delayed_ack()
2767 if (!asoc && params->sack_assoc_id > SCTP_ALL_ASSOC && in __sctp_setsockopt_delayed_ack()
2771 if (asoc) { in __sctp_setsockopt_delayed_ack()
2772 sctp_apply_asoc_delayed_ack(params, asoc); in __sctp_setsockopt_delayed_ack()
2799 list_for_each_entry(asoc, &sp->ep->asocs, asocs) in __sctp_setsockopt_delayed_ack()
2800 sctp_apply_asoc_delayed_ack(params, asoc); in __sctp_setsockopt_delayed_ack()
2882 struct sctp_association *asoc; in sctp_setsockopt_default_send_param() local
2891 asoc = sctp_id2assoc(sk, info->sinfo_assoc_id); in sctp_setsockopt_default_send_param()
2892 if (!asoc && info->sinfo_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_default_send_param()
2896 if (asoc) { in sctp_setsockopt_default_send_param()
2897 asoc->default_stream = info->sinfo_stream; in sctp_setsockopt_default_send_param()
2898 asoc->default_flags = info->sinfo_flags; in sctp_setsockopt_default_send_param()
2899 asoc->default_ppid = info->sinfo_ppid; in sctp_setsockopt_default_send_param()
2900 asoc->default_context = info->sinfo_context; in sctp_setsockopt_default_send_param()
2901 asoc->default_timetolive = info->sinfo_timetolive; in sctp_setsockopt_default_send_param()
2920 list_for_each_entry(asoc, &sp->ep->asocs, asocs) { in sctp_setsockopt_default_send_param()
2921 asoc->default_stream = info->sinfo_stream; in sctp_setsockopt_default_send_param()
2922 asoc->default_flags = info->sinfo_flags; in sctp_setsockopt_default_send_param()
2923 asoc->default_ppid = info->sinfo_ppid; in sctp_setsockopt_default_send_param()
2924 asoc->default_context = info->sinfo_context; in sctp_setsockopt_default_send_param()
2925 asoc->default_timetolive = info->sinfo_timetolive; in sctp_setsockopt_default_send_param()
2940 struct sctp_association *asoc; in sctp_setsockopt_default_sndinfo() local
2949 asoc = sctp_id2assoc(sk, info->snd_assoc_id); in sctp_setsockopt_default_sndinfo()
2950 if (!asoc && info->snd_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_default_sndinfo()
2954 if (asoc) { in sctp_setsockopt_default_sndinfo()
2955 asoc->default_stream = info->snd_sid; in sctp_setsockopt_default_sndinfo()
2956 asoc->default_flags = info->snd_flags; in sctp_setsockopt_default_sndinfo()
2957 asoc->default_ppid = info->snd_ppid; in sctp_setsockopt_default_sndinfo()
2958 asoc->default_context = info->snd_context; in sctp_setsockopt_default_sndinfo()
2976 list_for_each_entry(asoc, &sp->ep->asocs, asocs) { in sctp_setsockopt_default_sndinfo()
2977 asoc->default_stream = info->snd_sid; in sctp_setsockopt_default_sndinfo()
2978 asoc->default_flags = info->snd_flags; in sctp_setsockopt_default_sndinfo()
2979 asoc->default_ppid = info->snd_ppid; in sctp_setsockopt_default_sndinfo()
2980 asoc->default_context = info->snd_context; in sctp_setsockopt_default_sndinfo()
3018 sctp_assoc_set_primary(trans->asoc, trans); in sctp_setsockopt_primary_addr()
3056 struct sctp_association *asoc; in sctp_setsockopt_rtoinfo() local
3063 asoc = sctp_id2assoc(sk, rtoinfo->srto_assoc_id); in sctp_setsockopt_rtoinfo()
3066 if (!asoc && rtoinfo->srto_assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_rtoinfo()
3074 rto_max = asoc ? msecs_to_jiffies(rto_max) : rto_max; in sctp_setsockopt_rtoinfo()
3076 rto_max = asoc ? asoc->rto_max : sp->rtoinfo.srto_max; in sctp_setsockopt_rtoinfo()
3079 rto_min = asoc ? msecs_to_jiffies(rto_min) : rto_min; in sctp_setsockopt_rtoinfo()
3081 rto_min = asoc ? asoc->rto_min : sp->rtoinfo.srto_min; in sctp_setsockopt_rtoinfo()
3086 if (asoc) { in sctp_setsockopt_rtoinfo()
3088 asoc->rto_initial = in sctp_setsockopt_rtoinfo()
3090 asoc->rto_max = rto_max; in sctp_setsockopt_rtoinfo()
3091 asoc->rto_min = rto_min; in sctp_setsockopt_rtoinfo()
3121 struct sctp_association *asoc; in sctp_setsockopt_associnfo() local
3126 asoc = sctp_id2assoc(sk, assocparams->sasoc_assoc_id); in sctp_setsockopt_associnfo()
3128 if (!asoc && assocparams->sasoc_assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_associnfo()
3133 if (asoc) { in sctp_setsockopt_associnfo()
3139 list_for_each_entry(peer_addr, &asoc->peer.transport_addr_list, in sctp_setsockopt_associnfo()
3154 asoc->max_retrans = assocparams->sasoc_asocmaxrxt; in sctp_setsockopt_associnfo()
3158 asoc->cookie_life = in sctp_setsockopt_associnfo()
3231 struct sctp_association *asoc; in sctp_setsockopt_maxseg() local
3250 asoc = sctp_id2assoc(sk, assoc_id); in sctp_setsockopt_maxseg()
3251 if (!asoc && assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_maxseg()
3257 __u16 datasize = asoc ? sctp_datachk_len(&asoc->stream) : in sctp_setsockopt_maxseg()
3267 if (asoc) { in sctp_setsockopt_maxseg()
3268 asoc->user_frag = val; in sctp_setsockopt_maxseg()
3269 sctp_assoc_update_frag_point(asoc); in sctp_setsockopt_maxseg()
3291 struct sctp_association *asoc = NULL; in sctp_setsockopt_peer_primary_addr() local
3304 asoc = sctp_id2assoc(sk, prim->sspp_assoc_id); in sctp_setsockopt_peer_primary_addr()
3305 if (!asoc) in sctp_setsockopt_peer_primary_addr()
3308 if (!asoc->peer.asconf_capable) in sctp_setsockopt_peer_primary_addr()
3311 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_SET_PRIMARY) in sctp_setsockopt_peer_primary_addr()
3314 if (!sctp_state(asoc, ESTABLISHED)) in sctp_setsockopt_peer_primary_addr()
3324 if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim->sspp_addr)) in sctp_setsockopt_peer_primary_addr()
3335 chunk = sctp_make_asconf_set_prim(asoc, in sctp_setsockopt_peer_primary_addr()
3340 err = sctp_send_asconf(asoc, chunk); in sctp_setsockopt_peer_primary_addr()
3378 struct sctp_association *asoc; in sctp_setsockopt_context() local
3383 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_context()
3384 if (!asoc && params->assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_context()
3388 if (asoc) { in sctp_setsockopt_context()
3389 asoc->default_rcv_context = params->assoc_value; in sctp_setsockopt_context()
3403 list_for_each_entry(asoc, &sp->ep->asocs, asocs) in sctp_setsockopt_context()
3404 asoc->default_rcv_context = params->assoc_value; in sctp_setsockopt_context()
3497 struct sctp_association *asoc; in sctp_setsockopt_maxburst() local
3515 asoc = sctp_id2assoc(sk, assoc_id); in sctp_setsockopt_maxburst()
3516 if (!asoc && assoc_id > SCTP_ALL_ASSOC && sctp_style(sk, UDP)) in sctp_setsockopt_maxburst()
3519 if (asoc) { in sctp_setsockopt_maxburst()
3520 asoc->max_burst = assoc_value; in sctp_setsockopt_maxburst()
3532 list_for_each_entry(asoc, &sp->ep->asocs, asocs) in sctp_setsockopt_maxburst()
3533 asoc->max_burst = assoc_value; in sctp_setsockopt_maxburst()
3609 struct sctp_association *asoc; in sctp_setsockopt_auth_key() local
3622 asoc = sctp_id2assoc(sk, authkey->sca_assoc_id); in sctp_setsockopt_auth_key()
3623 if (!asoc && authkey->sca_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_auth_key()
3627 if (asoc) { in sctp_setsockopt_auth_key()
3628 ret = sctp_auth_set_key(ep, asoc, authkey); in sctp_setsockopt_auth_key()
3637 ret = sctp_auth_set_key(ep, asoc, authkey); in sctp_setsockopt_auth_key()
3646 list_for_each_entry(asoc, &ep->asocs, asocs) { in sctp_setsockopt_auth_key()
3647 int res = sctp_auth_set_key(ep, asoc, authkey); in sctp_setsockopt_auth_key()
3670 struct sctp_association *asoc; in sctp_setsockopt_active_key() local
3676 asoc = sctp_id2assoc(sk, val->scact_assoc_id); in sctp_setsockopt_active_key()
3677 if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_active_key()
3681 if (asoc) in sctp_setsockopt_active_key()
3682 return sctp_auth_set_active_key(ep, asoc, val->scact_keynumber); in sctp_setsockopt_active_key()
3689 ret = sctp_auth_set_active_key(ep, asoc, val->scact_keynumber); in sctp_setsockopt_active_key()
3696 list_for_each_entry(asoc, &ep->asocs, asocs) { in sctp_setsockopt_active_key()
3697 int res = sctp_auth_set_active_key(ep, asoc, in sctp_setsockopt_active_key()
3718 struct sctp_association *asoc; in sctp_setsockopt_del_key() local
3724 asoc = sctp_id2assoc(sk, val->scact_assoc_id); in sctp_setsockopt_del_key()
3725 if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_del_key()
3729 if (asoc) in sctp_setsockopt_del_key()
3730 return sctp_auth_del_key_id(ep, asoc, val->scact_keynumber); in sctp_setsockopt_del_key()
3737 ret = sctp_auth_del_key_id(ep, asoc, val->scact_keynumber); in sctp_setsockopt_del_key()
3744 list_for_each_entry(asoc, &ep->asocs, asocs) { in sctp_setsockopt_del_key()
3745 int res = sctp_auth_del_key_id(ep, asoc, in sctp_setsockopt_del_key()
3766 struct sctp_association *asoc; in sctp_setsockopt_deactivate_key() local
3772 asoc = sctp_id2assoc(sk, val->scact_assoc_id); in sctp_setsockopt_deactivate_key()
3773 if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_deactivate_key()
3777 if (asoc) in sctp_setsockopt_deactivate_key()
3778 return sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber); in sctp_setsockopt_deactivate_key()
3785 ret = sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber); in sctp_setsockopt_deactivate_key()
3792 list_for_each_entry(asoc, &ep->asocs, asocs) { in sctp_setsockopt_deactivate_key()
3793 int res = sctp_auth_deact_key_id(ep, asoc, in sctp_setsockopt_deactivate_key()
3855 struct sctp_association *asoc; in sctp_setsockopt_paddr_thresholds() local
3880 asoc = sctp_id2assoc(sk, val->spt_assoc_id); in sctp_setsockopt_paddr_thresholds()
3881 if (!asoc && val->spt_assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_paddr_thresholds()
3885 if (asoc) { in sctp_setsockopt_paddr_thresholds()
3886 list_for_each_entry(trans, &asoc->peer.transport_addr_list, in sctp_setsockopt_paddr_thresholds()
3896 asoc->pathmaxrxt = val->spt_pathmaxrxt; in sctp_setsockopt_paddr_thresholds()
3898 asoc->ps_retrans = val->spt_pathcpthld; in sctp_setsockopt_paddr_thresholds()
3899 asoc->pf_retrans = val->spt_pathpfthld; in sctp_setsockopt_paddr_thresholds()
3939 struct sctp_association *asoc; in sctp_setsockopt_pr_supported() local
3944 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_pr_supported()
3945 if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_pr_supported()
3959 struct sctp_association *asoc; in sctp_setsockopt_default_prinfo() local
3971 asoc = sctp_id2assoc(sk, info->pr_assoc_id); in sctp_setsockopt_default_prinfo()
3972 if (!asoc && info->pr_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_default_prinfo()
3978 if (asoc) { in sctp_setsockopt_default_prinfo()
3979 SCTP_PR_SET_POLICY(asoc->default_flags, info->pr_policy); in sctp_setsockopt_default_prinfo()
3980 asoc->default_timetolive = info->pr_value; in sctp_setsockopt_default_prinfo()
3995 list_for_each_entry(asoc, &sp->ep->asocs, asocs) { in sctp_setsockopt_default_prinfo()
3996 SCTP_PR_SET_POLICY(asoc->default_flags, in sctp_setsockopt_default_prinfo()
3998 asoc->default_timetolive = info->pr_value; in sctp_setsockopt_default_prinfo()
4010 struct sctp_association *asoc; in sctp_setsockopt_reconfig_supported() local
4016 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_reconfig_supported()
4017 if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_reconfig_supported()
4034 struct sctp_association *asoc; in sctp_setsockopt_enable_strreset() local
4043 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_enable_strreset()
4044 if (!asoc && params->assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_enable_strreset()
4050 if (asoc) { in sctp_setsockopt_enable_strreset()
4051 asoc->strreset_enable = params->assoc_value; in sctp_setsockopt_enable_strreset()
4064 list_for_each_entry(asoc, &ep->asocs, asocs) in sctp_setsockopt_enable_strreset()
4065 asoc->strreset_enable = params->assoc_value; in sctp_setsockopt_enable_strreset()
4075 struct sctp_association *asoc; in sctp_setsockopt_reset_streams() local
4087 asoc = sctp_id2assoc(sk, params->srs_assoc_id); in sctp_setsockopt_reset_streams()
4088 if (!asoc) in sctp_setsockopt_reset_streams()
4091 return sctp_send_reset_streams(asoc, params); in sctp_setsockopt_reset_streams()
4097 struct sctp_association *asoc; in sctp_setsockopt_reset_assoc() local
4102 asoc = sctp_id2assoc(sk, *associd); in sctp_setsockopt_reset_assoc()
4103 if (!asoc) in sctp_setsockopt_reset_assoc()
4106 return sctp_send_reset_assoc(asoc); in sctp_setsockopt_reset_assoc()
4113 struct sctp_association *asoc; in sctp_setsockopt_add_streams() local
4118 asoc = sctp_id2assoc(sk, params->sas_assoc_id); in sctp_setsockopt_add_streams()
4119 if (!asoc) in sctp_setsockopt_add_streams()
4122 return sctp_send_add_streams(asoc, params); in sctp_setsockopt_add_streams()
4130 struct sctp_association *asoc; in sctp_setsockopt_scheduler() local
4139 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_scheduler()
4140 if (!asoc && params->assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_scheduler()
4144 if (asoc) in sctp_setsockopt_scheduler()
4145 return sctp_sched_set_sched(asoc, params->assoc_value); in sctp_setsockopt_scheduler()
4156 list_for_each_entry(asoc, &sp->ep->asocs, asocs) { in sctp_setsockopt_scheduler()
4157 int ret = sctp_sched_set_sched(asoc, in sctp_setsockopt_scheduler()
4172 struct sctp_association *asoc; in sctp_setsockopt_scheduler_value() local
4178 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_scheduler_value()
4179 if (!asoc && params->assoc_id != SCTP_CURRENT_ASSOC && in sctp_setsockopt_scheduler_value()
4183 if (asoc) { in sctp_setsockopt_scheduler_value()
4184 retval = sctp_sched_set_value(asoc, params->stream_id, in sctp_setsockopt_scheduler_value()
4191 list_for_each_entry(asoc, &sctp_sk(sk)->ep->asocs, asocs) { in sctp_setsockopt_scheduler_value()
4192 int ret = sctp_sched_set_value(asoc, params->stream_id, in sctp_setsockopt_scheduler_value()
4208 struct sctp_association *asoc; in sctp_setsockopt_interleaving_supported() local
4213 asoc = sctp_id2assoc(sk, p->assoc_id); in sctp_setsockopt_interleaving_supported()
4214 if (!asoc && p->assoc_id != SCTP_FUTURE_ASSOC && sctp_style(sk, UDP)) in sctp_setsockopt_interleaving_supported()
4243 struct sctp_association *asoc) in sctp_assoc_ulpevent_type_set() argument
4247 sctp_ulpevent_type_set(&asoc->subscribe, param->se_type, param->se_on); in sctp_assoc_ulpevent_type_set()
4250 if (sctp_outq_is_empty(&asoc->outqueue)) { in sctp_assoc_ulpevent_type_set()
4251 event = sctp_ulpevent_make_sender_dry_event(asoc, in sctp_assoc_ulpevent_type_set()
4256 asoc->stream.si->enqueue_event(&asoc->ulpq, event); in sctp_assoc_ulpevent_type_set()
4267 struct sctp_association *asoc; in sctp_setsockopt_event() local
4277 asoc = sctp_id2assoc(sk, param->se_assoc_id); in sctp_setsockopt_event()
4278 if (!asoc && param->se_assoc_id > SCTP_ALL_ASSOC && in sctp_setsockopt_event()
4282 if (asoc) in sctp_setsockopt_event()
4283 return sctp_assoc_ulpevent_type_set(param, asoc); in sctp_setsockopt_event()
4295 list_for_each_entry(asoc, &sp->ep->asocs, asocs) { in sctp_setsockopt_event()
4296 int ret = sctp_assoc_ulpevent_type_set(param, asoc); in sctp_setsockopt_event()
4310 struct sctp_association *asoc; in sctp_setsockopt_asconf_supported() local
4317 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_asconf_supported()
4318 if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_asconf_supported()
4340 struct sctp_association *asoc; in sctp_setsockopt_auth_supported() local
4347 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_auth_supported()
4348 if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_auth_supported()
4374 struct sctp_association *asoc; in sctp_setsockopt_ecn_supported() local
4380 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_ecn_supported()
4381 if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_ecn_supported()
4396 struct sctp_association *asoc; in sctp_setsockopt_pf_expose() local
4405 asoc = sctp_id2assoc(sk, params->assoc_id); in sctp_setsockopt_pf_expose()
4406 if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC && in sctp_setsockopt_pf_expose()
4410 if (asoc) in sctp_setsockopt_pf_expose()
4411 asoc->pf_expose = params->assoc_value; in sctp_setsockopt_pf_expose()
4714 struct sctp_association *asoc; in sctp_accept() local
4742 asoc = list_entry(ep->asocs.next, struct sctp_association, asocs); in sctp_accept()
4744 newsk = sp->pf->create_accept_sk(sk, asoc, kern); in sctp_accept()
4753 error = sctp_sock_migrate(sk, newsk, asoc, SCTP_SOCKET_TCP); in sctp_accept()
5025 struct sctp_association *asoc; in sctp_shutdown() local
5028 asoc = list_entry(ep->asocs.next, in sctp_shutdown()
5030 sctp_primitive_SHUTDOWN(net, asoc, NULL); in sctp_shutdown()
5034 int sctp_get_sctp_info(struct sock *sk, struct sctp_association *asoc, in sctp_get_sctp_info() argument
5042 if (!asoc) { in sctp_get_sctp_info()
5057 info->sctpi_tag = asoc->c.my_vtag; in sctp_get_sctp_info()
5058 info->sctpi_state = asoc->state; in sctp_get_sctp_info()
5059 info->sctpi_rwnd = asoc->a_rwnd; in sctp_get_sctp_info()
5060 info->sctpi_unackdata = asoc->unack_data; in sctp_get_sctp_info()
5061 info->sctpi_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map); in sctp_get_sctp_info()
5062 info->sctpi_instrms = asoc->stream.incnt; in sctp_get_sctp_info()
5063 info->sctpi_outstrms = asoc->stream.outcnt; in sctp_get_sctp_info()
5064 list_for_each(pos, &asoc->base.inqueue.in_chunk_list) in sctp_get_sctp_info()
5066 list_for_each(pos, &asoc->outqueue.out_chunk_list) in sctp_get_sctp_info()
5068 info->sctpi_overall_error = asoc->overall_error_count; in sctp_get_sctp_info()
5069 info->sctpi_max_burst = asoc->max_burst; in sctp_get_sctp_info()
5070 info->sctpi_maxseg = asoc->frag_point; in sctp_get_sctp_info()
5071 info->sctpi_peer_rwnd = asoc->peer.rwnd; in sctp_get_sctp_info()
5072 info->sctpi_peer_tag = asoc->c.peer_vtag; in sctp_get_sctp_info()
5074 mask = asoc->peer.ecn_capable << 1; in sctp_get_sctp_info()
5075 mask = (mask | asoc->peer.ipv4_address) << 1; in sctp_get_sctp_info()
5076 mask = (mask | asoc->peer.ipv6_address) << 1; in sctp_get_sctp_info()
5077 mask = (mask | asoc->peer.hostname_address) << 1; in sctp_get_sctp_info()
5078 mask = (mask | asoc->peer.asconf_capable) << 1; in sctp_get_sctp_info()
5079 mask = (mask | asoc->peer.prsctp_capable) << 1; in sctp_get_sctp_info()
5080 mask = (mask | asoc->peer.auth_capable); in sctp_get_sctp_info()
5082 mask = asoc->peer.sack_needed << 1; in sctp_get_sctp_info()
5083 mask = (mask | asoc->peer.sack_generation) << 1; in sctp_get_sctp_info()
5084 mask = (mask | asoc->peer.zero_window_announced); in sctp_get_sctp_info()
5087 info->sctpi_isacks = asoc->stats.isacks; in sctp_get_sctp_info()
5088 info->sctpi_osacks = asoc->stats.osacks; in sctp_get_sctp_info()
5089 info->sctpi_opackets = asoc->stats.opackets; in sctp_get_sctp_info()
5090 info->sctpi_ipackets = asoc->stats.ipackets; in sctp_get_sctp_info()
5091 info->sctpi_rtxchunks = asoc->stats.rtxchunks; in sctp_get_sctp_info()
5092 info->sctpi_outofseqtsns = asoc->stats.outofseqtsns; in sctp_get_sctp_info()
5093 info->sctpi_idupchunks = asoc->stats.idupchunks; in sctp_get_sctp_info()
5094 info->sctpi_gapcnt = asoc->stats.gapcnt; in sctp_get_sctp_info()
5095 info->sctpi_ouodchunks = asoc->stats.ouodchunks; in sctp_get_sctp_info()
5096 info->sctpi_iuodchunks = asoc->stats.iuodchunks; in sctp_get_sctp_info()
5097 info->sctpi_oodchunks = asoc->stats.oodchunks; in sctp_get_sctp_info()
5098 info->sctpi_iodchunks = asoc->stats.iodchunks; in sctp_get_sctp_info()
5099 info->sctpi_octrlchunks = asoc->stats.octrlchunks; in sctp_get_sctp_info()
5100 info->sctpi_ictrlchunks = asoc->stats.ictrlchunks; in sctp_get_sctp_info()
5102 prim = asoc->peer.primary_path; in sctp_get_sctp_info()
5150 if (net_eq(t->asoc->base.net, net) && in sctp_transport_get_next()
5151 t->asoc->peer.primary_path == t) in sctp_transport_get_next()
5267 struct sctp_association *asoc = NULL; in sctp_getsockopt_sctp_status() local
5284 asoc = sctp_id2assoc(sk, associd); in sctp_getsockopt_sctp_status()
5285 if (!asoc) { in sctp_getsockopt_sctp_status()
5290 transport = asoc->peer.primary_path; in sctp_getsockopt_sctp_status()
5292 status.sstat_assoc_id = sctp_assoc2id(asoc); in sctp_getsockopt_sctp_status()
5293 status.sstat_state = sctp_assoc_to_state(asoc); in sctp_getsockopt_sctp_status()
5294 status.sstat_rwnd = asoc->peer.rwnd; in sctp_getsockopt_sctp_status()
5295 status.sstat_unackdata = asoc->unack_data; in sctp_getsockopt_sctp_status()
5297 status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map); in sctp_getsockopt_sctp_status()
5298 status.sstat_instrms = asoc->stream.incnt; in sctp_getsockopt_sctp_status()
5299 status.sstat_outstrms = asoc->stream.outcnt; in sctp_getsockopt_sctp_status()
5300 status.sstat_fragmentation_point = asoc->frag_point; in sctp_getsockopt_sctp_status()
5301 status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc); in sctp_getsockopt_sctp_status()
5369 transport->asoc->pf_expose == SCTP_PF_EXPOSE_DISABLE) { in sctp_getsockopt_peer_addr_info()
5374 pinfo.spinfo_assoc_id = sctp_assoc2id(transport->asoc); in sctp_getsockopt_peer_addr_info()
5480 struct sctp_association *asoc = sctp_id2assoc(sk, id); in sctp_do_peeloff() local
5489 if (!asoc) in sctp_do_peeloff()
5503 sctp_copy_sock(sock->sk, sk, asoc); in sctp_do_peeloff()
5509 sp->pf->to_sk_daddr(&asoc->peer.primary_addr, sk); in sctp_do_peeloff()
5515 err = sctp_sock_migrate(sk, sock->sk, asoc, in sctp_do_peeloff()
5769 struct sctp_association *asoc = NULL; in sctp_getsockopt_peer_addr_params() local
5800 asoc = sctp_id2assoc(sk, params.spp_assoc_id); in sctp_getsockopt_peer_addr_params()
5801 if (!asoc && params.spp_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_peer_addr_params()
5825 } else if (asoc) { in sctp_getsockopt_peer_addr_params()
5827 params.spp_hbinterval = jiffies_to_msecs(asoc->hbinterval); in sctp_getsockopt_peer_addr_params()
5828 params.spp_pathmtu = asoc->pathmtu; in sctp_getsockopt_peer_addr_params()
5829 params.spp_pathmaxrxt = asoc->pathmaxrxt; in sctp_getsockopt_peer_addr_params()
5830 params.spp_sackdelay = jiffies_to_msecs(asoc->sackdelay); in sctp_getsockopt_peer_addr_params()
5833 params.spp_flags = asoc->param_flags; in sctp_getsockopt_peer_addr_params()
5834 if (asoc->flowlabel & SCTP_FLOWLABEL_SET_MASK) { in sctp_getsockopt_peer_addr_params()
5835 params.spp_ipv6_flowlabel = asoc->flowlabel & in sctp_getsockopt_peer_addr_params()
5839 if (asoc->dscp & SCTP_DSCP_SET_MASK) { in sctp_getsockopt_peer_addr_params()
5840 params.spp_dscp = asoc->dscp & SCTP_DSCP_VAL_MASK; in sctp_getsockopt_peer_addr_params()
5912 struct sctp_association *asoc = NULL; in sctp_getsockopt_delayed_ack() local
5935 asoc = sctp_id2assoc(sk, params.sack_assoc_id); in sctp_getsockopt_delayed_ack()
5936 if (!asoc && params.sack_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_delayed_ack()
5940 if (asoc) { in sctp_getsockopt_delayed_ack()
5942 if (asoc->param_flags & SPP_SACKDELAY_ENABLE) { in sctp_getsockopt_delayed_ack()
5943 params.sack_delay = jiffies_to_msecs(asoc->sackdelay); in sctp_getsockopt_delayed_ack()
5944 params.sack_freq = asoc->sackfreq; in sctp_getsockopt_delayed_ack()
5997 struct sctp_association *asoc; in sctp_getsockopt_peer_addrs() local
6015 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); in sctp_getsockopt_peer_addrs()
6016 if (!asoc) in sctp_getsockopt_peer_addrs()
6022 list_for_each_entry(from, &asoc->peer.transport_addr_list, in sctp_getsockopt_peer_addrs()
6094 struct sctp_association *asoc; in sctp_getsockopt_local_addrs() local
6123 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); in sctp_getsockopt_local_addrs()
6124 if (!asoc) in sctp_getsockopt_local_addrs()
6126 bp = &asoc->base.bind_addr; in sctp_getsockopt_local_addrs()
6202 struct sctp_association *asoc; in sctp_getsockopt_primary_addr() local
6213 asoc = sctp_id2assoc(sk, prim.ssp_assoc_id); in sctp_getsockopt_primary_addr()
6214 if (!asoc) in sctp_getsockopt_primary_addr()
6217 if (!asoc->peer.primary_path) in sctp_getsockopt_primary_addr()
6220 memcpy(&prim.ssp_addr, &asoc->peer.primary_path->ipaddr, in sctp_getsockopt_primary_addr()
6221 asoc->peer.primary_path->af_specific->sockaddr_len); in sctp_getsockopt_primary_addr()
6284 struct sctp_association *asoc; in sctp_getsockopt_default_send_param() local
6295 asoc = sctp_id2assoc(sk, info.sinfo_assoc_id); in sctp_getsockopt_default_send_param()
6296 if (!asoc && info.sinfo_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_default_send_param()
6300 if (asoc) { in sctp_getsockopt_default_send_param()
6301 info.sinfo_stream = asoc->default_stream; in sctp_getsockopt_default_send_param()
6302 info.sinfo_flags = asoc->default_flags; in sctp_getsockopt_default_send_param()
6303 info.sinfo_ppid = asoc->default_ppid; in sctp_getsockopt_default_send_param()
6304 info.sinfo_context = asoc->default_context; in sctp_getsockopt_default_send_param()
6305 info.sinfo_timetolive = asoc->default_timetolive; in sctp_getsockopt_default_send_param()
6330 struct sctp_association *asoc; in sctp_getsockopt_default_sndinfo() local
6341 asoc = sctp_id2assoc(sk, info.snd_assoc_id); in sctp_getsockopt_default_sndinfo()
6342 if (!asoc && info.snd_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_default_sndinfo()
6346 if (asoc) { in sctp_getsockopt_default_sndinfo()
6347 info.snd_sid = asoc->default_stream; in sctp_getsockopt_default_sndinfo()
6348 info.snd_flags = asoc->default_flags; in sctp_getsockopt_default_sndinfo()
6349 info.snd_ppid = asoc->default_ppid; in sctp_getsockopt_default_sndinfo()
6350 info.snd_context = asoc->default_context; in sctp_getsockopt_default_sndinfo()
6409 struct sctp_association *asoc; in sctp_getsockopt_rtoinfo() local
6419 asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id); in sctp_getsockopt_rtoinfo()
6421 if (!asoc && rtoinfo.srto_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_rtoinfo()
6426 if (asoc) { in sctp_getsockopt_rtoinfo()
6427 rtoinfo.srto_initial = jiffies_to_msecs(asoc->rto_initial); in sctp_getsockopt_rtoinfo()
6428 rtoinfo.srto_max = jiffies_to_msecs(asoc->rto_max); in sctp_getsockopt_rtoinfo()
6429 rtoinfo.srto_min = jiffies_to_msecs(asoc->rto_min); in sctp_getsockopt_rtoinfo()
6465 struct sctp_association *asoc; in sctp_getsockopt_associnfo() local
6477 asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id); in sctp_getsockopt_associnfo()
6479 if (!asoc && assocparams.sasoc_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_associnfo()
6484 if (asoc) { in sctp_getsockopt_associnfo()
6485 assocparams.sasoc_asocmaxrxt = asoc->max_retrans; in sctp_getsockopt_associnfo()
6486 assocparams.sasoc_peer_rwnd = asoc->peer.rwnd; in sctp_getsockopt_associnfo()
6487 assocparams.sasoc_local_rwnd = asoc->a_rwnd; in sctp_getsockopt_associnfo()
6488 assocparams.sasoc_cookie_life = ktime_to_ms(asoc->cookie_life); in sctp_getsockopt_associnfo()
6490 list_for_each(pos, &asoc->peer.transport_addr_list) { in sctp_getsockopt_associnfo()
6555 struct sctp_association *asoc; in sctp_getsockopt_context() local
6565 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_context()
6566 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_context()
6570 params.assoc_value = asoc ? asoc->default_rcv_context in sctp_getsockopt_context()
6612 struct sctp_association *asoc; in sctp_getsockopt_maxseg() local
6628 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_maxseg()
6629 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_maxseg()
6633 if (asoc) in sctp_getsockopt_maxseg()
6634 params.assoc_value = asoc->frag_point; in sctp_getsockopt_maxseg()
6707 struct sctp_association *asoc; in sctp_getsockopt_maxburst() local
6723 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_maxburst()
6724 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_maxburst()
6728 params.assoc_value = asoc ? asoc->max_burst : sctp_sk(sk)->max_burst; in sctp_getsockopt_maxburst()
6783 struct sctp_association *asoc; in sctp_getsockopt_active_key() local
6792 asoc = sctp_id2assoc(sk, val.scact_assoc_id); in sctp_getsockopt_active_key()
6793 if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP)) in sctp_getsockopt_active_key()
6796 if (asoc) { in sctp_getsockopt_active_key()
6797 if (!asoc->peer.auth_capable) in sctp_getsockopt_active_key()
6799 val.scact_keynumber = asoc->active_key_id; in sctp_getsockopt_active_key()
6819 struct sctp_association *asoc; in sctp_getsockopt_peer_auth_chunks() local
6831 asoc = sctp_id2assoc(sk, val.gauth_assoc_id); in sctp_getsockopt_peer_auth_chunks()
6832 if (!asoc) in sctp_getsockopt_peer_auth_chunks()
6835 if (!asoc->peer.auth_capable) in sctp_getsockopt_peer_auth_chunks()
6838 ch = asoc->peer.peer_chunks; in sctp_getsockopt_peer_auth_chunks()
6864 struct sctp_association *asoc; in sctp_getsockopt_local_auth_chunks() local
6876 asoc = sctp_id2assoc(sk, val.gauth_assoc_id); in sctp_getsockopt_local_auth_chunks()
6877 if (!asoc && val.gauth_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_local_auth_chunks()
6881 if (asoc) { in sctp_getsockopt_local_auth_chunks()
6882 if (!asoc->peer.auth_capable) in sctp_getsockopt_local_auth_chunks()
6884 ch = (struct sctp_chunks_param *)asoc->c.auth_chunks; in sctp_getsockopt_local_auth_chunks()
6918 struct sctp_association *asoc; in sctp_getsockopt_assoc_number() local
6929 list_for_each_entry(asoc, &(sp->ep->asocs), asocs) { in sctp_getsockopt_assoc_number()
6974 struct sctp_association *asoc; in sctp_getsockopt_assoc_ids() local
6984 list_for_each_entry(asoc, &(sp->ep->asocs), asocs) { in sctp_getsockopt_assoc_ids()
6999 list_for_each_entry(asoc, &(sp->ep->asocs), asocs) { in sctp_getsockopt_assoc_ids()
7000 ids->gaids_assoc_id[num++] = asoc->assoc_id; in sctp_getsockopt_assoc_ids()
7025 struct sctp_association *asoc; in sctp_getsockopt_paddr_thresholds() local
7048 asoc = sctp_id2assoc(sk, val.spt_assoc_id); in sctp_getsockopt_paddr_thresholds()
7049 if (!asoc && val.spt_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_paddr_thresholds()
7053 if (asoc) { in sctp_getsockopt_paddr_thresholds()
7054 val.spt_pathpfthld = asoc->pf_retrans; in sctp_getsockopt_paddr_thresholds()
7055 val.spt_pathmaxrxt = asoc->pathmaxrxt; in sctp_getsockopt_paddr_thresholds()
7056 val.spt_pathcpthld = asoc->ps_retrans; in sctp_getsockopt_paddr_thresholds()
7083 struct sctp_association *asoc = NULL; in sctp_getsockopt_assoc_stats() local
7095 asoc = sctp_id2assoc(sk, sas.sas_assoc_id); in sctp_getsockopt_assoc_stats()
7096 if (!asoc) in sctp_getsockopt_assoc_stats()
7099 sas.sas_rtxchunks = asoc->stats.rtxchunks; in sctp_getsockopt_assoc_stats()
7100 sas.sas_gapcnt = asoc->stats.gapcnt; in sctp_getsockopt_assoc_stats()
7101 sas.sas_outofseqtsns = asoc->stats.outofseqtsns; in sctp_getsockopt_assoc_stats()
7102 sas.sas_osacks = asoc->stats.osacks; in sctp_getsockopt_assoc_stats()
7103 sas.sas_isacks = asoc->stats.isacks; in sctp_getsockopt_assoc_stats()
7104 sas.sas_octrlchunks = asoc->stats.octrlchunks; in sctp_getsockopt_assoc_stats()
7105 sas.sas_ictrlchunks = asoc->stats.ictrlchunks; in sctp_getsockopt_assoc_stats()
7106 sas.sas_oodchunks = asoc->stats.oodchunks; in sctp_getsockopt_assoc_stats()
7107 sas.sas_iodchunks = asoc->stats.iodchunks; in sctp_getsockopt_assoc_stats()
7108 sas.sas_ouodchunks = asoc->stats.ouodchunks; in sctp_getsockopt_assoc_stats()
7109 sas.sas_iuodchunks = asoc->stats.iuodchunks; in sctp_getsockopt_assoc_stats()
7110 sas.sas_idupchunks = asoc->stats.idupchunks; in sctp_getsockopt_assoc_stats()
7111 sas.sas_opackets = asoc->stats.opackets; in sctp_getsockopt_assoc_stats()
7112 sas.sas_ipackets = asoc->stats.ipackets; in sctp_getsockopt_assoc_stats()
7118 sas.sas_maxrto = asoc->stats.max_obs_rto; in sctp_getsockopt_assoc_stats()
7119 memcpy(&sas.sas_obs_rto_ipaddr, &asoc->stats.obs_rto_ipaddr, in sctp_getsockopt_assoc_stats()
7123 asoc->stats.max_obs_rto = asoc->rto_min; in sctp_getsockopt_assoc_stats()
7181 struct sctp_association *asoc; in sctp_getsockopt_pr_supported() local
7193 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_pr_supported()
7194 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_pr_supported()
7200 params.assoc_value = asoc ? asoc->peer.prsctp_capable in sctp_getsockopt_pr_supported()
7220 struct sctp_association *asoc; in sctp_getsockopt_default_prinfo() local
7232 asoc = sctp_id2assoc(sk, info.pr_assoc_id); in sctp_getsockopt_default_prinfo()
7233 if (!asoc && info.pr_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_default_prinfo()
7239 if (asoc) { in sctp_getsockopt_default_prinfo()
7240 info.pr_policy = SCTP_PR_POLICY(asoc->default_flags); in sctp_getsockopt_default_prinfo()
7241 info.pr_value = asoc->default_timetolive; in sctp_getsockopt_default_prinfo()
7266 struct sctp_association *asoc; in sctp_getsockopt_pr_assocstatus() local
7284 asoc = sctp_id2assoc(sk, params.sprstat_assoc_id); in sctp_getsockopt_pr_assocstatus()
7285 if (!asoc) in sctp_getsockopt_pr_assocstatus()
7293 asoc->abandoned_unsent[policy]; in sctp_getsockopt_pr_assocstatus()
7295 asoc->abandoned_sent[policy]; in sctp_getsockopt_pr_assocstatus()
7299 asoc->abandoned_unsent[__SCTP_PR_INDEX(policy)]; in sctp_getsockopt_pr_assocstatus()
7301 asoc->abandoned_sent[__SCTP_PR_INDEX(policy)]; in sctp_getsockopt_pr_assocstatus()
7325 struct sctp_association *asoc; in sctp_getsockopt_pr_streamstatus() local
7344 asoc = sctp_id2assoc(sk, params.sprstat_assoc_id); in sctp_getsockopt_pr_streamstatus()
7345 if (!asoc || params.sprstat_sid >= asoc->stream.outcnt) in sctp_getsockopt_pr_streamstatus()
7348 streamoute = SCTP_SO(&asoc->stream, params.sprstat_sid)->ext; in sctp_getsockopt_pr_streamstatus()
7389 struct sctp_association *asoc; in sctp_getsockopt_reconfig_supported() local
7401 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_reconfig_supported()
7402 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_reconfig_supported()
7408 params.assoc_value = asoc ? asoc->peer.reconf_capable in sctp_getsockopt_reconfig_supported()
7428 struct sctp_association *asoc; in sctp_getsockopt_enable_strreset() local
7440 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_enable_strreset()
7441 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_enable_strreset()
7447 params.assoc_value = asoc ? asoc->strreset_enable in sctp_getsockopt_enable_strreset()
7467 struct sctp_association *asoc; in sctp_getsockopt_scheduler() local
7479 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_scheduler()
7480 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_scheduler()
7486 params.assoc_value = asoc ? sctp_sched_get_sched(asoc) in sctp_getsockopt_scheduler()
7506 struct sctp_association *asoc; in sctp_getsockopt_scheduler_value() local
7518 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_scheduler_value()
7519 if (!asoc) { in sctp_getsockopt_scheduler_value()
7524 retval = sctp_sched_get_value(asoc, params.stream_id, in sctp_getsockopt_scheduler_value()
7548 struct sctp_association *asoc; in sctp_getsockopt_interleaving_supported() local
7560 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_interleaving_supported()
7561 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_interleaving_supported()
7567 params.assoc_value = asoc ? asoc->peer.intl_capable in sctp_getsockopt_interleaving_supported()
7605 struct sctp_association *asoc; in sctp_getsockopt_event() local
7620 asoc = sctp_id2assoc(sk, param.se_assoc_id); in sctp_getsockopt_event()
7621 if (!asoc && param.se_assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_event()
7625 subscribe = asoc ? asoc->subscribe : sctp_sk(sk)->subscribe; in sctp_getsockopt_event()
7642 struct sctp_association *asoc; in sctp_getsockopt_asconf_supported() local
7654 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_asconf_supported()
7655 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_asconf_supported()
7661 params.assoc_value = asoc ? asoc->peer.asconf_capable in sctp_getsockopt_asconf_supported()
7681 struct sctp_association *asoc; in sctp_getsockopt_auth_supported() local
7693 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_auth_supported()
7694 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_auth_supported()
7700 params.assoc_value = asoc ? asoc->peer.auth_capable in sctp_getsockopt_auth_supported()
7720 struct sctp_association *asoc; in sctp_getsockopt_ecn_supported() local
7732 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_ecn_supported()
7733 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_ecn_supported()
7739 params.assoc_value = asoc ? asoc->peer.ecn_capable in sctp_getsockopt_ecn_supported()
7759 struct sctp_association *asoc; in sctp_getsockopt_pf_expose() local
7771 asoc = sctp_id2assoc(sk, params.assoc_id); in sctp_getsockopt_pf_expose()
7772 if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC && in sctp_getsockopt_pf_expose()
7778 params.assoc_value = asoc ? asoc->pf_expose in sctp_getsockopt_pf_expose()
8786 static void __sctp_write_space(struct sctp_association *asoc) in __sctp_write_space() argument
8788 struct sock *sk = asoc->base.sk; in __sctp_write_space()
8790 if (sctp_wspace(asoc) <= 0) in __sctp_write_space()
8793 if (waitqueue_active(&asoc->wait)) in __sctp_write_space()
8794 wake_up_interruptible(&asoc->wait); in __sctp_write_space()
8817 struct sctp_association *asoc) in sctp_wake_up_waiters() argument
8819 struct sctp_association *tmp = asoc; in sctp_wake_up_waiters()
8824 if (asoc->ep->sndbuf_policy) in sctp_wake_up_waiters()
8825 return __sctp_write_space(asoc); in sctp_wake_up_waiters()
8830 if (asoc->base.dead) in sctp_wake_up_waiters()
8851 if (tmp == asoc) in sctp_wake_up_waiters()
8863 struct sctp_association *asoc = chunk->asoc; in sctp_wfree() local
8864 struct sock *sk = asoc->base.sk; in sctp_wfree()
8868 asoc->sndbuf_used -= skb->truesize + sizeof(struct sctp_chunk); in sctp_wfree()
8883 ev = sctp_ulpevent_make_authkey(asoc, shkey->key_id, in sctp_wfree()
8887 asoc->stream.si->enqueue_event(&asoc->ulpq, ev); in sctp_wfree()
8893 sctp_wake_up_waiters(sk, asoc); in sctp_wfree()
8895 sctp_association_put(asoc); in sctp_wfree()
8918 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p, in sctp_wait_for_sndbuf() argument
8921 struct sock *sk = asoc->base.sk; in sctp_wait_for_sndbuf()
8926 pr_debug("%s: asoc:%p, timeo:%ld, msg_len:%zu\n", __func__, asoc, in sctp_wait_for_sndbuf()
8930 sctp_association_hold(asoc); in sctp_wait_for_sndbuf()
8934 prepare_to_wait_exclusive(&asoc->wait, &wait, in sctp_wait_for_sndbuf()
8936 if (asoc->base.dead) in sctp_wait_for_sndbuf()
8940 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING) in sctp_wait_for_sndbuf()
8946 if ((int)msg_len <= sctp_wspace(asoc) && in sctp_wait_for_sndbuf()
8956 if (sk != asoc->base.sk) in sctp_wait_for_sndbuf()
8963 finish_wait(&asoc->wait, &wait); in sctp_wait_for_sndbuf()
8966 sctp_association_put(asoc); in sctp_wait_for_sndbuf()
9003 struct sctp_association *asoc; in sctp_write_space() local
9006 list_for_each_entry(asoc, &((sctp_sk(sk))->ep->asocs), asocs) { in sctp_write_space()
9007 __sctp_write_space(asoc); in sctp_write_space()
9030 static int sctp_wait_for_connect(struct sctp_association *asoc, long *timeo_p) in sctp_wait_for_connect() argument
9032 struct sock *sk = asoc->base.sk; in sctp_wait_for_connect()
9037 pr_debug("%s: asoc:%p, timeo:%ld\n", __func__, asoc, *timeo_p); in sctp_wait_for_connect()
9040 sctp_association_hold(asoc); in sctp_wait_for_connect()
9043 prepare_to_wait_exclusive(&asoc->wait, &wait, in sctp_wait_for_connect()
9049 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING || in sctp_wait_for_connect()
9050 asoc->base.dead) in sctp_wait_for_connect()
9055 if (sctp_state(asoc, ESTABLISHED)) in sctp_wait_for_connect()
9069 finish_wait(&asoc->wait, &wait); in sctp_wait_for_connect()
9072 sctp_association_put(asoc); in sctp_wait_for_connect()
9077 if (asoc->init_err_counter + 1 > asoc->max_init_attempts) in sctp_wait_for_connect()
9165 struct sctp_association *asoc) in sctp_copy_sock() argument
9201 newinet->inet_dport = htons(asoc->peer.port); in sctp_copy_sock()
9293 if (event->asoc == assoc) { in sctp_sock_migrate()
9322 if (event->asoc == assoc) { in sctp_sock_migrate()