From: Xiao Liang <shaw.leon@gmail.com>
To: netdev@vger.kernel.org
Cc: "David S. Miller" <davem@davemloft.net>,
David Ahern <dsahern@kernel.org>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Kuniyuki Iwashima <kuniyu@amazon.com>,
Ido Schimmel <idosch@nvidia.com>
Subject: [PATCH net-next 1/5] rtnetlink: Lookup device in target netns when creating link
Date: Wed, 23 Oct 2024 10:31:42 +0800 [thread overview]
Message-ID: <20241023023146.372653-2-shaw.leon@gmail.com> (raw)
In-Reply-To: <20241023023146.372653-1-shaw.leon@gmail.com>
When creating link, lookup for existing device in target net namespace
instead of current one.
For example, two links created by:
# ip link add dummy1 type dummy
# ip link add netns ns1 dummy1 type dummy
should have no conflict since they are in different namespaces.
Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
---
net/core/rtnetlink.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 194a81e5f608..ff8d25acfc00 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -3733,20 +3733,24 @@ static int __rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
{
struct nlattr ** const tb = tbs->tb;
struct net *net = sock_net(skb->sk);
+ struct net *device_net;
struct net_device *dev;
struct ifinfomsg *ifm;
bool link_specified;
+ /* When creating, lookup for existing device in target net namespace */
+ device_net = nlh->nlmsg_flags & NLM_F_CREATE ? tgt_net : net;
+
ifm = nlmsg_data(nlh);
if (ifm->ifi_index > 0) {
link_specified = true;
- dev = __dev_get_by_index(net, ifm->ifi_index);
+ dev = __dev_get_by_index(device_net, ifm->ifi_index);
} else if (ifm->ifi_index < 0) {
NL_SET_ERR_MSG(extack, "ifindex can't be negative");
return -EINVAL;
} else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME]) {
link_specified = true;
- dev = rtnl_dev_get(net, tb);
+ dev = rtnl_dev_get(device_net, tb);
} else {
link_specified = false;
dev = NULL;
--
2.47.0
next prev parent reply other threads:[~2024-10-23 2:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-23 2:31 [PATCH net-next 0/5] net: Improve netns handling in RTNL and ip_tunnel Xiao Liang
2024-10-23 2:31 ` Xiao Liang [this message]
2024-10-23 3:49 ` [PATCH net-next 1/5] rtnetlink: Lookup device in target netns when creating link Kuniyuki Iwashima
2024-10-23 4:19 ` Xiao Liang
2024-10-23 2:31 ` [PATCH net-next 2/5] rtnetlink: Add netns_atomic flag in rtnl_link_ops Xiao Liang
2024-10-23 4:03 ` Kuniyuki Iwashima
2024-10-23 4:36 ` Xiao Liang
2024-10-23 2:31 ` [PATCH net-next 3/5] net: ip_tunnel: Build flow in underlay net namespace Xiao Liang
2024-10-23 2:31 ` [PATCH net-next 4/5] net: ip_tunnel: Add source netns support for newlink Xiao Liang
2024-10-23 2:31 ` [PATCH net-next 5/5] net: ip_gre: Add netns_atomic module parameter Xiao Liang
2024-10-29 23:17 ` [PATCH net-next 0/5] net: Improve netns handling in RTNL and ip_tunnel Jakub Kicinski
2024-10-30 2:10 ` Xiao Liang
2024-10-30 23:35 ` Jakub Kicinski
2024-10-31 3:08 ` Xiao Liang
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=20241023023146.372653-2-shaw.leon@gmail.com \
--to=shaw.leon@gmail.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=idosch@nvidia.com \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/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.