Lines Matching refs:msk
44 if (subflow_req->msk) in subflow_req_destructor()
45 sock_put((struct sock *)subflow_req->msk); in subflow_req_destructor()
61 static bool mptcp_can_accept_new_subflow(const struct mptcp_sock *msk) in mptcp_can_accept_new_subflow() argument
63 return mptcp_is_fully_established((void *)msk) && in mptcp_can_accept_new_subflow()
64 ((mptcp_pm_is_userspace(msk) && in mptcp_can_accept_new_subflow()
65 mptcp_userspace_pm_active(msk)) || in mptcp_can_accept_new_subflow()
66 READ_ONCE(msk->pm.accept_subflow)); in mptcp_can_accept_new_subflow()
72 struct mptcp_sock *msk = subflow_req->msk; in subflow_req_create_thmac() local
77 subflow_generate_hmac(READ_ONCE(msk->local_key), in subflow_req_create_thmac()
78 READ_ONCE(msk->remote_key), in subflow_req_create_thmac()
88 struct mptcp_sock *msk; in subflow_token_join_request() local
91 msk = mptcp_token_get_sock(sock_net(req_to_sk(req)), subflow_req->token); in subflow_token_join_request()
92 if (!msk) { in subflow_token_join_request()
97 local_id = mptcp_pm_get_local_id(msk, (struct sock_common *)req); in subflow_token_join_request()
99 sock_put((struct sock *)msk); in subflow_token_join_request()
103 subflow_req->request_bkup = mptcp_pm_is_backup(msk, (struct sock_common *)req); in subflow_token_join_request()
105 return msk; in subflow_token_join_request()
116 subflow_req->msk = NULL; in subflow_init_req()
120 static bool subflow_use_different_sport(struct mptcp_sock *msk, const struct sock *sk) in subflow_use_different_sport() argument
122 return inet_sk(sk)->inet_sport != inet_sk((struct sock *)msk)->inet_sport; in subflow_use_different_sport()
226 subflow_req->msk = subflow_token_join_request(req); in subflow_check_req()
229 if (!subflow_req->msk) { in subflow_check_req()
234 if (subflow_use_different_sport(subflow_req->msk, sk_listener)) { in subflow_check_req()
237 ntohs(inet_sk((struct sock *)subflow_req->msk)->inet_sport)); in subflow_check_req()
238 if (!mptcp_pm_sport_in_anno_list(subflow_req->msk, sk_listener)) { in subflow_check_req()
249 if (!mptcp_can_accept_new_subflow(subflow_req->msk)) { in subflow_check_req()
259 subflow_req->remote_nonce, subflow_req->msk); in subflow_check_req()
452 static bool subflow_use_different_dport(struct mptcp_sock *msk, const struct sock *sk) in subflow_use_different_dport() argument
454 return inet_sk(sk)->inet_dport != inet_sk((struct sock *)msk)->inet_dport; in subflow_use_different_dport()
460 struct mptcp_sock *msk = mptcp_sk(sk); in __mptcp_sync_state() local
461 struct sock *ssk = msk->first; in __mptcp_sync_state()
465 if (!msk->rcvspace_init) in __mptcp_sync_state()
466 mptcp_rcv_space_init(msk, ssk); in __mptcp_sync_state()
472 WRITE_ONCE(msk->write_seq, subflow->idsn + 1); in __mptcp_sync_state()
473 WRITE_ONCE(msk->snd_nxt, msk->write_seq); in __mptcp_sync_state()
479 static void subflow_set_remote_key(struct mptcp_sock *msk, in subflow_set_remote_key() argument
494 WRITE_ONCE(msk->remote_key, subflow->remote_key); in subflow_set_remote_key()
495 WRITE_ONCE(msk->ack_seq, subflow->iasn); in subflow_set_remote_key()
496 WRITE_ONCE(msk->can_ack, true); in subflow_set_remote_key()
497 atomic64_set(&msk->rcv_wnd_sent, subflow->iasn); in subflow_set_remote_key()
504 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_propagate_state() local
511 WRITE_ONCE(msk->snd_una, subflow->idsn + 1); in mptcp_propagate_state()
512 WRITE_ONCE(msk->wnd_end, subflow->idsn + 1 + tcp_sk(ssk)->snd_wnd); in mptcp_propagate_state()
513 subflow_set_remote_key(msk, subflow, mp_opt); in mptcp_propagate_state()
519 msk->pending_state = ssk->sk_state; in mptcp_propagate_state()
520 __set_bit(MPTCP_SYNC_STATE, &msk->cb_flags); in mptcp_propagate_state()
530 struct mptcp_sock *msk; in subflow_finish_connect() local
538 msk = mptcp_sk(parent); in subflow_finish_connect()
558 WRITE_ONCE(msk->csum_enabled, true); in subflow_finish_connect()
560 WRITE_ONCE(msk->pm.remote_deny_join_id0, true); in subflow_finish_connect()
603 if (subflow_use_different_dport(msk, sk)) { in subflow_finish_connect()
632 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in subflow_chk_local_id() local
638 err = mptcp_pm_get_local_id(msk, (struct sock_common *)sk); in subflow_chk_local_id()
643 subflow->request_bkup = mptcp_pm_is_backup(msk, (struct sock_common *)sk); in subflow_chk_local_id()
755 struct mptcp_sock *msk = subflow_req->msk; in subflow_hmac_valid() local
758 subflow_generate_hmac(READ_ONCE(msk->remote_key), in subflow_hmac_valid()
759 READ_ONCE(msk->local_key), in subflow_hmac_valid()
796 void __mptcp_subflow_fully_established(struct mptcp_sock *msk, in __mptcp_subflow_fully_established() argument
800 subflow_set_remote_key(msk, subflow, mp_opt); in __mptcp_subflow_fully_established()
802 WRITE_ONCE(msk->fully_established, true); in __mptcp_subflow_fully_established()
896 owner = subflow_req->msk; in subflow_syn_recv_sock()
915 subflow_req->msk = NULL; in subflow_syn_recv_sock()
1103 struct mptcp_sock *msk) in get_mapping_status() argument
1106 bool csum_reqd = READ_ONCE(msk->csum_enabled); in get_mapping_status()
1155 bool updated = mptcp_update_rcv_data_fin(msk, mpext->data_seq, in get_mapping_status()
1169 mptcp_schedule_work((struct sock *)msk); in get_mapping_status()
1182 mptcp_update_rcv_data_fin(msk, data_fin_seq, mpext->dsn64); in get_mapping_status()
1190 map_seq = mptcp_expand_seq(READ_ONCE(msk->ack_seq), mpext->data_seq, mpext->dsn64); in get_mapping_status()
1282 static void subflow_sched_work_if_closed(struct mptcp_sock *msk, struct sock *ssk) in subflow_sched_work_if_closed() argument
1284 struct sock *sk = (struct sock *)msk; in subflow_sched_work_if_closed()
1294 if (!test_and_set_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags)) in subflow_sched_work_if_closed()
1300 if (__mptcp_check_fallback(msk) && subflow_is_done(ssk) && in subflow_sched_work_if_closed()
1301 msk->first == ssk && in subflow_sched_work_if_closed()
1302 mptcp_update_rcv_data_fin(msk, READ_ONCE(msk->ack_seq), true)) in subflow_sched_work_if_closed()
1306 static bool mptcp_subflow_fail(struct mptcp_sock *msk, struct sock *ssk) in mptcp_subflow_fail() argument
1312 spin_lock_bh(&msk->fallback_lock); in mptcp_subflow_fail()
1313 if (!msk->allow_infinite_fallback) { in mptcp_subflow_fail()
1314 spin_unlock_bh(&msk->fallback_lock); in mptcp_subflow_fail()
1317 msk->allow_subflows = false; in mptcp_subflow_fail()
1318 spin_unlock_bh(&msk->fallback_lock); in mptcp_subflow_fail()
1321 if (WARN_ON_ONCE(ssk != READ_ONCE(msk->first))) in mptcp_subflow_fail()
1327 if (sock_flag((struct sock *)msk, SOCK_DEAD)) in mptcp_subflow_fail()
1339 mptcp_reset_tout_timer(msk, subflow->fail_tout); in mptcp_subflow_fail()
1347 struct mptcp_sock *msk; in subflow_check_data_avail() local
1355 msk = mptcp_sk(subflow->conn); in subflow_check_data_avail()
1360 status = get_mapping_status(ssk, msk); in subflow_check_data_avail()
1373 if (unlikely(!READ_ONCE(msk->can_ack))) in subflow_check_data_avail()
1376 old_ack = READ_ONCE(msk->ack_seq); in subflow_check_data_avail()
1391 subflow_sched_work_if_closed(msk, ssk); in subflow_check_data_avail()
1395 if (!__mptcp_check_fallback(msk)) { in subflow_check_data_avail()
1401 if (!mptcp_subflow_fail(msk, ssk)) { in subflow_check_data_avail()
1432 subflow->map_seq = READ_ONCE(msk->ack_seq); in subflow_check_data_avail()
1499 struct mptcp_sock *msk; in subflow_data_ready() local
1503 msk = mptcp_sk(parent); in subflow_data_ready()
1515 WARN_ON_ONCE(!__mptcp_check_fallback(msk) && !subflow->mp_capable && in subflow_data_ready()
1524 if (mptcp_data_avail(msk) < parent->sk_rcvlowat && in subflow_data_ready()
1604 struct mptcp_sock *msk = mptcp_sk(sk); in __mptcp_subflow_connect() local
1623 msk, local_id, remote_id, err); in __mptcp_subflow_connect()
1648 subflow->remote_key = READ_ONCE(msk->remote_key); in __mptcp_subflow_connect()
1649 subflow->local_key = READ_ONCE(msk->local_key); in __mptcp_subflow_connect()
1650 subflow->token = msk->token; in __mptcp_subflow_connect()
1663 msk, local_id, remote_id, err); in __mptcp_subflow_connect()
1668 pr_debug("msk=%p remote_token=%u local_id=%d remote_id=%d\n", msk, in __mptcp_subflow_connect()
1674 subflow->subflow_id = msk->subflow_id++; in __mptcp_subflow_connect()
1678 list_add_tail(&subflow->node, &msk->conn_list); in __mptcp_subflow_connect()
1683 msk, local_id, remote_id, err); in __mptcp_subflow_connect()
1707 mptcp_pm_close_subflow(msk); in __mptcp_subflow_connect()