Lines Matching refs:subflow
50 if (!msk->subflow || READ_ONCE(msk->can_ack)) in __mptcp_nmpc_socket()
53 return msk->subflow; in __mptcp_nmpc_socket()
92 struct mptcp_subflow_context *subflow; in __mptcp_socket_create() local
102 msk->subflow = ssock; in __mptcp_socket_create()
103 subflow = mptcp_subflow_ctx(ssock->sk); in __mptcp_socket_create()
104 list_add(&subflow->node, &msk->conn_list); in __mptcp_socket_create()
105 subflow->request_mptcp = 1; in __mptcp_socket_create()
268 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in __mptcp_move_skb() local
290 MPTCP_SKB_CB(skb)->map_seq = mptcp_subflow_get_mapped_dsn(subflow); in __mptcp_move_skb()
413 struct mptcp_subflow_context *subflow; in mptcp_check_data_fin() local
440 mptcp_for_each_subflow(msk, subflow) { in mptcp_check_data_fin()
441 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_check_data_fin()
462 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in __mptcp_move_skbs_from_subflow() local
480 map_remaining = subflow->map_data_len - in __mptcp_move_skbs_from_subflow()
481 mptcp_subflow_get_map_offset(subflow); in __mptcp_move_skbs_from_subflow()
500 subflow->map_data_len = skb->len; in __mptcp_move_skbs_from_subflow()
623 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_data_ready() local
631 wake = subflow->data_avail == MPTCP_SUBFLOW_DATA_AVAIL; in mptcp_data_ready()
706 struct mptcp_subflow_context *subflow; in mptcp_check_for_eof() local
710 mptcp_for_each_subflow(msk, subflow) in mptcp_check_for_eof()
711 receivers += !subflow->rx_eof; in mptcp_check_for_eof()
737 struct mptcp_subflow_context *subflow; in mptcp_subflow_recv_lookup() local
742 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_recv_lookup()
743 if (subflow->data_avail) in mptcp_subflow_recv_lookup()
744 return mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_recv_lookup()
786 struct mptcp_subflow_context *subflow; in mptcp_is_writeable() local
791 mptcp_for_each_subflow(msk, subflow) { in mptcp_is_writeable()
792 if (sk_stream_is_writeable(subflow->tcp_sock)) in mptcp_is_writeable()
1041 struct mptcp_subflow_context *subflow; in mptcp_nospace() local
1046 mptcp_for_each_subflow(msk, subflow) { in mptcp_nospace()
1047 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_nospace()
1056 static bool mptcp_subflow_active(struct mptcp_subflow_context *subflow) in mptcp_subflow_active() argument
1058 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_active()
1061 if (subflow->request_join && !subflow->fully_established) in mptcp_subflow_active()
1083 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_send() local
1106 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_send()
1107 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_send()
1118 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_send()
1119 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_send()
1120 if (!mptcp_subflow_active(subflow)) in mptcp_subflow_get_send()
1123 nr_active += !subflow->backup; in mptcp_subflow_get_send()
1125 if (!sk_stream_memory_free(subflow->tcp_sock)) in mptcp_subflow_get_send()
1134 if (ratio < send_info[subflow->backup].ratio) { in mptcp_subflow_get_send()
1135 send_info[subflow->backup].ssk = ssk; in mptcp_subflow_get_send()
1136 send_info[subflow->backup].ratio = ratio; in mptcp_subflow_get_send()
1375 struct mptcp_subflow_context *subflow; in mptcp_rcv_space_adjust() local
1395 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1400 tp = tcp_sk(mptcp_subflow_tcp_sock(subflow)); in mptcp_rcv_space_adjust()
1447 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1451 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_rcv_space_adjust()
1636 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_retrans() local
1644 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_retrans()
1645 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_retrans()
1647 if (!mptcp_subflow_active(subflow)) in mptcp_subflow_get_retrans()
1654 if (subflow->backup) { in mptcp_subflow_get_retrans()
1675 struct mptcp_subflow_context *subflow, in __mptcp_close_ssk() argument
1680 list_del(&subflow->node); in __mptcp_close_ssk()
1725 struct mptcp_subflow_context *subflow, *tmp; in __mptcp_close_subflow() local
1727 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { in __mptcp_close_subflow()
1728 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_close_subflow()
1733 __mptcp_close_ssk((struct sock *)msk, ssk, subflow, 0); in __mptcp_close_subflow()
1946 struct mptcp_subflow_context *subflow, *tmp; in mptcp_close() local
1967 mptcp_for_each_subflow(msk, subflow) { in mptcp_close()
1968 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in mptcp_close()
1992 list_for_each_entry_safe(subflow, tmp, &conn_list, node) { in mptcp_close()
1993 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_close()
1994 __mptcp_close_ssk(sk, ssk, subflow, timeout); in mptcp_close()
2068 msk->subflow = NULL; in mptcp_sk_clone()
2127 struct mptcp_subflow_context *subflow; in mptcp_accept() local
2131 subflow = mptcp_subflow_ctx(newsk); in mptcp_accept()
2132 new_mptcp_sock = subflow->conn; in mptcp_accept()
2152 list_add(&subflow->node, &msk->conn_list); in mptcp_accept()
2358 struct mptcp_subflow_context *subflow; in mptcp_finish_connect() local
2363 subflow = mptcp_subflow_ctx(ssk); in mptcp_finish_connect()
2364 sk = subflow->conn; in mptcp_finish_connect()
2367 pr_debug("msk=%p, token=%u", sk, subflow->token); in mptcp_finish_connect()
2369 mptcp_crypto_key_sha(subflow->remote_key, NULL, &ack_seq); in mptcp_finish_connect()
2371 subflow->map_seq = ack_seq; in mptcp_finish_connect()
2372 subflow->map_subflow_seq = 1; in mptcp_finish_connect()
2377 WRITE_ONCE(msk->remote_key, subflow->remote_key); in mptcp_finish_connect()
2378 WRITE_ONCE(msk->local_key, subflow->local_key); in mptcp_finish_connect()
2379 WRITE_ONCE(msk->write_seq, subflow->idsn + 1); in mptcp_finish_connect()
2400 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); in mptcp_finish_join() local
2401 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_finish_join()
2406 pr_debug("msk=%p, subflow=%p", msk, subflow); in mptcp_finish_join()
2425 if (ret && !WARN_ON_ONCE(!list_empty(&subflow->node))) in mptcp_finish_join()
2426 list_add_tail(&subflow->node, &msk->join_list); in mptcp_finish_join()
2437 subflow->map_seq = READ_ONCE(msk->ack_seq); in mptcp_finish_join()
2500 struct mptcp_subflow_context *subflow) in mptcp_subflow_early_fallback() argument
2502 subflow->request_mptcp = 0; in mptcp_subflow_early_fallback()
2510 struct mptcp_subflow_context *subflow; in mptcp_stream_connect() local
2515 if (sock->state != SS_UNCONNECTED && msk->subflow) { in mptcp_stream_connect()
2519 ssock = msk->subflow; in mptcp_stream_connect()
2531 subflow = mptcp_subflow_ctx(ssock->sk); in mptcp_stream_connect()
2537 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
2539 if (subflow->request_mptcp && mptcp_token_new_connect(ssock->sk)) in mptcp_stream_connect()
2540 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
2612 struct mptcp_subflow_context *subflow; in mptcp_stream_accept() local
2618 mptcp_for_each_subflow(msk, subflow) { in mptcp_stream_accept()
2619 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_stream_accept()
2672 struct mptcp_subflow_context *subflow; in mptcp_shutdown() local
2698 mptcp_for_each_subflow(msk, subflow) { in mptcp_shutdown()
2699 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in mptcp_shutdown()
2713 mptcp_for_each_subflow(msk, subflow) { in mptcp_shutdown()
2714 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in mptcp_shutdown()