Lines Matching refs:msk
56 pm_nl_get_pernet_from_msk(const struct mptcp_sock *msk) in pm_nl_get_pernet_from_msk() argument
58 return pm_nl_get_pernet(sock_net((struct sock *)msk)); in pm_nl_get_pernet_from_msk()
153 const struct mptcp_sock *msk) in select_local_address() argument
157 msk_owned_by_me(msk); in select_local_address()
164 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_local_address()
175 select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock *msk) in select_signal_address() argument
186 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_signal_address()
199 unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk) in mptcp_pm_get_add_addr_signal_max() argument
201 const struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_add_addr_signal_max()
207 unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk) in mptcp_pm_get_add_addr_accept_max() argument
209 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_add_addr_accept_max()
215 unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk) in mptcp_pm_get_subflows_max() argument
217 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_subflows_max()
223 unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk) in mptcp_pm_get_local_addr_max() argument
225 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_get_local_addr_max()
231 bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk) in mptcp_pm_nl_check_work_pending() argument
233 struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_nl_check_work_pending()
235 if (msk->pm.subflows == mptcp_pm_get_subflows_max(msk) || in mptcp_pm_nl_check_work_pending()
236 (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap, in mptcp_pm_nl_check_work_pending()
238 WRITE_ONCE(msk->pm.work_pending, false); in mptcp_pm_nl_check_work_pending()
245 mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, in mptcp_lookup_anno_list_by_saddr() argument
250 lockdep_assert_held(&msk->pm.lock); in mptcp_lookup_anno_list_by_saddr()
252 list_for_each_entry(entry, &msk->pm.anno_list, list) { in mptcp_lookup_anno_list_by_saddr()
260 bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock *sk) in mptcp_pm_sport_in_anno_list() argument
268 spin_lock_bh(&msk->pm.lock); in mptcp_pm_sport_in_anno_list()
269 list_for_each_entry(entry, &msk->pm.anno_list, list) { in mptcp_pm_sport_in_anno_list()
277 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_sport_in_anno_list()
284 struct mptcp_sock *msk = entry->sock; in mptcp_pm_add_timer() local
285 struct sock *sk = (struct sock *)msk; in mptcp_pm_add_timer()
287 pr_debug("msk=%p", msk); in mptcp_pm_add_timer()
289 if (!msk) in mptcp_pm_add_timer()
298 if (mptcp_pm_should_add_signal_addr(msk)) { in mptcp_pm_add_timer()
303 spin_lock_bh(&msk->pm.lock); in mptcp_pm_add_timer()
305 if (!mptcp_pm_should_add_signal_addr(msk)) { in mptcp_pm_add_timer()
307 mptcp_pm_announce_addr(msk, &entry->addr, false); in mptcp_pm_add_timer()
308 mptcp_pm_add_addr_send_ack(msk); in mptcp_pm_add_timer()
316 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_add_timer()
319 mptcp_pm_subflow_established(msk); in mptcp_pm_add_timer()
326 mptcp_pm_del_add_timer(struct mptcp_sock *msk, in mptcp_pm_del_add_timer() argument
330 struct sock *sk = (struct sock *)msk; in mptcp_pm_del_add_timer()
332 spin_lock_bh(&msk->pm.lock); in mptcp_pm_del_add_timer()
333 entry = mptcp_lookup_anno_list_by_saddr(msk, addr); in mptcp_pm_del_add_timer()
336 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_del_add_timer()
344 bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, in mptcp_pm_alloc_anno_list() argument
348 struct sock *sk = (struct sock *)msk; in mptcp_pm_alloc_anno_list()
351 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_alloc_anno_list()
353 add_entry = mptcp_lookup_anno_list_by_saddr(msk, &entry->addr); in mptcp_pm_alloc_anno_list()
356 if (mptcp_pm_is_kernel(msk)) in mptcp_pm_alloc_anno_list()
368 list_add(&add_entry->list, &msk->pm.anno_list); in mptcp_pm_alloc_anno_list()
371 add_entry->sock = msk; in mptcp_pm_alloc_anno_list()
381 void mptcp_pm_free_anno_list(struct mptcp_sock *msk) in mptcp_pm_free_anno_list() argument
384 struct sock *sk = (struct sock *)msk; in mptcp_pm_free_anno_list()
387 pr_debug("msk=%p", msk); in mptcp_pm_free_anno_list()
389 spin_lock_bh(&msk->pm.lock); in mptcp_pm_free_anno_list()
390 list_splice_init(&msk->pm.anno_list, &free_list); in mptcp_pm_free_anno_list()
391 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_free_anno_list()
415 static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk, in fill_remote_addresses_vec() argument
420 bool deny_id0 = READ_ONCE(msk->pm.remote_deny_join_id0); in fill_remote_addresses_vec()
421 struct sock *sk = (struct sock *)msk, *ssk; in fill_remote_addresses_vec()
427 subflows_max = mptcp_pm_get_subflows_max(msk); in fill_remote_addresses_vec()
440 msk->pm.subflows++; in fill_remote_addresses_vec()
443 mptcp_for_each_subflow(msk, subflow) { in fill_remote_addresses_vec()
454 msk->pm.subflows < subflows_max) { in fill_remote_addresses_vec()
455 msk->pm.subflows++; in fill_remote_addresses_vec()
464 static void __mptcp_pm_send_ack(struct mptcp_sock *msk, struct mptcp_subflow_context *subflow, in __mptcp_pm_send_ack() argument
471 prio ? "mp_prio" : (mptcp_pm_should_add_signal(msk) ? "add_addr" : "rm_addr")); in __mptcp_pm_send_ack()
476 msk->last_snd = NULL; in __mptcp_pm_send_ack()
487 static void mptcp_pm_send_ack(struct mptcp_sock *msk, struct mptcp_subflow_context *subflow, in mptcp_pm_send_ack() argument
490 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_send_ack()
491 __mptcp_pm_send_ack(msk, subflow, prio, backup); in mptcp_pm_send_ack()
492 spin_lock_bh(&msk->pm.lock); in mptcp_pm_send_ack()
522 static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) in mptcp_pm_create_subflow_or_signal_addr() argument
524 struct sock *sk = (struct sock *)msk; in mptcp_pm_create_subflow_or_signal_addr()
533 add_addr_signal_max = mptcp_pm_get_add_addr_signal_max(msk); in mptcp_pm_create_subflow_or_signal_addr()
534 local_addr_max = mptcp_pm_get_local_addr_max(msk); in mptcp_pm_create_subflow_or_signal_addr()
535 subflows_max = mptcp_pm_get_subflows_max(msk); in mptcp_pm_create_subflow_or_signal_addr()
538 if (unlikely(!(msk->pm.status & BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED))) && msk->first) { in mptcp_pm_create_subflow_or_signal_addr()
539 struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(msk->first); in mptcp_pm_create_subflow_or_signal_addr()
544 local_address((struct sock_common *)msk->first, &mpc_addr); in mptcp_pm_create_subflow_or_signal_addr()
548 __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
549 msk->mpc_endpoint_id = entry->addr.id; in mptcp_pm_create_subflow_or_signal_addr()
555 mptcp_pm_send_ack(msk, subflow, true, backup); in mptcp_pm_create_subflow_or_signal_addr()
557 msk->pm.status |= BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED); in mptcp_pm_create_subflow_or_signal_addr()
561 msk->pm.local_addr_used, local_addr_max, in mptcp_pm_create_subflow_or_signal_addr()
562 msk->pm.add_addr_signaled, add_addr_signal_max, in mptcp_pm_create_subflow_or_signal_addr()
563 msk->pm.subflows, subflows_max); in mptcp_pm_create_subflow_or_signal_addr()
566 if (msk->pm.add_addr_signaled < add_addr_signal_max) { in mptcp_pm_create_subflow_or_signal_addr()
567 local = select_signal_address(pernet, msk); in mptcp_pm_create_subflow_or_signal_addr()
576 if (msk->pm.addr_signal & BIT(MPTCP_ADD_ADDR_SIGNAL)) in mptcp_pm_create_subflow_or_signal_addr()
580 if (mptcp_pm_alloc_anno_list(msk, local)) { in mptcp_pm_create_subflow_or_signal_addr()
581 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
582 msk->pm.add_addr_signaled++; in mptcp_pm_create_subflow_or_signal_addr()
583 mptcp_pm_announce_addr(msk, &local->addr, false); in mptcp_pm_create_subflow_or_signal_addr()
584 mptcp_pm_nl_addr_send_ack(msk); in mptcp_pm_create_subflow_or_signal_addr()
590 while (msk->pm.local_addr_used < local_addr_max && in mptcp_pm_create_subflow_or_signal_addr()
591 msk->pm.subflows < subflows_max) { in mptcp_pm_create_subflow_or_signal_addr()
596 local = select_local_address(pernet, msk); in mptcp_pm_create_subflow_or_signal_addr()
602 msk->pm.local_addr_used++; in mptcp_pm_create_subflow_or_signal_addr()
603 __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
604 nr = fill_remote_addresses_vec(msk, &local->addr, fullmesh, addrs); in mptcp_pm_create_subflow_or_signal_addr()
608 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_create_subflow_or_signal_addr()
611 spin_lock_bh(&msk->pm.lock); in mptcp_pm_create_subflow_or_signal_addr()
613 mptcp_pm_nl_check_work_pending(msk); in mptcp_pm_create_subflow_or_signal_addr()
616 static void mptcp_pm_nl_fully_established(struct mptcp_sock *msk) in mptcp_pm_nl_fully_established() argument
618 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_pm_nl_fully_established()
621 static void mptcp_pm_nl_subflow_established(struct mptcp_sock *msk) in mptcp_pm_nl_subflow_established() argument
623 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_pm_nl_subflow_established()
629 static unsigned int fill_local_addresses_vec(struct mptcp_sock *msk, in fill_local_addresses_vec() argument
633 struct sock *sk = (struct sock *)msk; in fill_local_addresses_vec()
639 pernet = pm_nl_get_pernet_from_msk(msk); in fill_local_addresses_vec()
640 subflows_max = mptcp_pm_get_subflows_max(msk); in fill_local_addresses_vec()
650 if (msk->pm.subflows < subflows_max) { in fill_local_addresses_vec()
651 msk->pm.subflows++; in fill_local_addresses_vec()
674 msk->pm.subflows++; in fill_local_addresses_vec()
681 static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk) in mptcp_pm_nl_add_addr_received() argument
684 struct sock *sk = (struct sock *)msk; in mptcp_pm_nl_add_addr_received()
690 add_addr_accept_max = mptcp_pm_get_add_addr_accept_max(msk); in mptcp_pm_nl_add_addr_received()
691 subflows_max = mptcp_pm_get_subflows_max(msk); in mptcp_pm_nl_add_addr_received()
694 msk->pm.add_addr_accepted, add_addr_accept_max, in mptcp_pm_nl_add_addr_received()
695 msk->pm.remote.family); in mptcp_pm_nl_add_addr_received()
697 remote = msk->pm.remote; in mptcp_pm_nl_add_addr_received()
698 mptcp_pm_announce_addr(msk, &remote, true); in mptcp_pm_nl_add_addr_received()
699 mptcp_pm_nl_addr_send_ack(msk); in mptcp_pm_nl_add_addr_received()
701 if (lookup_subflow_by_daddr(&msk->conn_list, &remote)) in mptcp_pm_nl_add_addr_received()
711 nr = fill_local_addresses_vec(msk, &remote, addrs); in mptcp_pm_nl_add_addr_received()
715 msk->pm.add_addr_accepted++; in mptcp_pm_nl_add_addr_received()
716 if (msk->pm.add_addr_accepted >= add_addr_accept_max || in mptcp_pm_nl_add_addr_received()
717 msk->pm.subflows >= subflows_max) in mptcp_pm_nl_add_addr_received()
718 WRITE_ONCE(msk->pm.accept_addr, false); in mptcp_pm_nl_add_addr_received()
720 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_nl_add_addr_received()
723 spin_lock_bh(&msk->pm.lock); in mptcp_pm_nl_add_addr_received()
726 void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk) in mptcp_pm_nl_addr_send_ack() argument
730 msk_owned_by_me(msk); in mptcp_pm_nl_addr_send_ack()
731 lockdep_assert_held(&msk->pm.lock); in mptcp_pm_nl_addr_send_ack()
733 if (!mptcp_pm_should_add_signal(msk) && in mptcp_pm_nl_addr_send_ack()
734 !mptcp_pm_should_rm_signal(msk)) in mptcp_pm_nl_addr_send_ack()
737 subflow = list_first_entry_or_null(&msk->conn_list, typeof(*subflow), node); in mptcp_pm_nl_addr_send_ack()
739 mptcp_pm_send_ack(msk, subflow, false, false); in mptcp_pm_nl_addr_send_ack()
742 int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk, in mptcp_pm_nl_mp_prio_send_ack() argument
751 mptcp_for_each_subflow(msk, subflow) { in mptcp_pm_nl_mp_prio_send_ack()
765 __mptcp_pm_send_ack(msk, subflow, true, bkup); in mptcp_pm_nl_mp_prio_send_ack()
772 static bool mptcp_local_id_match(const struct mptcp_sock *msk, u8 local_id, u8 id) in mptcp_local_id_match() argument
774 return local_id == id || (!local_id && msk->mpc_endpoint_id == id); in mptcp_local_id_match()
777 static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp_sock *msk, in mptcp_pm_nl_rm_addr_or_subflow() argument
782 struct sock *sk = (struct sock *)msk; in mptcp_pm_nl_rm_addr_or_subflow()
788 msk_owned_by_me(msk); in mptcp_pm_nl_rm_addr_or_subflow()
796 if (list_empty(&msk->conn_list)) in mptcp_pm_nl_rm_addr_or_subflow()
803 mptcp_for_each_subflow_safe(msk, subflow, tmp) { in mptcp_pm_nl_rm_addr_or_subflow()
810 if (rm_type == MPTCP_MIB_RMSUBFLOW && !mptcp_local_id_match(msk, id, rm_id)) in mptcp_pm_nl_rm_addr_or_subflow()
816 msk->mpc_endpoint_id); in mptcp_pm_nl_rm_addr_or_subflow()
817 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_nl_rm_addr_or_subflow()
822 spin_lock_bh(&msk->pm.lock); in mptcp_pm_nl_rm_addr_or_subflow()
828 __set_bit(rm_id ? rm_id : msk->mpc_endpoint_id, msk->pm.id_avail_bitmap); in mptcp_pm_nl_rm_addr_or_subflow()
832 if (!mptcp_pm_is_kernel(msk)) in mptcp_pm_nl_rm_addr_or_subflow()
836 msk->pm.add_addr_accepted--; in mptcp_pm_nl_rm_addr_or_subflow()
837 WRITE_ONCE(msk->pm.accept_addr, true); in mptcp_pm_nl_rm_addr_or_subflow()
839 msk->pm.local_addr_used--; in mptcp_pm_nl_rm_addr_or_subflow()
844 static void mptcp_pm_nl_rm_addr_received(struct mptcp_sock *msk) in mptcp_pm_nl_rm_addr_received() argument
846 mptcp_pm_nl_rm_addr_or_subflow(msk, &msk->pm.rm_list_rx, MPTCP_MIB_RMADDR); in mptcp_pm_nl_rm_addr_received()
849 void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, in mptcp_pm_nl_rm_subflow_received() argument
852 mptcp_pm_nl_rm_addr_or_subflow(msk, rm_list, MPTCP_MIB_RMSUBFLOW); in mptcp_pm_nl_rm_subflow_received()
855 void mptcp_pm_nl_work(struct mptcp_sock *msk) in mptcp_pm_nl_work() argument
857 struct mptcp_pm_data *pm = &msk->pm; in mptcp_pm_nl_work()
859 msk_owned_by_me(msk); in mptcp_pm_nl_work()
864 spin_lock_bh(&msk->pm.lock); in mptcp_pm_nl_work()
866 pr_debug("msk=%p status=%x", msk, pm->status); in mptcp_pm_nl_work()
869 mptcp_pm_nl_add_addr_received(msk); in mptcp_pm_nl_work()
873 mptcp_pm_nl_addr_send_ack(msk); in mptcp_pm_nl_work()
877 mptcp_pm_nl_rm_addr_received(msk); in mptcp_pm_nl_work()
881 mptcp_pm_nl_fully_established(msk); in mptcp_pm_nl_work()
885 mptcp_pm_nl_subflow_established(msk); in mptcp_pm_nl_work()
888 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_nl_work()
1043 int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc) in mptcp_pm_nl_get_local_id() argument
1051 if (WARN_ON_ONCE(!msk)) in mptcp_pm_nl_get_local_id()
1057 local_address((struct sock_common *)msk, &msk_local); in mptcp_pm_nl_get_local_id()
1062 if (mptcp_pm_is_userspace(msk)) in mptcp_pm_nl_get_local_id()
1063 return mptcp_userspace_pm_get_local_id(msk, &skc_local); in mptcp_pm_nl_get_local_id()
1065 pernet = pm_nl_get_pernet_from_msk(msk); in mptcp_pm_nl_get_local_id()
1129 void mptcp_pm_nl_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) in mptcp_pm_nl_subflow_chk_stale() argument
1132 struct sock *sk = (struct sock *)msk; in mptcp_pm_nl_subflow_chk_stale()
1144 mptcp_for_each_subflow(msk, iter) { in mptcp_pm_nl_subflow_chk_stale()
1281 struct mptcp_sock *msk; in mptcp_nl_add_subflow_or_signal_addr() local
1284 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_add_subflow_or_signal_addr()
1285 struct sock *sk = (struct sock *)msk; in mptcp_nl_add_subflow_or_signal_addr()
1287 if (!READ_ONCE(msk->fully_established) || in mptcp_nl_add_subflow_or_signal_addr()
1288 mptcp_pm_is_userspace(msk)) in mptcp_nl_add_subflow_or_signal_addr()
1292 spin_lock_bh(&msk->pm.lock); in mptcp_nl_add_subflow_or_signal_addr()
1293 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_nl_add_subflow_or_signal_addr()
1294 spin_unlock_bh(&msk->pm.lock); in mptcp_nl_add_subflow_or_signal_addr()
1360 int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id, in mptcp_pm_get_flags_and_ifindex_by_id() argument
1364 struct sock *sk = (struct sock *)msk; in mptcp_pm_get_flags_and_ifindex_by_id()
1371 if (mptcp_pm_is_userspace(msk)) in mptcp_pm_get_flags_and_ifindex_by_id()
1372 return mptcp_userspace_pm_get_flags_and_ifindex_by_id(msk, in mptcp_pm_get_flags_and_ifindex_by_id()
1389 static bool remove_anno_list_by_saddr(struct mptcp_sock *msk, in remove_anno_list_by_saddr() argument
1394 entry = mptcp_pm_del_add_timer(msk, addr, false); in remove_anno_list_by_saddr()
1404 static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk, in mptcp_pm_remove_anno_addr() argument
1413 ret = remove_anno_list_by_saddr(msk, addr); in mptcp_pm_remove_anno_addr()
1415 spin_lock_bh(&msk->pm.lock); in mptcp_pm_remove_anno_addr()
1416 mptcp_pm_remove_addr(msk, &list); in mptcp_pm_remove_anno_addr()
1417 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_remove_anno_addr()
1428 struct mptcp_sock *msk; in mptcp_nl_remove_subflow_and_signal_addr() local
1434 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_remove_subflow_and_signal_addr()
1435 struct sock *sk = (struct sock *)msk; in mptcp_nl_remove_subflow_and_signal_addr()
1438 if (mptcp_pm_is_userspace(msk)) in mptcp_nl_remove_subflow_and_signal_addr()
1441 if (list_empty(&msk->conn_list)) { in mptcp_nl_remove_subflow_and_signal_addr()
1442 mptcp_pm_remove_anno_addr(msk, addr, false); in mptcp_nl_remove_subflow_and_signal_addr()
1447 remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr); in mptcp_nl_remove_subflow_and_signal_addr()
1448 mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && in mptcp_nl_remove_subflow_and_signal_addr()
1451 mptcp_pm_remove_subflow(msk, &list); in mptcp_nl_remove_subflow_and_signal_addr()
1467 struct mptcp_sock *msk; in mptcp_nl_remove_id_zero_address() local
1471 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_remove_id_zero_address()
1472 struct sock *sk = (struct sock *)msk; in mptcp_nl_remove_id_zero_address()
1475 if (list_empty(&msk->conn_list) || mptcp_pm_is_userspace(msk)) in mptcp_nl_remove_id_zero_address()
1478 local_address((struct sock_common *)msk, &msk_local); in mptcp_nl_remove_id_zero_address()
1483 spin_lock_bh(&msk->pm.lock); in mptcp_nl_remove_id_zero_address()
1484 mptcp_pm_remove_addr(msk, &list); in mptcp_nl_remove_id_zero_address()
1485 mptcp_pm_nl_rm_subflow_received(msk, &list); in mptcp_nl_remove_id_zero_address()
1486 spin_unlock_bh(&msk->pm.lock); in mptcp_nl_remove_id_zero_address()
1545 void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk, in mptcp_pm_remove_addrs_and_subflows() argument
1552 if (lookup_subflow_by_saddr(&msk->conn_list, &entry->addr) && in mptcp_pm_remove_addrs_and_subflows()
1556 if (remove_anno_list_by_saddr(msk, &entry->addr) && in mptcp_pm_remove_addrs_and_subflows()
1562 spin_lock_bh(&msk->pm.lock); in mptcp_pm_remove_addrs_and_subflows()
1563 mptcp_pm_remove_addr(msk, &alist); in mptcp_pm_remove_addrs_and_subflows()
1564 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_remove_addrs_and_subflows()
1567 mptcp_pm_remove_subflow(msk, &slist); in mptcp_pm_remove_addrs_and_subflows()
1574 struct mptcp_sock *msk; in mptcp_nl_remove_addrs_list() local
1579 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_remove_addrs_list()
1580 struct sock *sk = (struct sock *)msk; in mptcp_nl_remove_addrs_list()
1582 if (!mptcp_pm_is_userspace(msk)) { in mptcp_nl_remove_addrs_list()
1584 mptcp_pm_remove_addrs_and_subflows(msk, rm_list); in mptcp_nl_remove_addrs_list()
1837 static void mptcp_pm_nl_fullmesh(struct mptcp_sock *msk, in mptcp_pm_nl_fullmesh() argument
1844 spin_lock_bh(&msk->pm.lock); in mptcp_pm_nl_fullmesh()
1845 mptcp_pm_nl_rm_subflow_received(msk, &list); in mptcp_pm_nl_fullmesh()
1846 mptcp_pm_create_subflow_or_signal_addr(msk); in mptcp_pm_nl_fullmesh()
1847 spin_unlock_bh(&msk->pm.lock); in mptcp_pm_nl_fullmesh()
1855 struct mptcp_sock *msk; in mptcp_nl_set_flags() local
1858 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { in mptcp_nl_set_flags()
1859 struct sock *sk = (struct sock *)msk; in mptcp_nl_set_flags()
1861 if (list_empty(&msk->conn_list) || mptcp_pm_is_userspace(msk)) in mptcp_nl_set_flags()
1866 ret = mptcp_pm_nl_mp_prio_send_ack(msk, addr, NULL, bkup); in mptcp_nl_set_flags()
1868 mptcp_pm_nl_fullmesh(msk, addr); in mptcp_nl_set_flags()
1941 bool mptcp_userspace_pm_active(const struct mptcp_sock *msk) in mptcp_userspace_pm_active() argument
1944 sock_net((const struct sock *)msk), in mptcp_userspace_pm_active()
1998 const struct mptcp_sock *msk, in mptcp_event_put_token_and_ssk() argument
2001 const struct sock *sk = (const struct sock *)msk; in mptcp_event_put_token_and_ssk()
2005 if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token)) in mptcp_event_put_token_and_ssk()
2031 const struct mptcp_sock *msk, in mptcp_event_sub_established() argument
2034 return mptcp_event_put_token_and_ssk(skb, msk, ssk); in mptcp_event_sub_established()
2038 const struct mptcp_sock *msk, in mptcp_event_sub_closed() argument
2043 if (mptcp_event_put_token_and_ssk(skb, msk, ssk)) in mptcp_event_sub_closed()
2060 const struct mptcp_sock *msk, in mptcp_event_created() argument
2063 int err = nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token); in mptcp_event_created()
2068 if (nla_put_u8(skb, MPTCP_ATTR_SERVER_SIDE, READ_ONCE(msk->pm.server_side))) in mptcp_event_created()
2074 void mptcp_event_addr_removed(const struct mptcp_sock *msk, uint8_t id) in mptcp_event_addr_removed() argument
2076 struct net *net = sock_net((const struct sock *)msk); in mptcp_event_addr_removed()
2091 if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token)) in mptcp_event_addr_removed()
2109 struct mptcp_sock *msk = mptcp_sk(subflow->conn); in mptcp_event_addr_announced() local
2126 if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token)) in mptcp_event_addr_announced()
2214 void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk, in mptcp_event() argument
2217 struct net *net = sock_net((const struct sock *)msk); in mptcp_event()
2238 if (mptcp_event_created(skb, msk, ssk) < 0) in mptcp_event()
2242 if (nla_put_u32(skb, MPTCP_ATTR_TOKEN, msk->token) < 0) in mptcp_event()
2252 if (mptcp_event_sub_established(skb, msk, ssk) < 0) in mptcp_event()
2256 if (mptcp_event_sub_closed(skb, msk, ssk) < 0) in mptcp_event()