diff mbox series

[net-next] selftests: forwarding: lib.sh: ignore "Address not found"

Message ID 764585b6852537a93c6fba3260e311b79280267a.1722917654.git.tanggeliang@kylinos.cn
State New
Headers show
Series [net-next] selftests: forwarding: lib.sh: ignore "Address not found" | expand

Commit Message

Geliang Tang Aug. 6, 2024, 4:20 a.m. UTC
From: Geliang Tang <tanggeliang@kylinos.cn>

So many "Address not found" messages occur at the end of forwarding tests
when using "ip address del" command for an invalid address:

TEST: FDB limits interacting with FDB type local                    [ OK ]
Error: ipv4: Address not found.

... ...
TEST: IGMPv3 S,G port entry automatic add to a *,G port             [ OK ]
Error: ipv4: Address not found.
Error: ipv6: address not found.

... ...
TEST: Isolated port flooding                                        [ OK ]
Error: ipv4: Address not found.
Error: ipv6: address not found.

... ...
TEST: Externally learned FDB entry - ageing & roaming               [ OK ]
Error: ipv4: Address not found.
Error: ipv6: address not found.

This patch gnores these messages and redirects them to /dev/null in
__addr_add_del().

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/net/forwarding/lib.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Geliang Tang Aug. 7, 2024, 4:08 a.m. UTC | #1
Hi Ido,

Thanks for the review.

On Tue, 2024-08-06 at 10:40 +0300, Ido Schimmel wrote:
> On Tue, Aug 06, 2024 at 12:20:38PM +0800, Geliang Tang wrote:
> > From: Geliang Tang <tanggeliang@kylinos.cn>
> > 
> > So many "Address not found" messages occur at the end of forwarding
> > tests
> > when using "ip address del" command for an invalid address:
> 
> Can you give an example of an invalid address that triggers this
> message?
> 
> > 
> > TEST: FDB limits interacting with FDB type local                   
> > [ OK ]
> > Error: ipv4: Address not found.
> > 
> > ... ...
> > TEST: IGMPv3 S,G port entry automatic add to a *,G port            
> > [ OK ]
> > Error: ipv4: Address not found.
> > Error: ipv6: address not found.
> > 
> > ... ...
> > TEST: Isolated port flooding                                       
> > [ OK ]
> > Error: ipv4: Address not found.
> > Error: ipv6: address not found.
> > 
> > ... ...
> > TEST: Externally learned FDB entry - ageing & roaming              
> > [ OK ]
> > Error: ipv4: Address not found.
> > Error: ipv6: address not found.
> 
> I'm unable to reproduce these with net-next and iproute2-next. Please
> debug this to understand the root cause or provide more details on
> how
> to reproduce.

I did get these errors with the latest net-next and iproute2-next. For
example, I got these errors of "bridge_mdb_port_down.sh":

$ sudo ./bridge_mdb_port_down.sh 
TEST: MDB add/del entry to port with state down                  [ OK ]
Error: ipv4: Address not found.
Error: ipv6: address not found.
Error: ipv4: Address not found.
Error: ipv6: address not found.

These errors occur when using h1_destroy() and h2_destroy() to delete
the addresses of h1 (192.0.2.1, 2001:db8:1::1) and h2 (192.0.2.2,
2001:db8:1::2):

h1_destroy()
{
        simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
}

h2_destroy()
{
        simple_if_fini $h2 192.0.2.2/24 2001:db8:1::2/64
}

It seems that when invoking h1_destroy() and h2_destroy(), both h1 and
h2 no longer have IP addresses.

I added "ifconfig" to show the addresses of h1 and h2 before invoking
h1_destroy() and h2_destroy() like this:

'''
@@ -105,7 +105,9 @@ cleanup()
        pre_cleanup
 
        switch_destroy
+       ifconfig $h1
        h1_destroy
+       ifconfig $h2
        h2_destroy
 
        vrf_cleanup
'''

And got these messages:

TEST: MDB add/del entry to port with state down                 [ OK ]
veth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether f2:ca:02:ee:05:19  txqueuelen 1000  (Ethernet)
        RX packets 149  bytes 17355 (17.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 81  bytes 9165 (9.1 KB)
        TX errors 0  dropped 12 overruns 0  carrier 0  collisions 0

Error: ipv4: Address not found.
Error: ipv6: address not found.
veth3: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 92:df:97:5c:98:7e  txqueuelen 1000  (Ethernet)
        RX packets 67  bytes 6252 (6.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39  bytes 4997 (4.9 KB)
        TX errors 0  dropped 56 overruns 0  carrier 0  collisions 0

Error: ipv4: Address not found.
Error: ipv6: address not found.

-Geliang

> 
> > 
> > This patch gnores these messages and redirects them to /dev/null in
> > __addr_add_del().
> > 
> > Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> > ---
> >  tools/testing/selftests/net/forwarding/lib.sh | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/tools/testing/selftests/net/forwarding/lib.sh
> > b/tools/testing/selftests/net/forwarding/lib.sh
> > index ff96bb7535ff..8670b6053cde 100644
> > --- a/tools/testing/selftests/net/forwarding/lib.sh
> > +++ b/tools/testing/selftests/net/forwarding/lib.sh
> > @@ -839,7 +839,7 @@ __addr_add_del()
> >  	array=("${@}")
> >  
> >  	for addrstr in "${array[@]}"; do
> > -		ip address $add_del $addrstr dev $if_name
> > +		ip address $add_del $addrstr dev $if_name &>
> > /dev/null
> >  	done
> >  }
> >  
> > -- 
> > 2.43.0
> >
Jakub Kicinski Aug. 7, 2024, 2:32 p.m. UTC | #2
On Wed, 07 Aug 2024 12:08:15 +0800 Geliang Tang wrote:
> I did get these errors with the latest net-next and iproute2-next. For
> example, I got these errors of "bridge_mdb_port_down.sh":
> 
> $ sudo ./bridge_mdb_port_down.sh 
> TEST: MDB add/del entry to port with state down                  [ OK ]
> Error: ipv4: Address not found.
> Error: ipv6: address not found.
> Error: ipv4: Address not found.
> Error: ipv6: address not found.

FWIW netdev CI runs with iproute2 as of 2cb1a656e99 plus Petr's 16b
weight patches, and I don't see "address not found".
Geliang Tang Aug. 8, 2024, 8:53 a.m. UTC | #3
On Wed, 2024-08-07 at 09:59 +0300, Ido Schimmel wrote:
> On Wed, Aug 07, 2024 at 12:08:15PM +0800, Geliang Tang wrote:
> > On Tue, 2024-08-06 at 10:40 +0300, Ido Schimmel wrote:
> > > On Tue, Aug 06, 2024 at 12:20:38PM +0800, Geliang Tang wrote:
> > > > From: Geliang Tang <tanggeliang@kylinos.cn>
> > > > 
> > > > So many "Address not found" messages occur at the end of
> > > > forwarding
> > > > tests
> > > > when using "ip address del" command for an invalid address:
> > > 
> > > Can you give an example of an invalid address that triggers this
> > > message?
> > > 
> > > > 
> > > > TEST: FDB limits interacting with FDB type
> > > > local                   
> > > > [ OK ]
> > > > Error: ipv4: Address not found.
> > > > 
> > > > ... ...
> > > > TEST: IGMPv3 S,G port entry automatic add to a *,G
> > > > port            
> > > > [ OK ]
> > > > Error: ipv4: Address not found.
> > > > Error: ipv6: address not found.
> > > > 
> > > > ... ...
> > > > TEST: Isolated port
> > > > flooding                                       
> > > > [ OK ]
> > > > Error: ipv4: Address not found.
> > > > Error: ipv6: address not found.
> > > > 
> > > > ... ...
> > > > TEST: Externally learned FDB entry - ageing &
> > > > roaming              
> > > > [ OK ]
> > > > Error: ipv4: Address not found.
> > > > Error: ipv6: address not found.
> > > 
> > > I'm unable to reproduce these with net-next and iproute2-next.
> > > Please
> > > debug this to understand the root cause or provide more details
> > > on
> > > how
> > > to reproduce.
> > 
> > I did get these errors with the latest net-next and iproute2-next.
> > For
> > example, I got these errors of "bridge_mdb_port_down.sh":
> > 
> > $ sudo ./bridge_mdb_port_down.sh 
> > TEST: MDB add/del entry to port with state down                  [
> > OK ]
> > Error: ipv4: Address not found.
> > Error: ipv6: address not found.
> > Error: ipv4: Address not found.
> > Error: ipv6: address not found.
> > 
> > These errors occur when using h1_destroy() and h2_destroy() to
> > delete
> > the addresses of h1 (192.0.2.1, 2001:db8:1::1) and h2 (192.0.2.2,
> > 2001:db8:1::2):
> > 
> > h1_destroy()
> > {
> >         simple_if_fini $h1 192.0.2.1/24 2001:db8:1::1/64
> > }
> > 
> > h2_destroy()
> > {
> >         simple_if_fini $h2 192.0.2.2/24 2001:db8:1::2/64
> > }
> > 
> > It seems that when invoking h1_destroy() and h2_destroy(), both h1
> > and
> > h2 no longer have IP addresses.
> 
> This is unexpected, I do see the addresses on my end. Maybe you have
> some network manager that is deleting these addresses for some
> reason?
> 
> Try tracing __inet_del_ifa() while running the tests:
> 
> # bpftrace -e 'k:__inet_del_ifa { @bla[comm] = count(); }'
> Attaching 1 probe...
> ^C
> 
> @bla[ip]: 2

@bla[NetworkManager]: 2

Yes indeed, the addresses are deleted by NetworkManager. Does this mean
that this test will be affected by the network environment in which it
is running? Is it necessary to run this test in a new network
namespace? If necessary, I can add it.

Thanks,
-Geliang

> 
> > 
> > I added "ifconfig" to show the addresses of h1 and h2 before
> > invoking
> > h1_destroy() and h2_destroy() like this:
> > 
> > '''
> > @@ -105,7 +105,9 @@ cleanup()
> >         pre_cleanup
> >  
> >         switch_destroy
> > +       ifconfig $h1
> >         h1_destroy
> > +       ifconfig $h2
> >         h2_destroy
> >  
> >         vrf_cleanup
> > '''
> > 
> > And got these messages:
> > 
> > TEST: MDB add/del entry to port with state down                 [
> > OK ]
> > veth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
> >         ether f2:ca:02:ee:05:19  txqueuelen 1000  (Ethernet)
> >         RX packets 149  bytes 17355 (17.3 KB)
> >         RX errors 0  dropped 0  overruns 0  frame 0
> >         TX packets 81  bytes 9165 (9.1 KB)
> >         TX errors 0  dropped 12 overruns 0  carrier 0  collisions 0
> > 
> > Error: ipv4: Address not found.
> > Error: ipv6: address not found.
> > veth3: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
> >         ether 92:df:97:5c:98:7e  txqueuelen 1000  (Ethernet)
> >         RX packets 67  bytes 6252 (6.2 KB)
> >         RX errors 0  dropped 0  overruns 0  frame 0
> >         TX packets 39  bytes 4997 (4.9 KB)
> >         TX errors 0  dropped 56 overruns 0  carrier 0  collisions 0
> > 
> > Error: ipv4: Address not found.
> > Error: ipv6: address not found.
> > 
> > -Geliang
> > 
> > > 
> > > > 
> > > > This patch gnores these messages and redirects them to
> > > > /dev/null in
> > > > __addr_add_del().
> > > > 
> > > > Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> > > > ---
> > > >  tools/testing/selftests/net/forwarding/lib.sh | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > 
> > > > diff --git a/tools/testing/selftests/net/forwarding/lib.sh
> > > > b/tools/testing/selftests/net/forwarding/lib.sh
> > > > index ff96bb7535ff..8670b6053cde 100644
> > > > --- a/tools/testing/selftests/net/forwarding/lib.sh
> > > > +++ b/tools/testing/selftests/net/forwarding/lib.sh
> > > > @@ -839,7 +839,7 @@ __addr_add_del()
> > > >  	array=("${@}")
> > > >  
> > > >  	for addrstr in "${array[@]}"; do
> > > > -		ip address $add_del $addrstr dev $if_name
> > > > +		ip address $add_del $addrstr dev $if_name &>
> > > > /dev/null
> > > >  	done
> > > >  }
> > > >  
> > > > -- 
> > > > 2.43.0
> > > > 
> >
Ido Schimmel Aug. 8, 2024, 2:25 p.m. UTC | #4
On Thu, Aug 08, 2024 at 04:53:51PM +0800, Geliang Tang wrote:
> Yes indeed, the addresses are deleted by NetworkManager. Does this mean
> that this test will be affected by the network environment in which it
> is running? Is it necessary to run this test in a new network
> namespace?

No. See tools/testing/selftests/net/forwarding/README for the motivation
for using VRFs instead of namespaces. Why NetworkManager is deleting
addresses it did not add from interfaces it did not create?
diff mbox series

Patch

diff --git a/tools/testing/selftests/net/forwarding/lib.sh b/tools/testing/selftests/net/forwarding/lib.sh
index ff96bb7535ff..8670b6053cde 100644
--- a/tools/testing/selftests/net/forwarding/lib.sh
+++ b/tools/testing/selftests/net/forwarding/lib.sh
@@ -839,7 +839,7 @@  __addr_add_del()
 	array=("${@}")
 
 	for addrstr in "${array[@]}"; do
-		ip address $add_del $addrstr dev $if_name
+		ip address $add_del $addrstr dev $if_name &> /dev/null
 	done
 }