netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down
@ 2026-09-08 18:19 Jakub Kicinski
  2026-09-09  3:16 ` Sheena Mohan
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Jakub Kicinski @ 2026-09-08 18:19 UTC (permalink / raw)
  To: davem
  Cc: netdev, edumazet, pabeni, andrew+netdev, horms, Jakub Kicinski,
	adrian.pielech, sheenamo, przemyslaw.kitszel, shuah,
	linux-kselftest

napi_id.py intermittently fails to start its helper on Intel and Google
HW runners:

  CMD: /srv/netdev/drivers/net/napi_id_helper 3001::1 37569
    EXIT: 1
    STDERR: bind failed: Cannot assign requested address

Either keep_addr_on_down is not set or more likely the address is
configured without nodad. Having to make sure that all tests
always wait for DAD after impacting the link would be a whack-a-mole
so we expect the env to have nodad and keep_addr_on_down set.

Warn about both while validating the environment, and document this.
We could fail completely but most tests don't impact the link so for
quick local testing it'd be annoying to have to apply the settings.
I hope the warninging stikes the right balance.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
Adrian, Sheena, please update the setups scripts for your
systems. Looks like nodad is missing.

CC: adrian.pielech@intel.com
CC: sheenamo@google.com
CC: przemyslaw.kitszel@intel.com
CCL hramamurthy@google.com
CC: shuah@kernel.org
CC: linux-kselftest@vger.kernel.org
---
 .../testing/selftests/drivers/net/README.rst  |  9 +++++++++
 .../selftests/drivers/net/lib/py/env.py       | 19 +++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/tools/testing/selftests/drivers/net/README.rst b/tools/testing/selftests/drivers/net/README.rst
index c6bed9a985bc..3fe49bce4f3a 100644
--- a/tools/testing/selftests/drivers/net/README.rst
+++ b/tools/testing/selftests/drivers/net/README.rst
@@ -70,6 +70,15 @@ LOCAL_V4, LOCAL_V6, REMOTE_V4, REMOTE_V6
 
 Local and remote endpoint IP addresses.
 
+Tests reconfigure the device freely, including taking the link down, and
+expect the addresses to work immediately afterwards. IPv6 needs help::
+
+  ip -6 address add 2001:db8:1::1/64 dev eth0 nodad
+  sysctl -w net.ipv6.conf.eth0.keep_addr_on_down=1
+
+Without those the address is flushed when the link goes down, or spends
+a second unusable while waiting for DAD to finish.
+
 LOCAL_PREFIX_V6
 ~~~~~~~~~~~~~~~
 
diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
index 25903f580b40..6262080a8bf4 100644
--- a/tools/testing/selftests/drivers/net/lib/py/env.py
+++ b/tools/testing/selftests/drivers/net/lib/py/env.py
@@ -239,6 +239,25 @@ from . import bpftool, RtnlFamily, Netlink
         if missing:
             raise Exception("Invalid environment, missing configuration:", missing,
                             "Please see tools/testing/selftests/drivers/net/README.rst")
+        if "LOCAL_V6" in self.env:
+            self._check_v6_env()
+
+    def _check_v6_env(self):
+        """Tests bind() to LOCAL_V6 and bounce the link, it must survive both."""
+        ifname, addr = self.env["NETIF"], self.env["LOCAL_V6"]
+
+        def _keep_addr(scope):
+            with open(f"/proc/sys/net/ipv6/conf/{scope}/keep_addr_on_down",
+                      encoding="utf-8") as fp:
+                return int(fp.read())
+
+        # 'all' wins when non-zero, see addrconf_ifdown()
+        if (_keep_addr("all") or _keep_addr(ifname)) <= 0:
+            ksft_pr(f"WARN: net.ipv6.conf.{ifname}.keep_addr_on_down not set")
+
+        dev = ip(f"-6 address show dev {ifname} to {addr}", json=True)
+        if not (dev and dev[0]["addr_info"][0].get("nodad")):
+            ksft_pr(f"WARN: LOCAL_V6 {addr} not configured with nodad")
 
     def resolve_remote_ifc(self):
         v4 = v6 = None
-- 
2.55.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down
  2026-09-08 18:19 [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down Jakub Kicinski
@ 2026-09-09  3:16 ` Sheena Mohan
  2026-09-11 13:25   ` Pielech, Adrian
  2026-09-09 20:17 ` netdev-bot+sashiko
  2026-09-09 20:40 ` patchwork-bot+netdevbpf
  2 siblings, 1 reply; 6+ messages in thread
From: Sheena Mohan @ 2026-09-09  3:16 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
	adrian.pielech, przemyslaw.kitszel, shuah, linux-kselftest

On Tue, Sep 8, 2026 at 11:19 AM Jakub Kicinski <kuba@kernel.org> wrote:
>
> napi_id.py intermittently fails to start its helper on Intel and Google
> HW runners:
>
>   CMD: /srv/netdev/drivers/net/napi_id_helper 3001::1 37569
>     EXIT: 1
>     STDERR: bind failed: Cannot assign requested address
>
> Either keep_addr_on_down is not set or more likely the address is
> configured without nodad. Having to make sure that all tests
> always wait for DAD after impacting the link would be a whack-a-mole
> so we expect the env to have nodad and keep_addr_on_down set.
>
> Warn about both while validating the environment, and document this.
> We could fail completely but most tests don't impact the link so for
> quick local testing it'd be annoying to have to apply the settings.
> I hope the warninging stikes the right balance.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> Adrian, Sheena, please update the setups scripts for your
> systems. Looks like nodad is missing.
>
> CC: adrian.pielech@intel.com
> CC: sheenamo@google.com
> CC: przemyslaw.kitszel@intel.com
> CCL hramamurthy@google.com
> CC: shuah@kernel.org
> CC: linux-kselftest@vger.kernel.org
> ---
>  .../testing/selftests/drivers/net/README.rst  |  9 +++++++++
>  .../selftests/drivers/net/lib/py/env.py       | 19 +++++++++++++++++++
>  2 files changed, 28 insertions(+)
>
> diff --git a/tools/testing/selftests/drivers/net/README.rst b/tools/testing/selftests/drivers/net/README.rst
> index c6bed9a985bc..3fe49bce4f3a 100644
> --- a/tools/testing/selftests/drivers/net/README.rst
> +++ b/tools/testing/selftests/drivers/net/README.rst
> @@ -70,6 +70,15 @@ LOCAL_V4, LOCAL_V6, REMOTE_V4, REMOTE_V6
>
>  Local and remote endpoint IP addresses.
>
> +Tests reconfigure the device freely, including taking the link down, and
> +expect the addresses to work immediately afterwards. IPv6 needs help::
> +
> +  ip -6 address add 2001:db8:1::1/64 dev eth0 nodad
> +  sysctl -w net.ipv6.conf.eth0.keep_addr_on_down=1
> +
> +Without those the address is flushed when the link goes down, or spends
> +a second unusable while waiting for DAD to finish.
> +
>  LOCAL_PREFIX_V6
>  ~~~~~~~~~~~~~~~
>
> diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
> index 25903f580b40..6262080a8bf4 100644
> --- a/tools/testing/selftests/drivers/net/lib/py/env.py
> +++ b/tools/testing/selftests/drivers/net/lib/py/env.py
> @@ -239,6 +239,25 @@ from . import bpftool, RtnlFamily, Netlink
>          if missing:
>              raise Exception("Invalid environment, missing configuration:", missing,
>                              "Please see tools/testing/selftests/drivers/net/README.rst")
> +        if "LOCAL_V6" in self.env:
> +            self._check_v6_env()
> +
> +    def _check_v6_env(self):
> +        """Tests bind() to LOCAL_V6 and bounce the link, it must survive both."""
> +        ifname, addr = self.env["NETIF"], self.env["LOCAL_V6"]
> +
> +        def _keep_addr(scope):
> +            with open(f"/proc/sys/net/ipv6/conf/{scope}/keep_addr_on_down",
> +                      encoding="utf-8") as fp:
> +                return int(fp.read())
> +
> +        # 'all' wins when non-zero, see addrconf_ifdown()
> +        if (_keep_addr("all") or _keep_addr(ifname)) <= 0:
> +            ksft_pr(f"WARN: net.ipv6.conf.{ifname}.keep_addr_on_down not set")
> +
> +        dev = ip(f"-6 address show dev {ifname} to {addr}", json=True)
> +        if not (dev and dev[0]["addr_info"][0].get("nodad")):
> +            ksft_pr(f"WARN: LOCAL_V6 {addr} not configured with nodad")
>
>      def resolve_remote_ifc(self):
>          v4 = v6 = None
> --
> 2.55.0
>
Thanks Jakub. We will update the setup scripts on our end to reflect
this configuration.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down
  2026-09-08 18:19 [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down Jakub Kicinski
  2026-09-09  3:16 ` Sheena Mohan
