All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mat Martineau <martineau@kernel.org>
To: Geliang Tang <geliang.tang@linux.dev>
Cc: mptcp@lists.linux.dev
Subject: Re: [PATCH mptcp-next v14 06/25] mptcp: dump addrs in userspace pm list
Date: Fri, 8 Dec 2023 17:26:05 -0800 (PST)	[thread overview]
Message-ID: <99092ce5-dd9a-991e-c588-e6ffeb0b0520@kernel.org> (raw)
In-Reply-To: <c4e0b884beb2f6dac38792d4881c1c1943a329ad.1702029538.git.geliang.tang@linux.dev>

On Fri, 8 Dec 2023, Geliang Tang wrote:

> This patch adds a new function __userspace_pm_lookup_addr_by_id() to lookup
> the address entry by the given id in the userspace local addresses list.
> Invoke it when dumping addresses from netlink commands.
>

Hi Geliang -

The existing per-net dump command won't work for the userspace PM, since 
each connection can have separate local address lists. So, the get-addr 
dump command needs an optional 'token' parameter that will dump the local 
addr list for one userspace PM connection.

- Mat

> Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
> ---
> net/mptcp/pm_netlink.c   |  9 +++++++--
> net/mptcp/pm_userspace.c | 25 +++++++++++++++++++++++++
> net/mptcp/protocol.h     |  2 ++
> 3 files changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
> index 1c85d711a86e..489a7723efc4 100644
> --- a/net/mptcp/pm_netlink.c
> +++ b/net/mptcp/pm_netlink.c
> @@ -1676,8 +1676,13 @@ int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg,
> 	for (i = id; i < MPTCP_PM_MAX_ADDR_ID + 1; i++) {
> 		if (test_bit(i, pernet->id_bitmap)) {
> 			entry = __lookup_addr_by_id(pernet, i);
> -			if (!entry)
> -				break;
> +			if (!entry) {
> +				spin_unlock_bh(&pernet->lock);
> +				entry = __userspace_pm_lookup_addr_by_id(net, i);
> +				spin_lock_bh(&pernet->lock);
> +				if (!entry)
> +					break;
> +			}
>
> 			if (entry->addr.id <= id)
> 				continue;
> diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
> index 6999296cd5db..5e45e36ce1d3 100644
> --- a/net/mptcp/pm_userspace.c
> +++ b/net/mptcp/pm_userspace.c
> @@ -549,3 +549,28 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token,
> 	sock_put(sk);
> 	return ret;
> }
> +
> +struct mptcp_pm_addr_entry *
> +__userspace_pm_lookup_addr_by_id(struct net *net, unsigned int id)
> +{
> +	struct mptcp_pm_addr_entry *entry = NULL;
> +	long s_slot = 0, s_num = 0;
> +	struct mptcp_sock *msk;
> +
> +	while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
> +		struct sock *sk = (struct sock *)msk;
> +
> +		if (mptcp_pm_is_userspace(msk)) {
> +			lock_sock(sk);
> +			spin_lock_bh(&msk->pm.lock);
> +			entry = mptcp_userspace_pm_lookup_addr_by_id(msk, id);
> +			spin_unlock_bh(&msk->pm.lock);
> +			release_sock(sk);
> +		}
> +
> +		sock_put(sk);
> +		cond_resched();
> +	}
> +
> +	return entry;
> +}
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 8296bdf58f90..3ab4a4f1bf81 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -1025,6 +1025,8 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
> int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
> int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
> int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc);
> +struct mptcp_pm_addr_entry *
> +__userspace_pm_lookup_addr_by_id(struct net *net, unsigned int id);
>
> void __init mptcp_pm_nl_init(void);
> void mptcp_pm_nl_work(struct mptcp_sock *msk);
> -- 
> 2.35.3
>
>
>

  reply	other threads:[~2023-12-09  1:26 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-08 10:07 [PATCH mptcp-next v14 00/25] userspace pm enhancements Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 01/25] mptcp: export pm_nl_get_pernet_from_msk Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 02/25] mptcp: drop mptcp_pm_get_* helpers Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 03/25] mptcp: use pernet id_bitmap in userspace pm Geliang Tang
2023-12-09  1:17   ` Mat Martineau
2023-12-08 10:07 ` [PATCH mptcp-next v14 04/25] mptcp: add userspace_pm_lookup_addr_by_id helper Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 05/25] mptcp: drop lookup_by_id parameter in lookup_addr Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 06/25] mptcp: dump addrs in userspace pm list Geliang Tang
2023-12-09  1:26   ` Mat Martineau [this message]
2023-12-08 10:07 ` [PATCH mptcp-next v14 07/25] mptcp: check userspace pm subflow flag Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 08/25] selftests: mptcp: add " Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 09/25] selftests: mptcp: dump userspace addrs list Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 10/25] mptcp: set set_id flag when parsing addr Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 11/25] mptcp: use set_id flag when appending addr Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 12/25] mptcp: check addrs list in userspace_pm_get_local_id Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 13/25] selftests: mptcp: dump after creating id 0 subflow Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 14/25] mptcp: map v4 address to v6 when destroying subflow Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 15/25] selftests: mptcp: rm subflow with v4/v4mapped addr Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 16/25] mptcp: make pm_remove_addrs_and_subflows static Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 17/25] mptcp: add a prefix for free_local_addr_list Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 18/25] selftests: mptcp: flush userspace addrs list Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 19/25] mptcp: add use_id parameter for addresses_equal Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 20/25] mptcp: add check_id for lookup_anno_list_by_saddr Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 21/25] mptcp: add userspace_pm_get_entry helper Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 22/25] mptcp: drop addr_match and id_match Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 23/25] mptcp: dup an entry when removing it Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 24/25] mptcp: add userspace pm addr entry refcount Geliang Tang
2023-12-08 10:07 ` [PATCH mptcp-next v14 25/25] selftests: mptcp: rm userspace addr with random order Geliang Tang
2023-12-09  1:15 ` [PATCH mptcp-next v14 00/25] userspace pm enhancements Mat Martineau
2024-02-02 14:51   ` Matthieu Baerts
2023-12-27 11:38 ` Matthieu Baerts
2023-12-28  2:31   ` Geliang Tang
2023-12-28  9:44     ` Matthieu Baerts
2024-01-03  5:03       ` Geliang Tang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=99092ce5-dd9a-991e-c588-e6ffeb0b0520@kernel.org \
    --to=martineau@kernel.org \
    --cc=geliang.tang@linux.dev \
    --cc=mptcp@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.