From: Geliang Tang <geliang.tang@suse.com>
To: mptcp@lists.linux.dev
Subject: Re: [PATCH mptcp-next v11 04/12] mptcp: add addr into userspace pm list
Date: Thu, 4 May 2023 18:57:58 +0800 [thread overview]
Message-ID: <20230504105758.GA17540@bogon> (raw)
In-Reply-To: <4ec2d013559dce53d222e9cbd53c45a4b4d5ba12.1683195386.git.geliang.tang@suse.com>
On Thu, May 04, 2023 at 06:20:09PM +0800, Geliang Tang wrote:
> Add the address into userspace_pm_local_addr_list when the subflow is
> created. Make sure it can be found in mptcp_nl_cmd_remove(). And delete
> it in the new helper mptcp_userspace_pm_delete_local_addr().
>
> Add address into pm anno_list in mptcp_nl_cmd_sf_create(). Remove
> it when connecting fails.
>
> By doing this, the "REMOVE" command also works with subflows that have
> been created via the "SUB_CREATE" command instead of restricting to
> the addresses that have been announced via the "ANNOUNCE" command.
>
> Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE")
> Link: https://github.com/multipath-tcp/mptcp_net-next/issues/379
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> net/mptcp/pm_userspace.c | 51 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 51 insertions(+)
>
> diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
> index 6beadea8c67d..c50e1507ae35 100644
> --- a/net/mptcp/pm_userspace.c
> +++ b/net/mptcp/pm_userspace.c
> @@ -79,6 +79,24 @@ static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk,
> return ret;
> }
>
> +static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk,
> + struct mptcp_pm_addr_entry *addr)
> +{
> + struct mptcp_pm_addr_entry *entry, *tmp;
> +
> + list_for_each_entry_safe(entry, tmp, &msk->pm.userspace_pm_local_addr_list, list) {
> + if (mptcp_addresses_equal(&entry->addr, &addr->addr, false)) {
> + /* TODO: a refcount is needed because the entry can
> + * be used multiple times (e.g. fullmesh mode). */
CI reported a checkpatch warning here. It should be:
* be used multiple times (e.g. fullmesh mode).
*/
> + list_del_rcu(&entry->list);
> + kfree(entry);
> + return 0;
> + }
> + }
> +
> + return -EINVAL;
> +}
> +
> int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
> unsigned int id,
> u8 *flags, int *ifindex)
> @@ -251,6 +269,7 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
> struct nlattr *raddr = info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE];
> struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
> struct nlattr *laddr = info->attrs[MPTCP_PM_ATTR_ADDR];
> + struct mptcp_pm_addr_entry local = { 0 };
> struct mptcp_addr_info addr_r;
> struct mptcp_addr_info addr_l;
> struct mptcp_sock *msk;
> @@ -302,12 +321,40 @@ int mptcp_nl_cmd_sf_create(struct sk_buff *skb, struct genl_info *info)
> goto create_err;
> }
>
> + local.addr = addr_l;
> + err = mptcp_userspace_pm_append_new_local_addr(msk, &local);
> + if (err < 0) {
> + GENL_SET_ERR_MSG(info, "did not match address and id");
> + goto create_err;
> + }
> +
> + spin_lock_bh(&msk->pm.lock);
> + if (!mptcp_pm_alloc_anno_list(msk, &local)) {
> + mptcp_userspace_pm_delete_local_addr(msk, &local);
> + spin_unlock_bh(&msk->pm.lock);
> + goto create_err;
> + }
> + spin_unlock_bh(&msk->pm.lock);
> +
> lock_sock(sk);
>
> err = __mptcp_subflow_connect(sk, &addr_l, &addr_r);
>
> release_sock(sk);
>
> + spin_lock_bh(&msk->pm.lock);
> + if (err) {
> + mptcp_pm_remove_anno_list_by_saddr(msk, &addr_l);
> + mptcp_userspace_pm_delete_local_addr(msk, &local);
> + }
> + spin_unlock_bh(&msk->pm.lock);
> +
> + /* If the subflow is closed from the other peer (not via a
> + * subflow destroy command then), we want to keep the entry
> + * not to assign the same ID to another address and to be
> + * able to send RM_ADDR after the removal of the subflow.
> + */
> +
> create_err:
> sock_put((struct sock *)msk);
> return err;
> @@ -420,10 +467,14 @@ int mptcp_nl_cmd_sf_destroy(struct sk_buff *skb, struct genl_info *info)
> ssk = mptcp_nl_find_ssk(msk, &addr_l, &addr_r);
> if (ssk) {
> struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
> + struct mptcp_pm_addr_entry entry = { .addr = addr_l };
>
> mptcp_subflow_shutdown(sk, ssk, RCV_SHUTDOWN | SEND_SHUTDOWN);
> mptcp_close_ssk(sk, ssk, subflow);
> MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RMSUBFLOW);
> + spin_lock_bh(&msk->pm.lock);
> + mptcp_userspace_pm_delete_local_addr(msk, &entry);
> + spin_unlock_bh(&msk->pm.lock);
> err = 0;
> } else {
> err = -ESRCH;
> --
> 2.35.3
>
next prev parent reply other threads:[~2023-05-04 10:57 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-04 10:20 [PATCH mptcp-next v11 00/12] update userspace pm mptcp_info fields Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 01/12] mptcp: only send RM_ADDR in nl_cmd_remove Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 02/12] selftests: mptcp: update userspace pm addr tests Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 03/12] mptcp: export remove_anno_list_by_saddr Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 04/12] mptcp: add addr into userspace pm list Geliang Tang
2023-05-04 10:57 ` Geliang Tang [this message]
2023-05-04 14:59 ` Matthieu Baerts
2023-05-17 15:26 ` Matthieu Baerts
2023-05-04 10:20 ` [PATCH mptcp-next v11 05/12] selftests: mptcp: update userspace pm subflow tests Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 06/12] mptcp: update userspace pm infos Geliang Tang
2023-05-04 10:59 ` Geliang Tang
2023-05-04 12:46 ` Matthieu Baerts
2023-05-04 15:02 ` Matthieu Baerts
2023-05-04 10:20 ` [PATCH mptcp-next v11 07/12] selftests: mptcp: do userspace tests out of transfer Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 08/12] selftests: mptcp: check subflows infos Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 09/12] selftests: mptcp: check add_addr infos Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 10/12] mptcp: pass addr to mptcp_pm_alloc_anno_list Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 11/12] selftests: mptcp: pass fastclose to sflags Geliang Tang
2023-05-04 10:20 ` [PATCH mptcp-next v11 12/12] selftests: mptcp: do endpoint manipulation out of transfer Geliang Tang
2023-05-04 11:33 ` selftests: mptcp: do endpoint manipulation out of transfer: Tests Results MPTCP CI
2023-05-04 14:57 ` [PATCH mptcp-next v11 00/12] update userspace pm mptcp_info fields Matthieu Baerts
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=20230504105758.GA17540@bogon \
--to=geliang.tang@suse.com \
--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.