@ 2026-09-09 20:17 ` netdev-bot+sashiko
  2026-09-09 20:30   ` Jakub Kicinski
  2026-09-09 20:40 ` patchwork-bot+netdevbpf
  2 siblings, 1 reply; 6+ messages in thread
From: netdev-bot+sashiko @ 2026-09-09 20:17 UTC (permalink / raw)
  To: kuba
  Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
	adrian.pielech, sheenamo, przemyslaw.kitszel, shuah,
	linux-kselftest

Thank you for your contribution! Sashiko AI review found 1 potential
issue(s) to consider:

Critical: 0 · High: 0 · Medium: 1 · Low: 0

- [Medium] The patch documents a new environment invariant
  (README.rst:73-80: the local IPv6 address must be added with `nodad`…

--

selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down

This documents that the drv-net environment is expected to configure
LOCAL_V6 with nodad and with keep_addr_on_down enabled, and adds a check
in NetDrvEpEnv._check_env() that prints warnings when either is missing.
The motivation is intermittent bind() failures in napi_id.py on HW
runners.

> diff --git a/tools/testing/selftests/drivers/net/README.rst b/tools/testing/selftests/drivers/net/README.rst
> index c6bed9a985bc..3fe49bce4f3a 100644
> --- a/tools/testing/selftests/drivers/net/README.rst
> +++ b/tools/testing/selftests/drivers/net/README.rst
> @@ -70,6 +70,15 @@ LOCAL_V4, LOCAL_V6, REMOTE_V4, REMOTE_V6
>  
>  Local and remote endpoint IP addresses.
>  
> +Tests reconfigure the device freely, including taking the link down, and
> +expect the addresses to work immediately afterwards. IPv6 needs help::
> +
> +  ip -6 address add 2001:db8:1::1/64 dev eth0 nodad
> +  sysctl -w net.ipv6.conf.eth0.keep_addr_on_down=1
> +
> +Without those the address is flushed when the link goes down, or spends
> +a second unusable while waiting for DAD to finish.
> +
>  LOCAL_PREFIX_V6
>  ~~~~~~~~~~~~~~~
>  
> diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
> index 25903f580b40..6262080a8bf4 100644
> --- a/tools/testing/selftests/drivers/net/lib/py/env.py
> +++ b/tools/testing/selftests/drivers/net/lib/py/env.py
> @@ -239,6 +239,25 @@ class NetDrvEpEnv(NetDrvEnvBase):
>          if missing:
>              raise Exception("Invalid environment, missing configuration:", missing,
>                              "Please see tools/testing/selftests/drivers/net/README.rst")
> +        if "LOCAL_V6" in self.env:
> +            self._check_v6_env()

[Severity: Medium]
Do the in-tree environment providers meet the invariant that is being
documented here?

Two cases look like they do not:

1) NetDrvEpEnv.create_local() (the netdevsim path in the same file) adds
   the addresses with nodad, but never enables keep_addr_on_down on the
   nsim devices or on 'all':

     ip(f"   addr add dev {self._ns.nsims[0].ifname} {self.nsim_v4_pfx}1/24")
     ip(f"-6 addr add dev {self._ns.nsims[0].ifname} {self.nsim_v6_pfx}1/64 nodad")
     ip(f"   link set dev {self._ns.nsims[0].ifname} up")

   Both the devconf_all and per-device defaults are 0, and
   addrconf_ifdown() drops permanent global addresses when the aggregate
   is not positive:

   net/ipv6/addrconf.c:addrconf_ifdown() {
	...
	int _keep_addr = READ_ONCE(net->ipv6.devconf_all->keep_addr_on_down);

	if (!_keep_addr)
		_keep_addr = READ_ONCE(idev->cnf.keep_addr_on_down);

	keep_addr = (_keep_addr > 0);
	...
   }

   So a test that follows the new documentation and bounces the link
   would lose the nsim LOCAL_V6 address. Note also that this path never
   reaches _check_v6_env(), since the call is only made from the branch
   that requires NETIF, so there is no warning either.

2) tools/testing/selftests/net/lib/ksft_setup_loopback.sh sets up the
   env that this code validates, and adds LOCAL_V6 without nodad and
   without touching keep_addr_on_down:

     ip -netns "${SERVER_NS}" addr add $LOCAL_V6/64 dev server
     ...
     export NETIF=server

   Would every run driven by that script now print both new warnings,
   pointing at in-tree setup code rather than at a user
   misconfiguration? Should the script and create_local() be updated
   along with the documentation?

>  
>      def resolve_remote_ifc(self):
>          v4 = v6 = None

-- 
Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260908181956.1357684-1-kuba%40kernel.org

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down
  2026-09-09 20:17 ` netdev-bot+sashiko
