From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gandalf.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id A319C5A026F for ; Mon, 11 Dec 2023 03:05:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1702260326; bh=D3EmHIQ8HHXZLSVsHWN3Zta49cPFShVu6BmIpXnJ7Jg=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=hdCr4KVHDGRJjp7lV3qPoRx/l8EmId5D4aSnziMI7V4arS04MfUebICue0u9em+43 wI0n48uI2Kjux7DNHVQfjkautHVb+5iv/pb2pJXlDFz8N8MuAG1dI5q7Loe8J1AN8G dAtSUEHl0JPzYmPgrL1l7eZMfQMANGL9dcRC6BTTkNLYnXud8xzxi0Aa4RUyFwCo2c r7se1HZwEg4MHTQZ+LouEOroGJz0y/xdYl4Yba+nUCX3srQT61CThXP+RvIZVxP3UI vA7mT1LU2jcuklO8ZsZAO/F5yQtK/XpFpu2t3DrkWE13TH8GfX5xpm1/p4PtB5QcB+ L2bpydsWo/mGw== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4SpQ7V18nNz4x2N; Mon, 11 Dec 2023 13:05:26 +1100 (AEDT) Date: Mon, 11 Dec 2023 13:05:20 +1100 From: David Gibson To: Stefano Brivio Subject: Re: [PATCH] test: Select first reported IPv6 address for guest/host comparison Message-ID: References: <20231208174932.3390897-1-sbrivio@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="SGyyoQlWNXiLvBLx" Content-Disposition: inline In-Reply-To: <20231208174932.3390897-1-sbrivio@redhat.com> Message-ID-Hash: LCOIXHOYM424P7YIZL2WIHBWVFQLUF47 X-Message-ID-Hash: LCOIXHOYM424P7YIZL2WIHBWVFQLUF47 X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top, Jon Maloy X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: --SGyyoQlWNXiLvBLx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Dec 08, 2023 at 06:49:32PM +0100, Stefano Brivio wrote: > If we run passt nested (a guest connected via passt to a guest > connected via passt to the host), the first guest (L1) typically has > two IPv6 addresses: one formed from the prefix assigned via SLAAC, > and another one assigned via DHCPv6 (to match the address on the > host). Hmm... it can't be just that there are multible IPv6 addresses here that's the problem. I usually have multiple IPv6 unicast addresses on my laptop (one for the wifi, one for wired) and I already got that working. Possibly it's that there are multiple addresses on the same interface? But see below.. > When we select addresses for comparison, in this case, we have > multiple global unicast addresses. Selecting the first reported one > on both host and guest is not entirely correct (in theory, the order > might differ), but works reasonably well. That approach seems good, in principle > Use the trick from 5beef085978e ("test: Only select a single > interface or gateway in tests") to ask jq(1) for the first address > returned by the query. But that patch was selecting gateways, not local addresses, so I don't think the same syntax makes sense. >=20 > Signed-off-by: Stefano Brivio > --- > test/passt/dhcp | 8 ++++---- > test/passt/ndp | 4 ++-- > test/pasta/dhcp | 8 ++++---- > test/pasta/ndp | 4 ++-- > test/two_guests/basic | 6 +++--- > 5 files changed, 15 insertions(+), 15 deletions(-) >=20 > diff --git a/test/passt/dhcp b/test/passt/dhcp > index 7272755..b428064 100644 > --- a/test/passt/dhcp > +++ b/test/passt/dhcp > @@ -22,8 +22,8 @@ check [ -n "__IFNAME__" ] > =20 > test DHCP: address > guest /sbin/dhclient -4 __IFNAME__ > -gout ADDR ip -j -4 addr show|jq -rM '.[] | select(.ifname =3D=3D "__IFNA= ME__").addr_info[0].local' > -hout HOST_ADDR ip -j -4 addr show|jq -rM '.[] | select(.ifname =3D=3D "_= _HOST_IFNAME__").addr_info[0].local' > +gout ADDR ip -j -4 addr show|jq -rM '[.[] | select(.ifname =3D=3D "__IFN= AME__").addr_info[0].local] | .[0]' > +hout HOST_ADDR ip -j -4 addr show|jq -rM '[.[] | select(.ifname =3D=3D "= __HOST_IFNAME__").addr_info[0].local] | .[0]' I'm confused by this. The 'addr_info[0]' should already be selecting the first address from each interface, so the outer '.[0]' would only be doing something if multiple interfaces are selected, and I'm not quite sure why that would happen. In fact, I suspect this one was right all along...=20 > check [ "__ADDR__" =3D "__HOST_ADDR__" ] > =20 > test DHCP: route > @@ -49,8 +49,8 @@ check [ "__SEARCH__" =3D "__HOST_SEARCH__" ] > =20 > test DHCPv6: address > guest /sbin/dhclient -6 __IFNAME__ > -gout ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "__IFN= AME__").addr_info[] | select(.prefixlen =3D=3D 128).local' > -hout HOST_ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "= __HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local' > +gout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D "__IF= NAME__").addr_info[] | select(.prefixlen =3D=3D 128).local] | .[0]' > +hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D > "__HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local] > | .[0]' =2E.. but this one isn't, because it is .addr_info[]. Previously the second 'select' has picked out only one, but not in this situation. So here the change makes sense to me. > check [ "__ADDR6__" =3D "__HOST_ADDR6__" ] > =20 > test DHCPv6: route > diff --git a/test/passt/ndp b/test/passt/ndp > index 6de4081..7b2dbfe 100644 > --- a/test/passt/ndp > +++ b/test/passt/ndp > @@ -21,9 +21,9 @@ hout HOST_IFNAME6 ip -j -6 route show|jq -rM '[.[] | se= lect(.dst =3D=3D "default").d > check [ -n "__IFNAME__" ] > =20 > test SLAAC: prefix > -gout ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "__IFN= AME__").addr_info[] | select(.scope =3D=3D "global" and .prefixlen =3D=3D 6= 4).local' > +gout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D "__IF= NAME__").addr_info[] | select(.scope =3D=3D "global" and .prefixlen =3D=3D = 64).local] | .[0]' > gout PREFIX6 sipcalc __ADDR6__/64 | grep prefix | cut -d' ' -f4 > -hout HOST_ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "= __HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local' > +hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D = "__HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local] | .= [0]' > hout HOST_PREFIX6 sipcalc __HOST_ADDR6__/64 | grep prefix | cut -d' ' -f4 > check [ "__PREFIX6__" =3D "__HOST_PREFIX6__" ] > =20 > diff --git a/test/pasta/dhcp b/test/pasta/dhcp > index 309001b..b4f6f60 100644 > --- a/test/pasta/dhcp > +++ b/test/pasta/dhcp > @@ -20,8 +20,8 @@ check [ -n "__IFNAME__" ] > =20 > test DHCP: address > ns /sbin/dhclient -4 --no-pid __IFNAME__ > -nsout ADDR ip -j -4 addr show|jq -rM '.[] | select(.ifname =3D=3D "__IFN= AME__").addr_info[0].local' > -hout HOST_ADDR ip -j -4 addr show|jq -rM '.[] | select(.ifname =3D=3D "_= _IFNAME__").addr_info[0].local' > +nsout ADDR ip -j -4 addr show|jq -rM '[.[] | select(.ifname =3D=3D "__IF= NAME__").addr_info[0].local] | .[0]' > +hout HOST_ADDR ip -j -4 addr show|jq -rM '[.[] | select(.ifname =3D=3D "= __IFNAME__").addr_info[0].local] | .[0]' > check [ __ADDR__ =3D __HOST_ADDR__ ] > =20 > test DHCP: route > @@ -36,8 +36,8 @@ check [ __MTU__ =3D 65520 ] > test DHCPv6: address > ns /sbin/dhclient -6 --no-pid __IFNAME__ > hout HOST_IFNAME6 ip -j -6 route show|jq -rM '[.[] | select(.dst =3D=3D = "default").dev] | .[0]' > -nsout ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "__IF= NAME__").addr_info[] | select(.prefixlen =3D=3D 128).local' > -hout HOST_ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "= __HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local' > +nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D "__I= FNAME__").addr_info[] | select(.prefixlen =3D=3D 128).local] | .[0]' > +hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D = "__HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local] | .= [0]' > check [ __ADDR6__ =3D __HOST_ADDR6__ ] > =20 > test DHCPv6: route > diff --git a/test/pasta/ndp b/test/pasta/ndp > index bb33110..2a8afe6 100644 > --- a/test/pasta/ndp > +++ b/test/pasta/ndp > @@ -21,9 +21,9 @@ ns ip link set dev __IFNAME__ up > sleep 2 > =20 > test SLAAC: prefix > -nsout ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "__IF= NAME__").addr_info[] | select(.scope =3D=3D "global" and .prefixlen =3D=3D = 64).local' > +nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D "__I= FNAME__").addr_info[] | select(.scope =3D=3D "global" and .prefixlen =3D=3D= 64).local] | .[0]' > nsout PREFIX6 sipcalc __ADDR6__/64 | grep prefix | cut -d' ' -f4 > -hout HOST_ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "= __IFNAME__").addr_info[] | select(.scope =3D=3D "global").local' > +hout HOST_ADDR6 ip -j -6 addr show|jq -rM ['.[] | select(.ifname =3D=3D = "__IFNAME__").addr_info[] | select(.scope =3D=3D "global").local] | .[0]' > hout HOST_PREFIX6 sipcalc __HOST_ADDR6__/64 | grep prefix | cut -d' ' -f4 > check [ "__PREFIX6__" =3D "__HOST_PREFIX6__" ] > =20 > diff --git a/test/two_guests/basic b/test/two_guests/basic > index 09fbd3e..fa0608b 100644 > --- a/test/two_guests/basic > +++ b/test/two_guests/basic > @@ -39,9 +39,9 @@ test DHCPv6: addresses > sleep 2 > guest1 /sbin/dhclient -6 __IFNAME1__ > guest2 /sbin/dhclient -6 __IFNAME2__ > -g1out ADDR1_6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "__= IFNAME1__").addr_info[] | select(.prefixlen =3D=3D 128).local' > -g2out ADDR2_6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "__= IFNAME2__").addr_info[] | select(.prefixlen =3D=3D 128).local' > -hout HOST_ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname =3D=3D "= __HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local' > +g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D "_= _IFNAME1__").addr_info[] | select(.prefixlen =3D=3D 128).local] | .[0]' > +g2out ADDR2_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D "_= _IFNAME2__").addr_info[] | select(.prefixlen =3D=3D 128).local] | .[0]' > +hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname =3D=3D = "__HOST_IFNAME6__").addr_info[] | select(.scope =3D=3D "global").local] | .= [0]' > check [ "__ADDR1_6__" =3D "__HOST_ADDR6__" ] > check [ "__ADDR2_6__" =3D "__HOST_ADDR6__" ] > =20 --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --SGyyoQlWNXiLvBLx Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEO+dNsU4E3yXUXRK2zQJF27ox2GcFAmV2blwACgkQzQJF27ox 2Gf2fg//dC4jw7/iJK6mihp9w5O1fKQczdsZ2gwskcm8s6Mats/FufBCjj/7VjLb ScJpNdsv69sqNRbiwoRUlnPxpM92yNdhJqxDcwhO1KPV+QCDnxOle6EOepjmlgEA TCIXcjV1C5OpbnU3kpucpiUVvPtjQZNOE2LWqy+t7NTsZda3RWgVb5Ed7mphgdKz VWzUqLWItL73W2/JHmtd6LmpoiHDpNimDDDSlKJkgbNMVcRhomZfoSfCvL3idwxB WX8A/MG6Cos+cqdWkGhW0mbfwaQ7emE3rYIv47c7vIq3tYjQO6LLFv1bkCwEhfF7 XeXm0dxTfoLpOJIcnz2L7yFknagFCY5MQ+ggUwzGqpxRzBk0wrUzFGR48BN4V0Bc /UGkDXaNaWdeTLGdg7QlYl14/AqGYhPtZkoULQeyn7rOqt0p5dIdcH/ulbLa5Swu 9Ot+zXMNWAICzaZVDrUJX2S6ihi275NQm5kT7lauK8jq/VuhoeNgmoNTW9bCbJlg m2N09C5qWtMPlD01l2Q15iGLdieXaLW6uB7sWOZ+HwuyURK7U3FYflSPAJ4aW2dU xGPGkKHOdkzci724xwFBZfXi3GU6s6uo436i7CgsOJa6YqbwQ1VxIm7jdLiQmA83 xFm+CwWW2FlZx/DHMJh5PTw6QvplLyNFlHPOU9ea6rFIEAuc0WI= =lYz/ -----END PGP SIGNATURE----- --SGyyoQlWNXiLvBLx--