Lines Matching refs:msk

40 pm_nl_get_pernet_from_msk(const struct mptcp_sock *msk)  in pm_nl_get_pernet_from_msk()  argument
42 return pm_nl_get_pernet(sock_net((struct sock *)msk)); in pm_nl_get_pernet_from_msk()
50 u8 mptcp_pm_get_endp_signal_max(const struct mptcp_sock *msk) in mptcp_pm_get_endp_signal_max() argument
52 const struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_endp_signal_max()
58 u8 mptcp_pm_get_endp_subflow_max(const struct mptcp_sock *msk) in mptcp_pm_get_endp_subflow_max() argument
60 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_endp_subflow_max()
66 u8 mptcp_pm_get_endp_laminar_max(const struct mptcp_sock *msk) in mptcp_pm_get_endp_laminar_max() argument
68 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_endp_laminar_max()
74 u8 mptcp_pm_get_endp_fullmesh_max(const struct mptcp_sock *msk) in mptcp_pm_get_endp_fullmesh_max() argument
76 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_endp_fullmesh_max()
82 u8 mptcp_pm_get_limit_add_addr_accepted(const struct mptcp_sock *msk) in mptcp_pm_get_limit_add_addr_accepted() argument
84 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_limit_add_addr_accepted()
90 u8 mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *msk) in mptcp_pm_get_limit_extra_subflows() argument
92 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_limit_extra_subflows()
121 const struct mptcp_sock *msk, in select_local_address() argument
127 msk_owned_by_me(msk); in select_local_address()
134 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_local_address()
149 select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock *msk, in select_signal_address() argument
162 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_signal_address()
180 fill_remote_addr(struct mptcp_sock *msk, struct mptcp_addr_info *local, in fill_remote_addr() argument
183 bool deny_id0 = READ_ONCE(msk->pm.remote_deny_join_id0); in fill_remote_addr()
185 struct sock *sk = (struct sock *)msk; in fill_remote_addr()
195 msk->pm.extra_subflows++; in fill_remote_addr()
202 fill_remote_addresses_fullmesh(struct mptcp_sock *msk, in fill_remote_addresses_fullmesh() argument
206 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk); in fill_remote_addresses_fullmesh()
207 bool deny_id0 = READ_ONCE(msk->pm.remote_deny_join_id0); in fill_remote_addresses_fullmesh()
209 struct sock *sk = (struct sock *)msk, *ssk; in fill_remote_addresses_fullmesh()
217 mptcp_for_each_subflow(msk, subflow) in fill_remote_addresses_fullmesh()
221 mptcp_for_each_subflow(msk, subflow) { in fill_remote_addresses_fullmesh()
236 msk->pm.extra_subflows++; in fill_remote_addresses_fullmesh()
239 if (msk->pm.extra_subflows >= limit_extra_subflows) in fill_remote_addresses_fullmesh()
250 fill_remote_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *local, in fill_remote_addresses_vec() argument
257 return fill_remote_addr(msk, local, addrs); in fill_remote_addresses_vec()
260 return fill_remote_addresses_fullmesh(msk, local, addrs); in fill_remote_addresses_vec()
289 static u8 mptcp_endp_get_local_id(struct mptcp_sock *msk, in mptcp_endp_get_local_id() argument
292 return msk->mpc_endpoint_id == addr->id ? 0 : addr->id; in mptcp_endp_get_local_id()
296 static void mptcp_mpc_endpoint_setup(struct mptcp_sock *msk) in mptcp_mpc_endpoint_setup() argument
305 if (likely(msk->pm.status & BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED)) || in mptcp_mpc_endpoint_setup()
306 !msk->first) in mptcp_mpc_endpoint_setup()
309 subflow = mptcp_subflow_ctx(msk->first); in mptcp_mpc_endpoint_setup()
310 pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_mpc_endpoint_setup()
312 mptcp_local_address((struct sock_common *)msk->first, &mpc_addr); in mptcp_mpc_endpoint_setup()
316 __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); in mptcp_mpc_endpoint_setup()
317 msk->mpc_endpoint_id = entry->addr.id; in mptcp_mpc_endpoint_setup()
324 mptcp_pm_send_ack(msk, subflow, true, backup); in mptcp_mpc_endpoint_setup()
326 msk->pm.status |= BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED); in mptcp_mpc_endpoint_setup()
329 static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) in mptcp_pm_create_subflow_or_signal_addr() argument
331 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk); in mptcp_pm_create_subflow_or_signal_addr()
332 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_create_subflow_or_signal_addr()
333 u8 endp_subflow_max = mptcp_pm_get_endp_subflow_max(msk); in mptcp_pm_create_subflow_or_signal_addr()
334 u8 endp_signal_max = mptcp_pm_get_endp_signal_max(msk); in mptcp_pm_create_subflow_or_signal_addr()
335 struct sock *sk = (struct sock *)msk; in mptcp_pm_create_subflow_or_signal_addr()
339 mptcp_mpc_endpoint_setup(msk); in mptcp_pm_create_subflow_or_signal_addr()
344 msk->pm.local_addr_used, endp_subflow_max, in mptcp_pm_create_subflow_or_signal_addr()
345 msk->pm.add_addr_signaled, endp_signal_max, in mptcp_pm_create_subflow_or_signal_addr()
346 msk->pm.extra_subflows, limit_extra_subflows); in mptcp_pm_create_subflow_or_signal_addr()
349 if (msk->pm.add_addr_signaled < endp_signal_max) { in mptcp_pm_create_subflow_or_signal_addr()
357 if (msk->pm.addr_signal & BIT(MPTCP_ADD_ADDR_SIGNAL)) in mptcp_pm_create_subflow_or_signal_addr()
360 if (!select_signal_address(pernet, msk, &local)) in mptcp_pm_create_subflow_or_signal_addr()
366 if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) in mptcp_pm_create_subflow_or_signal_addr()
369 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
370 msk->pm.add_addr_signaled++; in mptcp_pm_create_subflow_or_signal_addr()
373 if (local.addr.id == msk->mpc_endpoint_id) in mptcp_pm_create_subflow_or_signal_addr()
376 mptcp_pm_announce_addr(msk, &local.addr, false); in mptcp_pm_create_subflow_or_signal_addr()
377 mptcp_pm_addr_send_ack(msk); in mptcp_pm_create_subflow_or_signal_addr()
385 if (mptcp_pm_add_addr_c_flag_case(msk)) in mptcp_pm_create_subflow_or_signal_addr()
389 while (msk->pm.local_addr_used < endp_subflow_max && in mptcp_pm_create_subflow_or_signal_addr()
390 msk->pm.extra_subflows < limit_extra_subflows) { in mptcp_pm_create_subflow_or_signal_addr()
397 else if (!select_local_address(pernet, msk, &local)) in mptcp_pm_create_subflow_or_signal_addr()
402 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
405 if (local.addr.id == msk->mpc_endpoint_id) in mptcp_pm_create_subflow_or_signal_addr()
408 msk->pm.local_addr_used++; in mptcp_pm_create_subflow_or_signal_addr()
410 nr = fill_remote_addresses_vec(msk, &local.addr, fullmesh, addrs); in mptcp_pm_create_subflow_or_signal_addr()
414 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_create_subflow_or_signal_addr()
417 spin_lock_bh(&msk->pm.lock); in mptcp_pm_create_subflow_or_signal_addr()
421 mptcp_pm_nl_check_work_pending(msk); in mptcp_pm_create_subflow_or_signal_addr()
424 static void mptcp_pm_nl_fully_established(struct mptcp_sock *msk) in mptcp_pm_nl_fully_established() argument
426 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_pm_nl_fully_established()
429 static void mptcp_pm_nl_subflow_established(struct mptcp_sock *msk) in mptcp_pm_nl_subflow_established() argument
431 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_pm_nl_subflow_established()
435 fill_local_addresses_vec_fullmesh(struct mptcp_sock *msk, in fill_local_addresses_vec_fullmesh() argument
440 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk); in fill_local_addresses_vec_fullmesh()
441 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in fill_local_addresses_vec_fullmesh()
442 struct sock *sk = (struct sock *)msk; in fill_local_addresses_vec_fullmesh()
462 is_id0 = local->addr.id == msk->mpc_endpoint_id; in fill_local_addresses_vec_fullmesh()
466 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); in fill_local_addresses_vec_fullmesh()
469 msk->pm.local_addr_used++; in fill_local_addresses_vec_fullmesh()
476 msk->pm.extra_subflows++; in fill_local_addresses_vec_fullmesh()
479 if (msk->pm.extra_subflows >= limit_extra_subflows) in fill_local_addresses_vec_fullmesh()
488 fill_local_laminar_endp(struct mptcp_sock *msk, struct mptcp_addr_info *remote, in fill_local_laminar_endp() argument
491 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in fill_local_laminar_endp()
494 struct sock *sk = (struct sock *)msk; in fill_local_laminar_endp()
503 mptcp_for_each_subflow(msk, subflow) { in fill_local_laminar_endp()
522 if (test_bit(mptcp_endp_get_local_id(msk, &entry->addr), in fill_local_laminar_endp()
532 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); in fill_local_laminar_endp()
534 if (local->addr.id != msk->mpc_endpoint_id) in fill_local_laminar_endp()
535 msk->pm.local_addr_used++; in fill_local_laminar_endp()
538 msk->pm.extra_subflows++; in fill_local_laminar_endp()
548 fill_local_addresses_vec_c_flag(struct mptcp_sock *msk, in fill_local_addresses_vec_c_flag() argument
552 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk); in fill_local_addresses_vec_c_flag()
553 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in fill_local_addresses_vec_c_flag()
554 u8 endp_subflow_max = mptcp_pm_get_endp_subflow_max(msk); in fill_local_addresses_vec_c_flag()
555 struct sock *sk = (struct sock *)msk; in fill_local_addresses_vec_c_flag()
559 while (msk->pm.local_addr_used < endp_subflow_max) { in fill_local_addresses_vec_c_flag()
562 if (!select_local_address(pernet, msk, local)) in fill_local_addresses_vec_c_flag()
565 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); in fill_local_addresses_vec_c_flag()
570 if (local->addr.id == msk->mpc_endpoint_id) in fill_local_addresses_vec_c_flag()
573 msk->pm.local_addr_used++; in fill_local_addresses_vec_c_flag()
574 msk->pm.extra_subflows++; in fill_local_addresses_vec_c_flag()
577 if (msk->pm.extra_subflows >= limit_extra_subflows) in fill_local_addresses_vec_c_flag()
585 fill_local_address_any(struct mptcp_sock *msk, struct mptcp_addr_info *remote, in fill_local_address_any() argument
588 struct sock *sk = (struct sock *)msk; in fill_local_address_any()
601 msk->pm.extra_subflows++; in fill_local_address_any()
610 fill_local_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *remote, in fill_local_addresses_vec() argument
613 bool c_flag_case = remote->id && mptcp_pm_add_addr_c_flag_case(msk); in fill_local_addresses_vec()
616 if (mptcp_pm_get_endp_fullmesh_max(msk)) in fill_local_addresses_vec()
617 return fill_local_addresses_vec_fullmesh(msk, remote, locals, in fill_local_addresses_vec()
621 if (mptcp_pm_get_endp_laminar_max(msk)) in fill_local_addresses_vec()
622 return fill_local_laminar_endp(msk, remote, locals); in fill_local_addresses_vec()
628 return fill_local_addresses_vec_c_flag(msk, remote, locals); in fill_local_addresses_vec()
631 return fill_local_address_any(msk, remote, &locals[0]); in fill_local_addresses_vec()
634 static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk) in mptcp_pm_nl_add_addr_received() argument
636 u8 limit_add_addr_accepted = mptcp_pm_get_limit_add_addr_accepted(msk); in mptcp_pm_nl_add_addr_received()
637 u8 limit_extra_subflows = mptcp_pm_get_limit_extra_subflows(msk); in mptcp_pm_nl_add_addr_received()
639 struct sock *sk = (struct sock *)msk; in mptcp_pm_nl_add_addr_received()
645 msk->pm.add_addr_accepted, limit_add_addr_accepted, in mptcp_pm_nl_add_addr_received()
646 msk->pm.remote.family); in mptcp_pm_nl_add_addr_received()
648 remote = msk->pm.remote; in mptcp_pm_nl_add_addr_received()
649 mptcp_pm_announce_addr(msk, &remote, true); in mptcp_pm_nl_add_addr_received()
650 mptcp_pm_addr_send_ack(msk); in mptcp_pm_nl_add_addr_received()
651 mptcp_mpc_endpoint_setup(msk); in mptcp_pm_nl_add_addr_received()
653 if (lookup_subflow_by_daddr(&msk->conn_list, &remote)) in mptcp_pm_nl_add_addr_received()
663 nr = fill_local_addresses_vec(msk, &remote, locals); in mptcp_pm_nl_add_addr_received()
667 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_nl_add_addr_received()
671 spin_lock_bh(&msk->pm.lock); in mptcp_pm_nl_add_addr_received()
676 msk->pm.add_addr_accepted++; in mptcp_pm_nl_add_addr_received()
677 if (msk->pm.add_addr_accepted >= limit_add_addr_accepted || in mptcp_pm_nl_add_addr_received()
678 msk->pm.extra_subflows >= limit_extra_subflows) in mptcp_pm_nl_add_addr_received()
679 WRITE_ONCE(msk->pm.accept_addr, false); in mptcp_pm_nl_add_addr_received()
683 void mptcp_pm_nl_rm_addr(struct mptcp_sock *msk, u8 rm_id) in mptcp_pm_nl_rm_addr() argument
685 if (rm_id && !WARN_ON_ONCE(msk->pm.add_addr_accepted == 0)) { in mptcp_pm_nl_rm_addr()
687 mptcp_pm_get_limit_add_addr_accepted(msk); in mptcp_pm_nl_rm_addr()
692 if (--msk->pm.add_addr_accepted < limit_add_addr_accepted) in mptcp_pm_nl_rm_addr()
693 WRITE_ONCE(msk->pm.accept_addr, true); in mptcp_pm_nl_rm_addr()
895 int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, in mptcp_pm_nl_get_local_id() argument
902 pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_nl_get_local_id()
924 bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc) in mptcp_pm_nl_is_backup() argument
926 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_nl_is_backup()
941 struct mptcp_sock *msk; in mptcp_nl_add_subflow_or_signal_addr() local
944 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_add_subflow_or_signal_addr()
945 struct sock *sk = (struct sock *)msk; in mptcp_nl_add_subflow_or_signal_addr()
948 if (!READ_ONCE(msk->fully_established) || in mptcp_nl_add_subflow_or_signal_addr()
949 mptcp_pm_is_userspace(msk)) in mptcp_nl_add_subflow_or_signal_addr()
953 mptcp_local_address((struct sock_common *)msk, &mpc_addr); in mptcp_nl_add_subflow_or_signal_addr()
956 spin_lock_bh(&msk->pm.lock); in mptcp_nl_add_subflow_or_signal_addr()
958 msk->mpc_endpoint_id = addr->id; in mptcp_nl_add_subflow_or_signal_addr()
959 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_nl_add_subflow_or_signal_addr()
960 spin_unlock_bh(&msk->pm.lock); in mptcp_nl_add_subflow_or_signal_addr()
1047 static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk, in mptcp_pm_remove_anno_addr() argument
1054 list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr); in mptcp_pm_remove_anno_addr()
1056 ret = mptcp_remove_anno_list_by_saddr(msk, addr); in mptcp_pm_remove_anno_addr()
1058 spin_lock_bh(&msk->pm.lock); in mptcp_pm_remove_anno_addr()
1060 __set_bit(addr->id, msk->pm.id_avail_bitmap); in mptcp_pm_remove_anno_addr()
1061 msk->pm.add_addr_signaled--; in mptcp_pm_remove_anno_addr()
1063 mptcp_pm_remove_addr(msk, &list); in mptcp_pm_remove_anno_addr()
1064 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_remove_anno_addr()
1069 static void __mark_subflow_endp_available(struct mptcp_sock *msk, u8 id) in __mark_subflow_endp_available() argument
1072 if (!__test_and_set_bit(id ? : msk->mpc_endpoint_id, msk->pm.id_avail_bitmap) && in __mark_subflow_endp_available()
1073 id && !WARN_ON_ONCE(msk->pm.local_addr_used == 0)) in __mark_subflow_endp_available()
1074 msk->pm.local_addr_used--; in __mark_subflow_endp_available()
1083 struct mptcp_sock *msk; in mptcp_nl_remove_subflow_and_signal_addr() local
1087 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_remove_subflow_and_signal_addr()
1088 struct sock *sk = (struct sock *)msk; in mptcp_nl_remove_subflow_and_signal_addr()
1091 if (mptcp_pm_is_userspace(msk)) in mptcp_nl_remove_subflow_and_signal_addr()
1095 remove_subflow = mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr); in mptcp_nl_remove_subflow_and_signal_addr()
1096 mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && in mptcp_nl_remove_subflow_and_signal_addr()
1099 list.ids[0] = mptcp_endp_get_local_id(msk, addr); in mptcp_nl_remove_subflow_and_signal_addr()
1101 spin_lock_bh(&msk->pm.lock); in mptcp_nl_remove_subflow_and_signal_addr()
1102 mptcp_pm_rm_subflow(msk, &list); in mptcp_nl_remove_subflow_and_signal_addr()
1103 spin_unlock_bh(&msk->pm.lock); in mptcp_nl_remove_subflow_and_signal_addr()
1107 spin_lock_bh(&msk->pm.lock); in mptcp_nl_remove_subflow_and_signal_addr()
1108 __mark_subflow_endp_available(msk, list.ids[0]); in mptcp_nl_remove_subflow_and_signal_addr()
1109 spin_unlock_bh(&msk->pm.lock); in mptcp_nl_remove_subflow_and_signal_addr()
1112 if (msk->mpc_endpoint_id == entry->addr.id) in mptcp_nl_remove_subflow_and_signal_addr()
1113 msk->mpc_endpoint_id = 0; in mptcp_nl_remove_subflow_and_signal_addr()
1129 struct mptcp_sock *msk; in mptcp_nl_remove_id_zero_address() local
1133 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_remove_id_zero_address()
1134 struct sock *sk = (struct sock *)msk; in mptcp_nl_remove_id_zero_address()
1137 if (list_empty(&msk->conn_list) || mptcp_pm_is_userspace(msk)) in mptcp_nl_remove_id_zero_address()
1140 mptcp_local_address((struct sock_common *)msk, &msk_local); in mptcp_nl_remove_id_zero_address()
1145 spin_lock_bh(&msk->pm.lock); in mptcp_nl_remove_id_zero_address()
1146 mptcp_pm_remove_addr(msk, &list); in mptcp_nl_remove_id_zero_address()
1147 mptcp_pm_rm_subflow(msk, &list); in mptcp_nl_remove_id_zero_address()
1148 __mark_subflow_endp_available(msk, 0); in mptcp_nl_remove_id_zero_address()
1149 spin_unlock_bh(&msk->pm.lock); in mptcp_nl_remove_id_zero_address()
1221 static void mptcp_pm_flush_addrs_and_subflows(struct mptcp_sock *msk, in mptcp_pm_flush_addrs_and_subflows() argument
1229 mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) in mptcp_pm_flush_addrs_and_subflows()
1230 slist.ids[slist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr); in mptcp_pm_flush_addrs_and_subflows()
1233 mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) in mptcp_pm_flush_addrs_and_subflows()
1234 alist.ids[alist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr); in mptcp_pm_flush_addrs_and_subflows()
1237 spin_lock_bh(&msk->pm.lock); in mptcp_pm_flush_addrs_and_subflows()
1239 msk->pm.add_addr_signaled -= alist.nr; in mptcp_pm_flush_addrs_and_subflows()
1240 mptcp_pm_remove_addr(msk, &alist); in mptcp_pm_flush_addrs_and_subflows()
1243 mptcp_pm_rm_subflow(msk, &slist); in mptcp_pm_flush_addrs_and_subflows()
1245 bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); in mptcp_pm_flush_addrs_and_subflows()
1246 msk->pm.local_addr_used = 0; in mptcp_pm_flush_addrs_and_subflows()
1247 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_flush_addrs_and_subflows()
1254 struct mptcp_sock *msk; in mptcp_nl_flush_addrs_list() local
1259 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_flush_addrs_list()
1260 struct sock *sk = (struct sock *)msk; in mptcp_nl_flush_addrs_list()
1262 if (!mptcp_pm_is_userspace(msk)) { in mptcp_nl_flush_addrs_list()
1264 mptcp_pm_flush_addrs_and_subflows(msk, rm_list); in mptcp_nl_flush_addrs_list()
1436 static void mptcp_pm_nl_fullmesh(struct mptcp_sock *msk, in mptcp_pm_nl_fullmesh() argument
1441 list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr); in mptcp_pm_nl_fullmesh()
1443 spin_lock_bh(&msk->pm.lock); in mptcp_pm_nl_fullmesh()
1444 mptcp_pm_rm_subflow(msk, &list); in mptcp_pm_nl_fullmesh()
1445 __mark_subflow_endp_available(msk, list.ids[0]); in mptcp_pm_nl_fullmesh()
1446 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_pm_nl_fullmesh()
1447 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_nl_fullmesh()
1457 struct mptcp_sock *msk; in mptcp_pm_nl_set_flags_all() local
1462 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_pm_nl_set_flags_all()
1463 struct sock *sk = (struct sock *)msk; in mptcp_pm_nl_set_flags_all()
1465 if (list_empty(&msk->conn_list) || mptcp_pm_is_userspace(msk)) in mptcp_pm_nl_set_flags_all()
1470 mptcp_pm_mp_prio_send_ack(msk, &local->addr, NULL, bkup); in mptcp_pm_nl_set_flags_all()
1473 mptcp_pm_nl_fullmesh(msk, &local->addr); in mptcp_pm_nl_set_flags_all()
1541 bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk) in mptcp_pm_nl_check_work_pending() argument
1543 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_nl_check_work_pending()
1545 if (msk->pm.extra_subflows == mptcp_pm_get_limit_extra_subflows(msk) || in mptcp_pm_nl_check_work_pending()
1546 (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap, in mptcp_pm_nl_check_work_pending()
1548 WRITE_ONCE(msk->pm.work_pending, false); in mptcp_pm_nl_check_work_pending()
1555 void __mptcp_pm_kernel_worker(struct mptcp_sock *msk) in __mptcp_pm_kernel_worker() argument
1557 struct mptcp_pm_data *pm = &msk->pm; in __mptcp_pm_kernel_worker()
1561 mptcp_pm_nl_add_addr_received(msk); in __mptcp_pm_kernel_worker()
1565 mptcp_pm_nl_fully_established(msk); in __mptcp_pm_kernel_worker()
1569 mptcp_pm_nl_subflow_established(msk); in __mptcp_pm_kernel_worker()