@ 2026-09-09 20:30   ` Jakub Kicinski
  0 siblings, 0 replies; 6+ messages in thread
From: Jakub Kicinski @ 2026-09-09 20:30 UTC (permalink / raw)
  To: netdev-bot+sashiko
  Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
	adrian.pielech, sheenamo, przemyslaw.kitszel, shuah,
	linux-kselftest

On Wed, 09 Sep 2026 20:17:51 +0000 netdev-bot+sashiko@kernel.org wrote:
> > diff --git a/tools/testing/selftests/drivers/net/README.rst b/tools/testing/selftests/drivers/net/README.rst
> > index c6bed9a985bc..3fe49bce4f3a 100644
> > --- a/tools/testing/selftests/drivers/net/README.rst
> > +++ b/tools/testing/selftests/drivers/net/README.rst
> > @@ -70,6 +70,15 @@ LOCAL_V4, LOCAL_V6, REMOTE_V4, REMOTE_V6
> >  
> >  Local and remote endpoint IP addresses.
> >  
> > +Tests reconfigure the device freely, including taking the link down, and
> > +expect the addresses to work immediately afterwards. IPv6 needs help::
> > +
> > +  ip -6 address add 2001:db8:1::1/64 dev eth0 nodad
> > +  sysctl -w net.ipv6.conf.eth0.keep_addr_on_down=1
> > +
> > +Without those the address is flushed when the link goes down, or spends
> > +a second unusable while waiting for DAD to finish.
> > +
> >  LOCAL_PREFIX_V6
> >  ~~~~~~~~~~~~~~~
> >  
> > diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
> > index 25903f580b40..6262080a8bf4 100644
> > --- a/tools/testing/selftests/drivers/net/lib/py/env.py
> > +++ b/tools/testing/selftests/drivers/net/lib/py/env.py
> > @@ -239,6 +239,25 @@ class NetDrvEpEnv(NetDrvEnvBase):
> >          if missing:
> >              raise Exception("Invalid environment, missing configuration:", missing,
> >                              "Please see tools/testing/selftests/drivers/net/README.rst")
> > +        if "LOCAL_V6" in self.env:
> > +            self._check_v6_env()  
> 
> [Severity: Medium]
> Do the in-tree environment providers meet the invariant that is being
> documented here?
> 
> Two cases look like they do not:
> 
> 1) NetDrvEpEnv.create_local() (the netdevsim path in the same file) adds
>    the addresses with nodad, but never enables keep_addr_on_down on the
>    nsim devices or on 'all':
> 
>      ip(f"   addr add dev {self._ns.nsims[0].ifname} {self.nsim_v4_pfx}1/24")
>      ip(f"-6 addr add dev {self._ns.nsims[0].ifname} {self.nsim_v6_pfx}1/64 nodad")
>      ip(f"   link set dev {self._ns.nsims[0].ifname} up")
> 
>    Both the devconf_all and per-device defaults are 0, and
>    addrconf_ifdown() drops permanent global addresses when the aggregate
>    is not positive:
> 
>    net/ipv6/addrconf.c:addrconf_ifdown() {
> 	...
> 	int _keep_addr = READ_ONCE(net->ipv6.devconf_all->keep_addr_on_down);
> 
> 	if (!_keep_addr)
> 		_keep_addr = READ_ONCE(idev->cnf.keep_addr_on_down);
> 
> 	keep_addr = (_keep_addr > 0);
> 	...
>    }
> 
>    So a test that follows the new documentation and bounces the link
>    would lose the nsim LOCAL_V6 address. Note also that this path never
>    reaches _check_v6_env(), since the call is only made from the branch
>    that requires NETIF, so there is no warning either.

This is no different to the HW case, we expect the outside runner 
to configure the system. As proven by the fact that the WARN print
added here does not trigger in NIPA on netdevsim:

https://netdev-ctrl.bots.linux.dev/logs/vmksft/net-drv/results/816282/13-napi-id-py/stdout

> 2) tools/testing/selftests/net/lib/ksft_setup_loopback.sh sets up the
>    env that this code validates, and adds LOCAL_V6 without nodad and
>    without touching keep_addr_on_down:
> 
>      ip -netns "${SERVER_NS}" addr add $LOCAL_V6/64 dev server
>      ...
>      export NETIF=server
> 
>    Would every run driven by that script now print both new warnings,
>    pointing at in-tree setup code rather than at a user
>    misconfiguration? Should the script and create_local() be updated
>    along with the documentation?

Not sure if and how that script is actually used :S

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down
  2026-09-08 18:19 [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down Jakub Kicinski
  2026-09-09  3:16 ` Sheena Mohan
  2026-09-09 20:17 ` netdev-bot+sashiko
@ 2026-09-09 20:40 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-09-09 20:40 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
	adrian.pielech, sheenamo, przemyslaw.kitszel, shuah,
	linux-kselftest

Hello:

This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Tue,  8 Sep 2026 11:19:56 -0700 you wrote:
> napi_id.py intermittently fails to start its helper on Intel and Google
> HW runners:
> 
>   CMD: /srv/netdev/drivers/net/napi_id_helper 3001::1 37569
>     EXIT: 1
>     STDERR: bind failed: Cannot assign requested address
> 
> [...]

Here is the summary with links:
  - [net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down
    https://git.kernel.org/netdev/net-next/c/3929f55da21f

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down
  2026-09-09  3:16 ` Sheena Mohan
