mbox series

[v1,net-next,00/11] ipv6: Convert RTM_{NEW,DEL}ADDR and more to per-netns RTNL.

Message ID 20250114080516.46155-1-kuniyu@amazon.com (mailing list archive)
Headers show
Series ipv6: Convert RTM_{NEW,DEL}ADDR and more to per-netns RTNL. | expand

Message

Kuniyuki Iwashima Jan. 14, 2025, 8:05 a.m. UTC
This series converts RTM_NEWADDR/RTM_DELADDR and some more
RTNL users in addrconf.c to per-netns RTNL.


Kuniyuki Iwashima (11):
  ipv6: Add __in6_dev_get_rtnl_net().
  ipv6: Convert net.ipv6.conf.${DEV}.XXX sysctl to per-netns RTNL.
  ipv6: Hold rtnl_net_lock() in addrconf_verify_work().
  ipv6: Hold rtnl_net_lock() in addrconf_dad_work().
  ipv6: Hold rtnl_net_lock() in addrconf_init() and addrconf_cleanup().
  ipv6: Convert inet6_ioctl() to per-netns RTNL.
  ipv6: Set cfg.ifa_flags before device lookup in inet6_rtm_newaddr().
  ipv6: Pass dev to inet6_addr_add().
  ipv6: Move lifetime validation to inet6_rtm_newaddr().
  ipv6: Convert inet6_rtm_newaddr() to per-netns RTNL.
  ipv6: Convert inet6_rtm_deladdr() to per-netns RTNL.

 include/net/addrconf.h |   5 +
 net/ipv6/addrconf.c    | 247 ++++++++++++++++++++---------------------
 2 files changed, 125 insertions(+), 127 deletions(-)

Comments

Stanislav Fomichev Jan. 14, 2025, 5:13 p.m. UTC | #1
On 01/14, Kuniyuki Iwashima wrote:
> This series converts RTM_NEWADDR/RTM_DELADDR and some more
> RTNL users in addrconf.c to per-netns RTNL.

This makes a lot of tests unhappy:
https://netdev.bots.linux.dev/contest.html?pw-n=0&branch=net-next-2025-01-14--15-00&pw-n=0&pass=0

I have confirmed with a single one (drivers/net/ping.py) on my side,
fails with:
STDERR: b'ping: connect: Network is unreachable\n'

---
pw-bot: cr
Kuniyuki Iwashima Jan. 15, 2025, 4:36 a.m. UTC | #2
From: Stanislav Fomichev <stfomichev@gmail.com>
Date: Tue, 14 Jan 2025 09:13:52 -0800
> On 01/14, Kuniyuki Iwashima wrote:
> > This series converts RTM_NEWADDR/RTM_DELADDR and some more
> > RTNL users in addrconf.c to per-netns RTNL.
> 
> This makes a lot of tests unhappy:
> https://netdev.bots.linux.dev/contest.html?pw-n=0&branch=net-next-2025-01-14--15-00&pw-n=0&pass=0
> 
> I have confirmed with a single one (drivers/net/ping.py) on my side,
> fails with:
> STDERR: b'ping: connect: Network is unreachable\n'

Oh sorry, I had to move lifetime validation after cfg.ifa_flags
initialisation, otherwise IFA_F_PERMANENT disappears.

Will squash the diff below to patch 9 in v2.

Thanks!

---8<---
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 721a4bceb107..9ae25a8d1632 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -4974,9 +4974,16 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
 	if (tb[IFA_PROTO])
 		cfg.ifa_proto = nla_get_u8(tb[IFA_PROTO]);
 
+	cfg.ifa_flags = nla_get_u32_default(tb[IFA_FLAGS], ifm->ifa_flags);
+
+	/* We ignore other flags so far. */
+	cfg.ifa_flags &= IFA_F_NODAD | IFA_F_HOMEADDRESS |
+			 IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE |
+			 IFA_F_MCAUTOJOIN | IFA_F_OPTIMISTIC;
+
+	cfg.ifa_flags |= IFA_F_PERMANENT;
 	cfg.valid_lft = INFINITY_LIFE_TIME;
 	cfg.preferred_lft = INFINITY_LIFE_TIME;
-	cfg.ifa_flags |= IFA_F_PERMANENT;
 	expires = 0;
 	flags = 0;
 
@@ -5009,13 +5016,6 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
 		}
 	}
 
-	cfg.ifa_flags = nla_get_u32_default(tb[IFA_FLAGS], ifm->ifa_flags);
-
-	/* We ignore other flags so far. */
-	cfg.ifa_flags &= IFA_F_NODAD | IFA_F_HOMEADDRESS |
-			 IFA_F_MANAGETEMPADDR | IFA_F_NOPREFIXROUTE |
-			 IFA_F_MCAUTOJOIN | IFA_F_OPTIMISTIC;
-
 	dev =  __dev_get_by_index(net, ifm->ifa_index);
 	if (!dev) {
 		NL_SET_ERR_MSG_MOD(extack, "Unable to find the interface");
---8<---