• Home
  • Raw
  • Download

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()
421 static long mptcp_timeout_from_subflow(const struct mptcp_subflow_context *subflow) in mptcp_timeout_from_subflow() argument
423 const struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_timeout_from_subflow()
425 return inet_csk(ssk)->icsk_pending && !subflow->stale_count ? in mptcp_timeout_from_subflow()
431 struct mptcp_subflow_context *subflow; in mptcp_set_timeout() local
434 mptcp_for_each_subflow(mptcp_sk(sk), subflow) in mptcp_set_timeout()
435 tout = max(tout, mptcp_timeout_from_subflow(subflow)); in mptcp_set_timeout()
457 struct mptcp_subflow_context *subflow; in mptcp_send_ack() local
459 mptcp_for_each_subflow(msk, subflow) in mptcp_send_ack()
460 mptcp_subflow_send_ack(mptcp_subflow_tcp_sock(subflow)); in mptcp_send_ack()
489 struct mptcp_subflow_context *subflow; in mptcp_cleanup_rbuf() local
497 mptcp_for_each_subflow(msk, subflow) { in mptcp_cleanup_rbuf()
498 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()
723 struct mptcp_subflow_context *subflow; in __mptcp_error_report() local
726 mptcp_for_each_subflow(msk, subflow) in __mptcp_error_report()
727 if (__mptcp_subflow_error_report(sk, mptcp_subflow_tcp_sock(subflow))) in __mptcp_error_report()
760 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_data_ready() local
768 if (unlikely(subflow->disposable)) in mptcp_data_ready()
792 struct mptcp_subflow_context *subflow; in mptcp_do_flush_join_list() local
799 list_for_each_entry(subflow, &msk->join_list, node) { in mptcp_do_flush_join_list()
800 u32 sseq = READ_ONCE(subflow->setsockopt_seq); in mptcp_do_flush_join_list()
802 mptcp_propagate_sndbuf((struct sock *)msk, mptcp_subflow_tcp_sock(subflow)); in mptcp_do_flush_join_list()
872 struct mptcp_subflow_context *subflow; in mptcp_check_for_eof() local
876 mptcp_for_each_subflow(msk, subflow) in mptcp_check_for_eof()
877 receivers += !subflow->rx_eof; in mptcp_check_for_eof()
909 struct mptcp_subflow_context *subflow; in mptcp_subflow_recv_lookup() local
914 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_recv_lookup()
915 if (READ_ONCE(subflow->data_avail)) in mptcp_subflow_recv_lookup()
916 return mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_recv_lookup()
1173 struct mptcp_subflow_context *subflow; in mptcp_enter_memory_pressure() local
1178 mptcp_for_each_subflow(msk, subflow) { in mptcp_enter_memory_pressure()
1179 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_enter_memory_pressure()
1458 void mptcp_subflow_set_active(struct mptcp_subflow_context *subflow) in mptcp_subflow_set_active() argument
1460 if (!subflow->stale) in mptcp_subflow_set_active()
1463 subflow->stale = 0; in mptcp_subflow_set_active()
1464 MPTCP_INC_STATS(sock_net(mptcp_subflow_tcp_sock(subflow)), MPTCP_MIB_SUBFLOWRECOVER); in mptcp_subflow_set_active()
1467 bool mptcp_subflow_active(struct mptcp_subflow_context *subflow) in mptcp_subflow_active() argument
1469 if (unlikely(subflow->stale)) { in mptcp_subflow_active()
1470 u32 rcv_tstamp = READ_ONCE(tcp_sk(mptcp_subflow_tcp_sock(subflow))->rcv_tstamp); in mptcp_subflow_active()
1472 if (subflow->stale_rcv_tstamp == rcv_tstamp) in mptcp_subflow_active()
1475 mptcp_subflow_set_active(subflow); in mptcp_subflow_active()
1477 return __mptcp_subflow_active(subflow); in mptcp_subflow_active()
1487 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_send() local
1516 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_send()
1517 trace_mptcp_subflow_get_send(subflow); in mptcp_subflow_get_send()
1518 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_send()
1519 if (!mptcp_subflow_active(subflow)) in mptcp_subflow_get_send()
1522 tout = max(tout, mptcp_timeout_from_subflow(subflow)); in mptcp_subflow_get_send()
1523 nr_active += !subflow->backup; in mptcp_subflow_get_send()
1524 if (!sk_stream_memory_free(subflow->tcp_sock) || !tcp_sk(ssk)->snd_wnd) in mptcp_subflow_get_send()
1533 if (ratio < send_info[subflow->backup].ratio) { in mptcp_subflow_get_send()
1534 send_info[subflow->backup].ssk = ssk; in mptcp_subflow_get_send()
1535 send_info[subflow->backup].ratio = ratio; in mptcp_subflow_get_send()
1893 struct mptcp_subflow_context *subflow; in mptcp_rcv_space_adjust() local
1913 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1918 tp = tcp_sk(mptcp_subflow_tcp_sock(subflow)); in mptcp_rcv_space_adjust()
1965 mptcp_for_each_subflow(msk, subflow) { in mptcp_rcv_space_adjust()
1969 ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_rcv_space_adjust()
2193 struct mptcp_subflow_context *subflow; in mptcp_subflow_get_retrans() local
2201 mptcp_for_each_subflow(msk, subflow) { in mptcp_subflow_get_retrans()
2202 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_subflow_get_retrans()
2204 if (!__mptcp_subflow_active(subflow)) in mptcp_subflow_get_retrans()
2210 min_stale_count = min_t(int, min_stale_count, subflow->stale_count); in mptcp_subflow_get_retrans()
2214 if (subflow->backup) { in mptcp_subflow_get_retrans()
2233 if (msk->subflow) { in mptcp_dispose_initial_subflow()
2234 iput(SOCK_INODE(msk->subflow)); in mptcp_dispose_initial_subflow()
2235 msk->subflow = NULL; in mptcp_dispose_initial_subflow()
2286 struct mptcp_subflow_context *subflow) in __mptcp_close_ssk() argument
2291 list_del(&subflow->node); in __mptcp_close_ssk()
2302 subflow->disposable = 1; in __mptcp_close_ssk()
2309 kfree_rcu(subflow, rcu); in __mptcp_close_ssk()
2328 if (msk->subflow && ssk == msk->subflow->sk) in __mptcp_close_ssk()
2336 struct mptcp_subflow_context *subflow) in mptcp_close_ssk() argument
2340 __mptcp_close_ssk(sk, ssk, subflow); in mptcp_close_ssk()
2350 struct mptcp_subflow_context *subflow, *tmp; in __mptcp_close_subflow() local
2354 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { in __mptcp_close_subflow()
2355 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_close_subflow()
2364 mptcp_close_ssk((struct sock *)msk, ssk, subflow); in __mptcp_close_subflow()
2371 struct mptcp_subflow_context *subflow; in mptcp_check_close_timeout() local
2379 mptcp_for_each_subflow(mptcp_sk(sk), subflow) { in mptcp_check_close_timeout()
2380 if (inet_sk_state_load(mptcp_subflow_tcp_sock(subflow)) != in mptcp_check_close_timeout()
2389 struct mptcp_subflow_context *subflow, *tmp; in mptcp_check_fastclose() local
2397 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) { in mptcp_check_fastclose()
2398 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in mptcp_check_fastclose()
2671 struct mptcp_subflow_context *subflow; in mptcp_check_send_data_fin() local
2688 mptcp_for_each_subflow(msk, subflow) { in mptcp_check_send_data_fin()
2689 struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow); in mptcp_check_send_data_fin()
2712 struct mptcp_subflow_context *subflow, *tmp; in __mptcp_destroy_sock() local
2732 list_for_each_entry_safe(subflow, tmp, &conn_list, node) { in __mptcp_destroy_sock()
2733 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in __mptcp_destroy_sock()
2734 __mptcp_close_ssk(sk, ssk, subflow); in __mptcp_destroy_sock()
2751 struct mptcp_subflow_context *subflow; in mptcp_close() local
2771 mptcp_for_each_subflow(mptcp_sk(sk), subflow) { in mptcp_close()
2772 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_close()
2831 struct mptcp_subflow_context *subflow; in mptcp_disconnect() local
2842 mptcp_for_each_subflow(msk, subflow) { in mptcp_disconnect()
2843 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_disconnect()
2933 msk->subflow = NULL; in mptcp_sk_clone()
3003 struct mptcp_subflow_context *subflow; in mptcp_accept() local
3006 subflow = mptcp_subflow_ctx(newsk); in mptcp_accept()
3007 new_mptcp_sock = subflow->conn; in mptcp_accept()
3157 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_subflow_process_delegated() local
3158 struct sock *sk = subflow->conn; in mptcp_subflow_process_delegated()
3160 if (test_bit(MPTCP_DELEGATE_SEND, &subflow->delegated_status)) { in mptcp_subflow_process_delegated()
3167 mptcp_subflow_delegated_done(subflow, MPTCP_DELEGATE_SEND); in mptcp_subflow_process_delegated()
3169 if (test_bit(MPTCP_DELEGATE_ACK, &subflow->delegated_status)) { in mptcp_subflow_process_delegated()
3171 mptcp_subflow_delegated_done(subflow, MPTCP_DELEGATE_ACK); in mptcp_subflow_process_delegated()
3204 struct mptcp_subflow_context *subflow; in mptcp_finish_connect() local
3209 subflow = mptcp_subflow_ctx(ssk); in mptcp_finish_connect()
3210 sk = subflow->conn; in mptcp_finish_connect()
3213 pr_debug("msk=%p, token=%u", sk, subflow->token); in mptcp_finish_connect()
3215 mptcp_crypto_key_sha(subflow->remote_key, NULL, &ack_seq); in mptcp_finish_connect()
3217 subflow->map_seq = ack_seq; in mptcp_finish_connect()
3218 subflow->map_subflow_seq = 1; in mptcp_finish_connect()
3223 WRITE_ONCE(msk->remote_key, subflow->remote_key); in mptcp_finish_connect()
3224 WRITE_ONCE(msk->local_key, subflow->local_key); in mptcp_finish_connect()
3225 WRITE_ONCE(msk->write_seq, subflow->idsn + 1); in mptcp_finish_connect()
3248 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); in mptcp_finish_join() local
3249 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_finish_join()
3254 pr_debug("msk=%p, subflow=%p", msk, subflow); in mptcp_finish_join()
3258 subflow->reset_reason = MPTCP_RST_EMPTCP; in mptcp_finish_join()
3266 subflow->reset_reason = MPTCP_RST_EPROHIBIT; in mptcp_finish_join()
3277 if (ret && !WARN_ON_ONCE(!list_empty(&subflow->node))) { in mptcp_finish_join()
3278 list_add_tail(&subflow->node, &msk->join_list); in mptcp_finish_join()
3283 subflow->reset_reason = MPTCP_RST_EPROHIBIT; in mptcp_finish_join()
3293 subflow->map_seq = READ_ONCE(msk->ack_seq); in mptcp_finish_join()
3358 struct mptcp_subflow_context *subflow) in mptcp_subflow_early_fallback() argument
3360 subflow->request_mptcp = 0; in mptcp_subflow_early_fallback()
3368 struct mptcp_subflow_context *subflow; in mptcp_stream_connect() local
3373 if (sock->state != SS_UNCONNECTED && msk->subflow) { in mptcp_stream_connect()
3377 ssock = msk->subflow; in mptcp_stream_connect()
3389 subflow = mptcp_subflow_ctx(ssock->sk); in mptcp_stream_connect()
3395 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
3397 if (subflow->request_mptcp && mptcp_token_new_connect(ssock->sk)) { in mptcp_stream_connect()
3399 mptcp_subflow_early_fallback(msk, subflow); in mptcp_stream_connect()
3474 struct mptcp_subflow_context *subflow; in mptcp_stream_accept() local
3486 subflow = mptcp_subflow_ctx(msk->first); in mptcp_stream_accept()
3487 list_add(&subflow->node, &msk->conn_list); in mptcp_stream_accept()
3500 mptcp_for_each_subflow(msk, subflow) { in mptcp_stream_accept()
3501 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_stream_accept()
3615 struct mptcp_subflow_context *subflow; in mptcp_napi_poll() local
3619 while ((subflow = mptcp_subflow_delegated_next(delegated)) != NULL) { in mptcp_napi_poll()
3620 struct sock *ssk = mptcp_subflow_tcp_sock(subflow); in mptcp_napi_poll()
3624 mptcp_subflow_has_delegated_action(subflow)) in mptcp_napi_poll()