Lines Matching defs:msk

39 pm_nl_get_pernet_from_msk(const struct mptcp_sock *msk)
41 return pm_nl_get_pernet(sock_net((struct sock *)msk));
49 u8 mptcp_pm_get_endp_signal_max(const struct mptcp_sock *msk)
51 const struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
57 u8 mptcp_pm_get_endp_subflow_max(const struct mptcp_sock *msk)
59 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
65 u8 mptcp_pm_get_endp_laminar_max(const struct mptcp_sock *msk)
67 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
73 u8 mptcp_pm_get_limit_add_addr_accepted(const struct mptcp_sock *msk)
75 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
81 u8 mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *msk)
83 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
112 const struct mptcp_sock *msk,
118 msk_owned_by_me(msk);
125 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap))
140 select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock *msk,
149 * Note: removal from the local address list during the msk life-cycle
153 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap))
171 fill_remote_addr(struct mptcp_sock *msk, struct mptcp_addr_info *local,
174 bool deny_id0 = READ_ONCE(msk->pm.remote_deny_join_id0);
176 struct sock *sk = (struct sock *)msk;
186 msk->pm.extra_subflows++;
193 fill_remote_addresses_fullmesh(struct mptcp_sock *msk,
197 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk);
198 bool deny_id0 = READ_ONCE(msk->pm.remote_deny_join_id0);
200 struct sock *sk = (struct sock *)msk, *ssk;
208 mptcp_for_each_subflow(msk, subflow)
212 mptcp_for_each_subflow(msk, subflow) {
227 msk->pm.extra_subflows++;
230 if (msk->pm.extra_subflows >= limit_extra_subflows)
241 fill_remote_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *local,
248 return fill_remote_addr(msk, local, addrs);
251 return fill_remote_addresses_fullmesh(msk, local, addrs);
280 static u8 mptcp_endp_get_local_id(struct mptcp_sock *msk,
283 return msk->mpc_endpoint_id == addr->id ? 0 : addr->id;
287 static void mptcp_mpc_endpoint_setup(struct mptcp_sock *msk)
296 if (likely(msk->pm.status & BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED)) ||
297 !msk->first)
300 subflow = mptcp_subflow_ctx(msk->first);
301 pernet = pm_nl_get_pernet_from_msk(msk);
303 mptcp_local_address((struct sock_common *)msk->first, &mpc_addr);
307 __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap);
308 msk->mpc_endpoint_id = entry->addr.id;
315 mptcp_pm_send_ack(msk, subflow, true, backup);
317 msk->pm.status |= BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED);
320 static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
322 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk);
323 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
324 u8 endp_subflow_max = mptcp_pm_get_endp_subflow_max(msk);
325 u8 endp_signal_max = mptcp_pm_get_endp_signal_max(msk);
326 struct sock *sk = (struct sock *)msk;
330 mptcp_mpc_endpoint_setup(msk);
333 msk->pm.local_addr_used, endp_subflow_max,
334 msk->pm.add_addr_signaled, endp_signal_max,
335 msk->pm.extra_subflows, limit_extra_subflows);
338 if (msk->pm.add_addr_signaled < endp_signal_max) {
346 if (msk->pm.addr_signal & BIT(MPTCP_ADD_ADDR_SIGNAL))
349 if (!select_signal_address(pernet, msk, &local))
355 if (!mptcp_pm_alloc_anno_list(msk, &local.addr))
358 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap);
359 msk->pm.add_addr_signaled++;
362 if (local.addr.id == msk->mpc_endpoint_id)
365 mptcp_pm_announce_addr(msk, &local.addr, false);
366 mptcp_pm_addr_send_ack(msk);
374 while (msk->pm.local_addr_used < endp_subflow_max &&
375 msk->pm.extra_subflows < limit_extra_subflows) {
382 else if (!select_local_address(pernet, msk, &local))
387 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap);
390 if (local.addr.id == msk->mpc_endpoint_id)
393 msk->pm.local_addr_used++;
395 nr = fill_remote_addresses_vec(msk, &local.addr, fullmesh, addrs);
399 spin_unlock_bh(&msk->pm.lock);
402 spin_lock_bh(&msk->pm.lock);
404 mptcp_pm_nl_check_work_pending(msk);
407 static void mptcp_pm_nl_fully_established(struct mptcp_sock *msk)
409 mptcp_pm_create_subflow_or_signal_addr(msk);
412 static void mptcp_pm_nl_subflow_established(struct mptcp_sock *msk)
414 mptcp_pm_create_subflow_or_signal_addr(msk);
418 fill_local_addresses_vec_fullmesh(struct mptcp_sock *msk,
423 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk);
424 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
425 struct sock *sk = (struct sock *)msk;
445 is_id0 = local->addr.id == msk->mpc_endpoint_id;
449 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap);
452 msk->pm.local_addr_used++;
459 msk->pm.extra_subflows++;
462 if (msk->pm.extra_subflows >= limit_extra_subflows)
471 fill_local_laminar_endp(struct mptcp_sock *msk, struct mptcp_addr_info *remote,
474 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
477 struct sock *sk = (struct sock *)msk;
486 mptcp_for_each_subflow(msk, subflow) {
505 if (test_bit(mptcp_endp_get_local_id(msk, &entry->addr),
515 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap);
517 if (local->addr.id != msk->mpc_endpoint_id)
518 msk->pm.local_addr_used++;
521 msk->pm.extra_subflows++;
531 fill_local_addresses_vec_c_flag(struct mptcp_sock *msk,
535 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk);
536 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
537 u8 endp_subflow_max = mptcp_pm_get_endp_subflow_max(msk);
538 struct sock *sk = (struct sock *)msk;
542 while (msk->pm.local_addr_used < endp_subflow_max) {
545 if (!select_local_address(pernet, msk, local))
548 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap);
553 if (local->addr.id == msk->mpc_endpoint_id)
556 msk->pm.local_addr_used++;
557 msk->pm.extra_subflows++;
560 if (msk->pm.extra_subflows >= limit_extra_subflows)
568 fill_local_address_any(struct mptcp_sock *msk, struct mptcp_addr_info *remote,
571 struct sock *sk = (struct sock *)msk;
584 msk->pm.extra_subflows++;
593 fill_local_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *remote,
596 bool c_flag_case = remote->id && mptcp_pm_add_addr_c_flag_case(msk);
600 i = fill_local_addresses_vec_fullmesh(msk, remote, locals, c_flag_case);
605 if (mptcp_pm_get_endp_laminar_max(msk))
606 return fill_local_laminar_endp(msk, remote, locals);
612 return fill_local_addresses_vec_c_flag(msk, remote, locals);
615 return fill_local_address_any(msk, remote, &locals[0]);
618 static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
620 u8 limit_add_addr_accepted = mptcp_pm_get_limit_add_addr_accepted(msk);
621 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk);
623 struct sock *sk = (struct sock *)msk;
629 msk->pm.add_addr_accepted, limit_add_addr_accepted,
630 msk->pm.remote.family);
632 remote = msk->pm.remote;
633 mptcp_pm_announce_addr(msk, &remote, true);
634 mptcp_pm_addr_send_ack(msk);
635 mptcp_mpc_endpoint_setup(msk);
637 if (lookup_subflow_by_daddr(&msk->conn_list, &remote))
647 nr = fill_local_addresses_vec(msk, &remote, locals);
651 spin_unlock_bh(&msk->pm.lock);
655 spin_lock_bh(&msk->pm.lock);
660 msk->pm.add_addr_accepted++;
661 if (msk->pm.add_addr_accepted >= limit_add_addr_accepted ||
662 msk->pm.extra_subflows >= limit_extra_subflows)
663 WRITE_ONCE(msk->pm.accept_addr, false);
667 void mptcp_pm_nl_rm_addr(struct mptcp_sock *msk, u8 rm_id)
669 if (rm_id && WARN_ON_ONCE(msk->pm.add_addr_accepted == 0)) {
671 mptcp_pm_get_limit_add_addr_accepted(msk);
676 if (--msk->pm.add_addr_accepted < limit_add_addr_accepted)
677 WRITE_ONCE(msk->pm.accept_addr, true);
828 /* The subflow socket lock is acquired in a nested to the msk one
829 * in several places, even by the TCP stack, and this msk is a kernel
831 * modifiers in several places, re-init the lock class for the msk
861 * under the msk socket lock. For the moment, that will not bring
875 int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk,
882 pernet = pm_nl_get_pernet_from_msk(msk);
904 bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc)
906 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
921 struct mptcp_sock *msk;
924 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
925 struct sock *sk = (struct sock *)msk;
928 if (!READ_ONCE(msk->fully_established) ||
929 mptcp_pm_is_userspace(msk))
933 mptcp_local_address((struct sock_common *)msk, &mpc_addr);
936 spin_lock_bh(&msk->pm.lock);
938 msk->mpc_endpoint_id = addr->id;
939 mptcp_pm_create_subflow_or_signal_addr(msk);
940 spin_unlock_bh(&msk->pm.lock);
1027 static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
1034 list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr);
1036 ret = mptcp_remove_anno_list_by_saddr(msk, addr);
1038 spin_lock_bh(&msk->pm.lock);
1040 __set_bit(addr->id, msk->pm.id_avail_bitmap);
1041 msk->pm.add_addr_signaled--;
1043 mptcp_pm_remove_addr(msk, &list);
1044 spin_unlock_bh(&msk->pm.lock);
1049 static void __mark_subflow_endp_available(struct mptcp_sock *msk, u8 id)
1052 if (!__test_and_set_bit(id ? : msk->mpc_endpoint_id, msk->pm.id_avail_bitmap) &&
1053 id && !WARN_ON_ONCE(msk->pm.local_addr_used == 0))
1054 msk->pm.local_addr_used--;
1063 struct mptcp_sock *msk;
1067 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
1068 struct sock *sk = (struct sock *)msk;
1071 if (mptcp_pm_is_userspace(msk))
1075 remove_subflow = mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr);
1076 mptcp_pm_remove_anno_addr(msk, addr, remove_subflow &&
1079 list.ids[0] = mptcp_endp_get_local_id(msk, addr);
1081 spin_lock_bh(&msk->pm.lock);
1082 mptcp_pm_rm_subflow(msk, &list);
1083 spin_unlock_bh(&msk->pm.lock);
1087 spin_lock_bh(&msk->pm.lock);
1088 __mark_subflow_endp_available(msk, list.ids[0]);
1089 spin_unlock_bh(&msk->pm.lock);
1092 if (msk->mpc_endpoint_id == entry->addr.id)
1093 msk->mpc_endpoint_id = 0;
1109 struct mptcp_sock *msk;
1113 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
1114 struct sock *sk = (struct sock *)msk;
1117 if (list_empty(&msk->conn_list) || mptcp_pm_is_userspace(msk))
1120 mptcp_local_address((struct sock_common *)msk, &msk_local);
1125 spin_lock_bh(&msk->pm.lock);
1126 mptcp_pm_remove_addr(msk, &list);
1127 mptcp_pm_rm_subflow(msk, &list);
1128 __mark_subflow_endp_available(msk, 0);
1129 spin_unlock_bh(&msk->pm.lock);
1157 /* the zero id address is special: the first address used by the msk
1197 static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk,
1205 mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr))
1206 slist.ids[slist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
1209 mptcp_remove_anno_list_by_saddr(msk, &entry->addr))
1210 alist.ids[alist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
1213 spin_lock_bh(&msk->pm.lock);
1215 msk->pm.add_addr_signaled -= alist.nr;
1216 mptcp_pm_remove_addr(msk, &alist);
1219 mptcp_pm_rm_subflow(msk, &slist);
1221 bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
1222 msk->pm.local_addr_used = 0;
1223 spin_unlock_bh(&msk->pm.lock);
1230 struct mptcp_sock *msk;
1235 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
1236 struct sock *sk = (struct sock *)msk;
1238 if (!mptcp_pm_is_userspace(msk)) {
1240 mptcp_pm_flush_addrs_and_subflows(msk, rm_list);
1412 static void mptcp_pm_nl_fullmesh(struct mptcp_sock *msk,
1417 list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr);
1419 spin_lock_bh(&msk->pm.lock);
1420 mptcp_pm_rm_subflow(msk, &list);
1421 __mark_subflow_endp_available(msk, list.ids[0]);
1422 mptcp_pm_create_subflow_or_signal_addr(msk);
1423 spin_unlock_bh(&msk->pm.lock);
1433 struct mptcp_sock *msk;
1438 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
1439 struct sock *sk = (struct sock *)msk;
1441 if (list_empty(&msk->conn_list) || mptcp_pm_is_userspace(msk))
1446 mptcp_pm_mp_prio_send_ack(msk, &local->addr, NULL, bkup);
1449 mptcp_pm_nl_fullmesh(msk, &local->addr);
1505 bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk)
1507 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk);
1509 if (msk->pm.extra_subflows == mptcp_pm_get_limit_extra_subflows(msk) ||
1510 (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap,
1512 WRITE_ONCE(msk->pm.work_pending, false);
1519 void __mptcp_pm_kernel_worker(struct mptcp_sock *msk)
1521 struct mptcp_pm_data *pm = &msk->pm;
1525 mptcp_pm_nl_add_addr_received(msk);
1529 mptcp_pm_nl_fully_established(msk);
1533 mptcp_pm_nl_subflow_established(msk);