Lines Matching refs:subflow

65 	if (!msk->subflow || READ_ONCE(msk->can_ack))  in __mptcp_nmpc_socket()
68 return msk->subflow; in __mptcp_nmpc_socket()
103 struct mptcp_subflow_context *subflow; in __mptcp_socket_create() local
113 msk->subflow = ssock; in __mptcp_socket_create()
114 subflow = mptcp_subflow_ctx(ssock->sk); in __mptcp_socket_create()
115 list_add(&subflow->node, &msk->conn_list); in __mptcp_socket_create()
117 subflow->request_mptcp = 1; in __mptcp_socket_create()
342 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in __mptcp_move_skb() local
362 MPTCP_SKB_CB(skb)->map_seq = mptcp_subflow_get_mapped_dsn(subflow); in __mptcp_move_skb()
477 static long mptcp_timeout_from_subflow(const struct mptcp_subflow_context *subflow) in mptcp_timeout_from_subflow() argument
479 const struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_timeout_from_subflow()
481 return inet_csk(ssk)->icsk_pending && !subflow->stale_count ? in mptcp_timeout_from_subflow()
487 struct mptcp_subflow_context *subflow; in mptcp_set_timeout() local
490 mptcp_for_each_subflow(mptcp_sk(sk), subflow) in mptcp_set_timeout()
491 tout = max(tout, mptcp_timeout_from_subflow(subflow)); in mptcp_set_timeout()
513 struct mptcp_subflow_context *subflow; in mptcp_send_ack() local
515 mptcp_for_each_subflow(msk, subflow) in mptcp_send_ack()
516 mptcp_subflow_send_ack(mptcp_subflow_tcp_sock(subflow)); in mptcp_send_ack()
545 struct mptcp_subflow_context *subflow; in mptcp_cleanup_rbuf() local
553 mptcp_for_each_subflow(msk, subflow) { in mptcp_cleanup_rbuf()
554 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_cleanup_rbuf()
617 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in __mptcp_move_skbs_from_subflow() local
645 map_remaining = subflow->map_data_len - in __mptcp_move_skbs_from_subflow()
646 mptcp_subflow_get_map_offset(subflow); in __mptcp_move_skbs_from_subflow()
665 subflow->map_data_len = skb->len; in __mptcp_move_skbs_from_subflow()
778 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_data_ready() local
786 if (unlikely(subflow->disposable)) in mptcp_data_ready()
810 struct mptcp_subflow_context *subflow; in mptcp_do_flush_join_list() local
817 list_for_each_entry(subflow, &msk->join_list, node) { in mptcp_do_flush_join_list()
818 u32 sseq = READ_ONCE(subflow->setsockopt_seq); in mptcp_do_flush_join_list()
820 mptcp_propagate_sndbuf((struct sock *)msk, mptcp_subflow_tcp_sock(subflow)); in mptcp_do_flush_join_list()
890 struct mptcp_subflow_context *subflow; in mptcp_check_for_eof() local
894 mptcp_for_each_subflow(msk, subflow) in mptcp_check_for_eof()
895 receivers += !subflow->rx_eof; in mptcp_check_for_eof()
927 struct mptcp_subflow_context *subflow; in mptcp_subflow_recv_lookup() local
932 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_recv_lookup()
933 if (READ_ONCE(subflow->data_avail)) in mptcp_subflow_recv_lookup()
934 return mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_recv_lookup()
1087 struct mptcp_subflow_context *subflow; in mptcp_enter_memory_pressure() local
1092 mptcp_for_each_subflow(msk, subflow) { in mptcp_enter_memory_pressure()
1093 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_enter_memory_pressure()
1375 void mptcp_subflow_set_active(struct mptcp_subflow_context *subflow) in mptcp_subflow_set_active() argument
1377 if (!subflow->stale) in mptcp_subflow_set_active()
1380 subflow->stale = 0; in mptcp_subflow_set_active()
1381 MPTCP_INC_STATS(sock_net(mptcp_subflow_tcp_sock(subflow)), MPTCP_MIB_SUBFLOWRECOVER); in mptcp_subflow_set_active()
1384 bool mptcp_subflow_active(struct mptcp_subflow_context *subflow) in mptcp_subflow_active() argument
1386 if (unlikely(subflow->stale)) { in mptcp_subflow_active()
1387 u32 rcv_tstamp = READ_ONCE(tcp_sk(mptcp_subflow_tcp_sock(subflow))->rcv_tstamp); in mptcp_subflow_active()
1389 if (subflow->stale_rcv_tstamp == rcv_tstamp) in mptcp_subflow_active()
1392 mptcp_subflow_set_active(subflow); in mptcp_subflow_active()
1394 return __mptcp_subflow_active(subflow); in mptcp_subflow_active()
1404 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_send() local
1433 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_send()
1434 trace_mptcp_subflow_get_send(subflow); in mptcp_subflow_get_send()
1435 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_send()
1436 if (!mptcp_subflow_active(subflow)) in mptcp_subflow_get_send()
1439 tout = max(tout, mptcp_timeout_from_subflow(subflow)); in mptcp_subflow_get_send()
1440 nr_active += !subflow->backup; in mptcp_subflow_get_send()
1441 if (!sk_stream_memory_free(subflow->tcp_sock) || !tcp_sk(ssk)->snd_wnd) in mptcp_subflow_get_send()
1450 if (ratio < send_info[subflow->backup].ratio) { in mptcp_subflow_get_send()
1451 send_info[subflow->backup].ssk = ssk; in mptcp_subflow_get_send()
1452 send_info[subflow->backup].ratio = ratio; in mptcp_subflow_get_send()
1813 struct mptcp_subflow_context *subflow; in mptcp_rcv_space_adjust() local
1833 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1838 tp = tcp_sk(mptcp_subflow_tcp_sock(subflow)); in mptcp_rcv_space_adjust()
1885 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1889 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_rcv_space_adjust()
2113 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_retrans() local
2121 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_retrans()
2122 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_retrans()
2124 if (!__mptcp_subflow_active(subflow)) in mptcp_subflow_get_retrans()
2130 min_stale_count = min_t(int, min_stale_count, subflow->stale_count); in mptcp_subflow_get_retrans()
2134 if (subflow->backup) { in mptcp_subflow_get_retrans()
2153 if (msk->subflow) { in mptcp_dispose_initial_subflow()
2154 iput(SOCK_INODE(msk->subflow)); in mptcp_dispose_initial_subflow()
2155 msk->subflow = NULL; in mptcp_dispose_initial_subflow()
2208 struct mptcp_subflow_context *subflow) in __mptcp_close_ssk() argument
2213 list_del(&subflow->node); in __mptcp_close_ssk()
2224 subflow->disposable = 1; in __mptcp_close_ssk()
2231 kfree_rcu(subflow, rcu); in __mptcp_close_ssk()
2249 if (msk->subflow && ssk == msk->subflow->sk) in __mptcp_close_ssk()
2257 struct mptcp_subflow_context *subflow) in mptcp_close_ssk() argument
2261 __mptcp_close_ssk(sk, ssk, subflow); in mptcp_close_ssk()
2271 struct mptcp_subflow_context *subflow, *tmp; in __mptcp_close_subflow() local
2275 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { in __mptcp_close_subflow()
2276 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_close_subflow()
2285 mptcp_close_ssk((struct sock *)msk, ssk, subflow); in __mptcp_close_subflow()
2292 struct mptcp_subflow_context *subflow; in mptcp_check_close_timeout() local
2300 mptcp_for_each_subflow(mptcp_sk(sk), subflow) { in mptcp_check_close_timeout()
2301 if (inet_sk_state_load(mptcp_subflow_tcp_sock(subflow)) != in mptcp_check_close_timeout()
2310 struct mptcp_subflow_context *subflow, *tmp; in mptcp_check_fastclose() local
2318 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { in mptcp_check_fastclose()
2319 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in mptcp_check_fastclose()
2592 struct mptcp_subflow_context *subflow; in __mptcp_check_send_data_fin() local
2621 mptcp_for_each_subflow(msk, subflow) { in __mptcp_check_send_data_fin()
2622 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in __mptcp_check_send_data_fin()
2645 struct mptcp_subflow_context *subflow, *tmp; in __mptcp_destroy_sock() local
2665 list_for_each_entry_safe(subflow, tmp, &conn_list, node) { in __mptcp_destroy_sock()
2666 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_destroy_sock()
2667 __mptcp_close_ssk(sk, ssk, subflow); in __mptcp_destroy_sock()
2684 struct mptcp_subflow_context *subflow; in mptcp_close() local
2703 mptcp_for_each_subflow(mptcp_sk(sk), subflow) { in mptcp_close()
2704 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_close()
2755 struct mptcp_subflow_context *subflow; in mptcp_disconnect() local
2760 mptcp_for_each_subflow(msk, subflow) { in mptcp_disconnect()
2761 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_disconnect()
2801 msk->subflow = NULL; in mptcp_sk_clone()
2871 struct mptcp_subflow_context *subflow; in mptcp_accept() local
2874 subflow = mptcp_subflow_ctx(newsk); in mptcp_accept()
2875 new_mptcp_sock = subflow->conn; in mptcp_accept()
3027 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_subflow_process_delegated() local
3028 struct sock *sk = subflow->conn; in mptcp_subflow_process_delegated()
3030 if (test_bit(MPTCP_DELEGATE_SEND, &subflow->delegated_status)) { in mptcp_subflow_process_delegated()
3037 mptcp_subflow_delegated_done(subflow, MPTCP_DELEGATE_SEND); in mptcp_subflow_process_delegated()
3039 if (test_bit(MPTCP_DELEGATE_ACK, &subflow->delegated_status)) { in mptcp_subflow_process_delegated()
3041 mptcp_subflow_delegated_done(subflow, MPTCP_DELEGATE_ACK); in mptcp_subflow_process_delegated()
3074 struct mptcp_subflow_context *subflow; in mptcp_finish_connect() local
3079 subflow = mptcp_subflow_ctx(ssk); in mptcp_finish_connect()
3080 sk = subflow->conn; in mptcp_finish_connect()
3083 pr_debug("msk=%p, token=%u", sk, subflow->token); in mptcp_finish_connect()
3085 mptcp_crypto_key_sha(subflow->remote_key, NULL, &ack_seq); in mptcp_finish_connect()
3087 subflow->map_seq = ack_seq; in mptcp_finish_connect()
3088 subflow->map_subflow_seq = 1; in mptcp_finish_connect()
3093 WRITE_ONCE(msk->remote_key, subflow->remote_key); in mptcp_finish_connect()
3094 WRITE_ONCE(msk->local_key, subflow->local_key); in mptcp_finish_connect()
3095 WRITE_ONCE(msk->write_seq, subflow->idsn + 1); in mptcp_finish_connect()
3118 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_finish_join() local
3119 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_finish_join()
3124 pr_debug("msk=%p, subflow=%p", msk, subflow); in mptcp_finish_join()
3128 subflow->reset_reason = MPTCP_RST_EMPTCP; in mptcp_finish_join()
3136 subflow->reset_reason = MPTCP_RST_EPROHIBIT; in mptcp_finish_join()
3147 if (ret && !WARN_ON_ONCE(!list_empty(&subflow->node))) { in mptcp_finish_join()
3148 list_add_tail(&subflow->node, &msk->join_list); in mptcp_finish_join()
3153 subflow->reset_reason = MPTCP_RST_EPROHIBIT; in mptcp_finish_join()
3163 subflow->map_seq = READ_ONCE(msk->ack_seq); in mptcp_finish_join()
3234 struct mptcp_subflow_context *subflow) in mptcp_subflow_early_fallback() argument
3236 subflow->request_mptcp = 0; in mptcp_subflow_early_fallback()
3244 struct mptcp_subflow_context *subflow; in mptcp_stream_connect() local
3249 if (sock->state != SS_UNCONNECTED && msk->subflow) { in mptcp_stream_connect()
3253 ssock = msk->subflow; in mptcp_stream_connect()
3265 subflow = mptcp_subflow_ctx(ssock->sk); in mptcp_stream_connect()
3271 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
3273 if (subflow->request_mptcp && mptcp_token_new_connect(ssock->sk)) { in mptcp_stream_connect()
3275 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
3350 struct mptcp_subflow_context *subflow; in mptcp_stream_accept() local
3362 subflow = mptcp_subflow_ctx(msk->first); in mptcp_stream_accept()
3363 list_add(&subflow->node, &msk->conn_list); in mptcp_stream_accept()
3376 mptcp_for_each_subflow(msk, subflow) { in mptcp_stream_accept()
3377 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_stream_accept()
3491 struct mptcp_subflow_context *subflow; in mptcp_napi_poll() local
3495 while ((subflow = mptcp_subflow_delegated_next(delegated)) != NULL) { in mptcp_napi_poll()
3496 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_napi_poll()
3500 mptcp_subflow_has_delegated_action(subflow)) in mptcp_napi_poll()