@ 2026-09-11 13:25   ` Pielech, Adrian
  0 siblings, 0 replies; 6+ messages in thread
From: Pielech, Adrian @ 2026-09-11 13:25 UTC (permalink / raw)
  To: Sheena Mohan, Jakub Kicinski
  Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
	przemyslaw.kitszel, shuah, linux-kselftest

On 9/9/2026 5:16 AM, Sheena Mohan wrote:
> On Tue, Sep 8, 2026 at 11:19 AM Jakub Kicinski <kuba@kernel.org> wrote:
>>
>> napi_id.py intermittently fails to start its helper on Intel and Google
>> HW runners:
>>
>>    CMD: /srv/netdev/drivers/net/napi_id_helper 3001::1 37569
>>      EXIT: 1
>>      STDERR: bind failed: Cannot assign requested address
>>
>> Either keep_addr_on_down is not set or more likely the address is
>> configured without nodad. Having to make sure that all tests
>> always wait for DAD after impacting the link would be a whack-a-mole
>> so we expect the env to have nodad and keep_addr_on_down set.
>>
>> Warn about both while validating the environment, and document this.
>> We could fail completely but most tests don't impact the link so for
>> quick local testing it'd be annoying to have to apply the settings.
>> I hope the warninging stikes the right balance.
>>
>> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
>> ---
>> Adrian, Sheena, please update the setups scripts for your
>> systems. Looks like nodad is missing.
>>
>> CC: adrian.pielech@intel.com
>> CC: sheenamo@google.com
>> CC: przemyslaw.kitszel@intel.com
>> CCL hramamurthy@google.com
>> CC: shuah@kernel.org
>> CC: linux-kselftest@vger.kernel.org
>> ---
>>   .../testing/selftests/drivers/net/README.rst  |  9 +++++++++
>>   .../selftests/drivers/net/lib/py/env.py       | 19 +++++++++++++++++++
>>   2 files changed, 28 insertions(+)
>>
>> diff --git a/tools/testing/selftests/drivers/net/README.rst b/tools/testing/selftests/drivers/net/README.rst
>> index c6bed9a985bc..3fe49bce4f3a 100644
>> --- a/tools/testing/selftests/drivers/net/README.rst
>> +++ b/tools/testing/selftests/drivers/net/README.rst
>> @@ -70,6 +70,15 @@ LOCAL_V4, LOCAL_V6, REMOTE_V4, REMOTE_V6
>>
>>   Local and remote endpoint IP addresses.
>>
>> +Tests reconfigure the device freely, including taking the link down, and
>> +expect the addresses to work immediately afterwards. IPv6 needs help::
>> +
>> +  ip -6 address add 2001:db8:1::1/64 dev eth0 nodad
>> +  sysctl -w net.ipv6.conf.eth0.keep_addr_on_down=1
>> +
>> +Without those the address is flushed when the link goes down, or spends
>> +a second unusable while waiting for DAD to finish.
>> +
>>   LOCAL_PREFIX_V6
>>   ~~~~~~~~~~~~~~~
>>
>> diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
>> index 25903f580b40..6262080a8bf4 100644
>> --- a/tools/testing/selftests/drivers/net/lib/py/env.py
>> +++ b/tools/testing/selftests/drivers/net/lib/py/env.py
>> @@ -239,6 +239,25 @@ from . import bpftool, RtnlFamily, Netlink
>>           if missing:
>>               raise Exception("Invalid environment, missing configuration:", missing,
>>                               "Please see tools/testing/selftests/drivers/net/README.rst")
>> +        if "LOCAL_V6" in self.env:
>> +            self._check_v6_env()
>> +
>> +    def _check_v6_env(self):
>> +        """Tests bind() to LOCAL_V6 and bounce the link, it must survive both."""
>> +        ifname, addr = self.env["NETIF"], self.env["LOCAL_V6"]
>> +
>> +        def _keep_addr(scope):
>> +            with open(f"/proc/sys/net/ipv6/conf/{scope}/keep_addr_on_down",
>> +                      encoding="utf-8") as fp:
>> +                return int(fp.read())
>> +
>> +        # 'all' wins when non-zero, see addrconf_ifdown()
>> +        if (_keep_addr("all") or _keep_addr(ifname)) <= 0:
>> +            ksft_pr(f"WARN: net.ipv6.conf.{ifname}.keep_addr_on_down not set")
>> +
>> +        dev = ip(f"-6 address show dev {ifname} to {addr}", json=True)
>> +        if not (dev and dev[0]["addr_info"][0].get("nodad")):
>> +            ksft_pr(f"WARN: LOCAL_V6 {addr} not configured with nodad")
>>
>>       def resolve_remote_ifc(self):
>>           v4 = v6 = None
>> --
>> 2.55.0
>>
> Thanks Jakub. We will update the setup scripts on our end to reflect
> this configuration.

Applied to the setups, thanks for noticing about that requirement!

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-09-11 13:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-08 18:19 [PATCH net-next] selftests: drv-net: warn if LOCAL_V6 has DAD or not kept on link down Jakub Kicinski
2026-09-09  3:16 ` Sheena Mohan
2026-09-11 13:25   ` Pielech, Adrian
2026-09-09 20:17 ` netdev-bot+sashiko
2026-09-09 20:30   ` Jakub Kicinski
2026-09-09 20:40 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).