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()
277 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in __mptcp_move_skb() local
304 MPTCP_SKB_CB(skb)->map_seq = mptcp_subflow_get_mapped_dsn(subflow); in __mptcp_move_skb()
419 static long mptcp_timeout_from_subflow(const struct mptcp_subflow_context *subflow) in mptcp_timeout_from_subflow() argument
421 const struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_timeout_from_subflow()
423 return inet_csk(ssk)->icsk_pending && !subflow->stale_count ? in mptcp_timeout_from_subflow()
429 struct mptcp_subflow_context *subflow; in mptcp_set_timeout() local
432 mptcp_for_each_subflow(mptcp_sk(sk), subflow) in mptcp_set_timeout()
433 tout = max(tout, mptcp_timeout_from_subflow(subflow)); in mptcp_set_timeout()
455 struct mptcp_subflow_context *subflow; in mptcp_send_ack() local
457 mptcp_for_each_subflow(msk, subflow) in mptcp_send_ack()
458 mptcp_subflow_send_ack(mptcp_subflow_tcp_sock(subflow)); in mptcp_send_ack()
487 struct mptcp_subflow_context *subflow; in mptcp_cleanup_rbuf() local
495 mptcp_for_each_subflow(msk, subflow) { in mptcp_cleanup_rbuf()
496 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_cleanup_rbuf()
559 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in __mptcp_move_skbs_from_subflow() local
587 map_remaining = subflow->map_data_len - in __mptcp_move_skbs_from_subflow()
588 mptcp_subflow_get_map_offset(subflow); in __mptcp_move_skbs_from_subflow()
607 subflow->map_data_len = skb->len; in __mptcp_move_skbs_from_subflow()
720 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_data_ready() local
728 if (unlikely(subflow->disposable)) in mptcp_data_ready()
752 struct mptcp_subflow_context *subflow; in mptcp_do_flush_join_list() local
759 list_for_each_entry(subflow, &msk->join_list, node) { in mptcp_do_flush_join_list()
760 u32 sseq = READ_ONCE(subflow->setsockopt_seq); in mptcp_do_flush_join_list()
762 mptcp_propagate_sndbuf((struct sock *)msk, mptcp_subflow_tcp_sock(subflow)); in mptcp_do_flush_join_list()
832 struct mptcp_subflow_context *subflow; in mptcp_check_for_eof() local
836 mptcp_for_each_subflow(msk, subflow) in mptcp_check_for_eof()
837 receivers += !subflow->rx_eof; in mptcp_check_for_eof()
869 struct mptcp_subflow_context *subflow; in mptcp_subflow_recv_lookup() local
874 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_recv_lookup()
875 if (READ_ONCE(subflow->data_avail)) in mptcp_subflow_recv_lookup()
876 return mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_recv_lookup()
1133 struct mptcp_subflow_context *subflow; in mptcp_enter_memory_pressure() local
1138 mptcp_for_each_subflow(msk, subflow) { in mptcp_enter_memory_pressure()
1139 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_enter_memory_pressure()
1405 void mptcp_subflow_set_active(struct mptcp_subflow_context *subflow) in mptcp_subflow_set_active() argument
1407 if (!subflow->stale) in mptcp_subflow_set_active()
1410 subflow->stale = 0; in mptcp_subflow_set_active()
1411 MPTCP_INC_STATS(sock_net(mptcp_subflow_tcp_sock(subflow)), MPTCP_MIB_SUBFLOWRECOVER); in mptcp_subflow_set_active()
1414 bool mptcp_subflow_active(struct mptcp_subflow_context *subflow) in mptcp_subflow_active() argument
1416 if (unlikely(subflow->stale)) { in mptcp_subflow_active()
1417 u32 rcv_tstamp = READ_ONCE(tcp_sk(mptcp_subflow_tcp_sock(subflow))->rcv_tstamp); in mptcp_subflow_active()
1419 if (subflow->stale_rcv_tstamp == rcv_tstamp) in mptcp_subflow_active()
1422 mptcp_subflow_set_active(subflow); in mptcp_subflow_active()
1424 return __mptcp_subflow_active(subflow); in mptcp_subflow_active()
1434 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_send() local
1463 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_send()
1464 trace_mptcp_subflow_get_send(subflow); in mptcp_subflow_get_send()
1465 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_send()
1466 if (!mptcp_subflow_active(subflow)) in mptcp_subflow_get_send()
1469 tout = max(tout, mptcp_timeout_from_subflow(subflow)); in mptcp_subflow_get_send()
1470 nr_active += !subflow->backup; in mptcp_subflow_get_send()
1471 if (!sk_stream_memory_free(subflow->tcp_sock) || !tcp_sk(ssk)->snd_wnd) in mptcp_subflow_get_send()
1480 if (ratio < send_info[subflow->backup].ratio) { in mptcp_subflow_get_send()
1481 send_info[subflow->backup].ssk = ssk; in mptcp_subflow_get_send()
1482 send_info[subflow->backup].ratio = ratio; in mptcp_subflow_get_send()
1817 struct mptcp_subflow_context *subflow; in mptcp_rcv_space_adjust() local
1837 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1842 tp = tcp_sk(mptcp_subflow_tcp_sock(subflow)); in mptcp_rcv_space_adjust()
1889 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1893 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_rcv_space_adjust()
2117 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_retrans() local
2125 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_retrans()
2126 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_retrans()
2128 if (!__mptcp_subflow_active(subflow)) in mptcp_subflow_get_retrans()
2134 min_stale_count = min_t(int, min_stale_count, subflow->stale_count); in mptcp_subflow_get_retrans()
2138 if (subflow->backup) { in mptcp_subflow_get_retrans()
2157 if (msk->subflow) { in mptcp_dispose_initial_subflow()
2158 iput(SOCK_INODE(msk->subflow)); in mptcp_dispose_initial_subflow()
2159 msk->subflow = NULL; in mptcp_dispose_initial_subflow()
2216 struct mptcp_subflow_context *subflow) in __mptcp_close_ssk() argument
2221 list_del(&subflow->node); in __mptcp_close_ssk()
2232 subflow->disposable = 1; in __mptcp_close_ssk()
2239 kfree_rcu(subflow, rcu); in __mptcp_close_ssk()
2257 if (msk->subflow && ssk == msk->subflow->sk) in __mptcp_close_ssk()
2265 struct mptcp_subflow_context *subflow) in mptcp_close_ssk() argument
2269 __mptcp_close_ssk(sk, ssk, subflow); in mptcp_close_ssk()
2279 struct mptcp_subflow_context *subflow, *tmp; in __mptcp_close_subflow() local
2283 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { in __mptcp_close_subflow()
2284 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_close_subflow()
2293 mptcp_close_ssk((struct sock *)msk, ssk, subflow); in __mptcp_close_subflow()
2300 struct mptcp_subflow_context *subflow; in mptcp_check_close_timeout() local
2308 mptcp_for_each_subflow(mptcp_sk(sk), subflow) { in mptcp_check_close_timeout()
2309 if (inet_sk_state_load(mptcp_subflow_tcp_sock(subflow)) != in mptcp_check_close_timeout()
2318 struct mptcp_subflow_context *subflow, *tmp; in mptcp_check_fastclose() local
2326 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { in mptcp_check_fastclose()
2327 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in mptcp_check_fastclose()
2594 struct mptcp_subflow_context *subflow; in __mptcp_check_send_data_fin() local
2623 mptcp_for_each_subflow(msk, subflow) { in __mptcp_check_send_data_fin()
2624 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in __mptcp_check_send_data_fin()
2647 struct mptcp_subflow_context *subflow, *tmp; in __mptcp_destroy_sock() local
2667 list_for_each_entry_safe(subflow, tmp, &conn_list, node) { in __mptcp_destroy_sock()
2668 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_destroy_sock()
2669 __mptcp_close_ssk(sk, ssk, subflow); in __mptcp_destroy_sock()
2686 struct mptcp_subflow_context *subflow; in mptcp_close() local
2705 mptcp_for_each_subflow(mptcp_sk(sk), subflow) { in mptcp_close()
2706 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_close()
2757 struct mptcp_subflow_context *subflow; in mptcp_disconnect() local
2762 mptcp_for_each_subflow(msk, subflow) { in mptcp_disconnect()
2763 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_disconnect()
2803 msk->subflow = NULL; in mptcp_sk_clone()
2873 struct mptcp_subflow_context *subflow; in mptcp_accept() local
2876 subflow = mptcp_subflow_ctx(newsk); in mptcp_accept()
2877 new_mptcp_sock = subflow->conn; in mptcp_accept()
2999 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_subflow_process_delegated() local
3000 struct sock *sk = subflow->conn; in mptcp_subflow_process_delegated()
3008 mptcp_subflow_delegated_done(subflow); in mptcp_subflow_process_delegated()
3040 struct mptcp_subflow_context *subflow; in mptcp_finish_connect() local
3045 subflow = mptcp_subflow_ctx(ssk); in mptcp_finish_connect()
3046 sk = subflow->conn; in mptcp_finish_connect()
3049 pr_debug("msk=%p, token=%u", sk, subflow->token); in mptcp_finish_connect()
3051 mptcp_crypto_key_sha(subflow->remote_key, NULL, &ack_seq); in mptcp_finish_connect()
3053 subflow->map_seq = ack_seq; in mptcp_finish_connect()
3054 subflow->map_subflow_seq = 1; in mptcp_finish_connect()
3059 WRITE_ONCE(msk->remote_key, subflow->remote_key); in mptcp_finish_connect()
3060 WRITE_ONCE(msk->local_key, subflow->local_key); in mptcp_finish_connect()
3061 WRITE_ONCE(msk->write_seq, subflow->idsn + 1); in mptcp_finish_connect()
3084 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_finish_join() local
3085 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_finish_join()
3090 pr_debug("msk=%p, subflow=%p", msk, subflow); in mptcp_finish_join()
3094 subflow->reset_reason = MPTCP_RST_EMPTCP; in mptcp_finish_join()
3102 subflow->reset_reason = MPTCP_RST_EPROHIBIT; in mptcp_finish_join()
3113 if (ret && !WARN_ON_ONCE(!list_empty(&subflow->node))) { in mptcp_finish_join()
3114 list_add_tail(&subflow->node, &msk->join_list); in mptcp_finish_join()
3119 subflow->reset_reason = MPTCP_RST_EPROHIBIT; in mptcp_finish_join()
3129 subflow->map_seq = READ_ONCE(msk->ack_seq); in mptcp_finish_join()
3194 struct mptcp_subflow_context *subflow) in mptcp_subflow_early_fallback() argument
3196 subflow->request_mptcp = 0; in mptcp_subflow_early_fallback()
3204 struct mptcp_subflow_context *subflow; in mptcp_stream_connect() local
3209 if (sock->state != SS_UNCONNECTED && msk->subflow) { in mptcp_stream_connect()
3213 ssock = msk->subflow; in mptcp_stream_connect()
3225 subflow = mptcp_subflow_ctx(ssock->sk); in mptcp_stream_connect()
3231 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
3233 if (subflow->request_mptcp && mptcp_token_new_connect(ssock->sk)) { in mptcp_stream_connect()
3235 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
3310 struct mptcp_subflow_context *subflow; in mptcp_stream_accept() local
3322 subflow = mptcp_subflow_ctx(msk->first); in mptcp_stream_accept()
3323 list_add(&subflow->node, &msk->conn_list); in mptcp_stream_accept()
3336 mptcp_for_each_subflow(msk, subflow) { in mptcp_stream_accept()
3337 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_stream_accept()
3451 struct mptcp_subflow_context *subflow; in mptcp_napi_poll() local
3455 while ((subflow = mptcp_subflow_delegated_next(delegated)) != NULL) { in mptcp_napi_poll()
3456 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_napi_poll()
3460 mptcp_subflow_has_delegated_action(subflow)) in mptcp_napi_poll()