* [PATCH] netlink: Don't require address to be global, just not link local
@ 2025-09-30 5:49 David Gibson
2025-09-30 11:14 ` Stefano Brivio
0 siblings, 1 reply; 3+ messages in thread
From: David Gibson @ 2025-09-30 5:49 UTC (permalink / raw)
To: passt-dev, Stefano Brivio; +Cc: David Gibson, Xun Gu
nl_addr_get() will only pick up global IPv6 addresses (RT_SCOPE_UNIVERSE).
This is because link-local addresses aren't suitable. However site-local
addresses (in the rare occassions they're used) would be fine for our
purposes. In fact, anything wider than link scope is fine, so update the
check to reflect that.
Change the logic in the test scripts to match as well.
Reported-by: Xun Gu <xugu@redhat.com>
Link: https://bugs.passt.top/show_bug.cgi?id=122
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
netlink.c | 2 +-
test/demo/podman | 4 ++--
test/migrate/basic | 2 +-
test/migrate/basic_fin | 2 +-
test/migrate/iperf3_bidir6 | 2 +-
test/migrate/iperf3_in6 | 2 +-
test/migrate/iperf3_many_out6 | 2 +-
test/migrate/iperf3_out6 | 2 +-
test/migrate/rampstream_in | 2 +-
test/migrate/rampstream_out | 2 +-
test/passt/dhcp | 2 +-
test/passt/ndp | 2 +-
test/passt_in_ns/dhcp | 2 +-
test/pasta/dhcp | 2 +-
test/pasta/ndp | 2 +-
test/perf/pasta_tcp | 2 +-
test/perf/pasta_udp | 2 +-
test/two_guests/basic | 2 +-
18 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/netlink.c b/netlink.c
index c4367807..9fe70f2c 100644
--- a/netlink.c
+++ b/netlink.c
@@ -786,7 +786,7 @@ int nl_addr_get(int s, unsigned int ifi, sa_family_t af,
prefix_max = *prefix_len = ifa->ifa_prefixlen;
} else if (af == AF_INET6 && addr &&
- ifa->ifa_scope == RT_SCOPE_UNIVERSE &&
+ ifa->ifa_scope < RT_SCOPE_LINK &&
ifa->ifa_prefixlen > prefix_max) {
memcpy(addr, RTA_DATA(rta), RTA_PAYLOAD(rta));
diff --git a/test/demo/podman b/test/demo/podman
index edd403a1..393691ca 100644
--- a/test/demo/podman
+++ b/test/demo/podman
@@ -310,8 +310,8 @@ nl
say Everything is set now, let's start
sleep 2
hout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-hout ADDR4 ip -j -4 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global").local'
-hout ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global").local'
+hout ADDR4 ip -j -4 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope != "host" and .scope != "link").local'
+hout ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope != "host" and .scope != "link").local'
hout GW4 ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
hout GW6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway'
diff --git a/test/migrate/basic b/test/migrate/basic
index 3f11f7d8..c22fee80 100644
--- a/test/migrate/basic
+++ b/test/migrate/basic
@@ -39,7 +39,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv4: guest1/guest2 > host
diff --git a/test/migrate/basic_fin b/test/migrate/basic_fin
index aa61ec5a..c35c2690 100644
--- a/test/migrate/basic_fin
+++ b/test/migrate/basic_fin
@@ -39,7 +39,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv4: guest1, half-close, guest2 > host
diff --git a/test/migrate/iperf3_bidir6 b/test/migrate/iperf3_bidir6
index 4bfefb58..60b2a9b2 100644
--- a/test/migrate/iperf3_bidir6
+++ b/test/migrate/iperf3_bidir6
@@ -44,7 +44,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv6 host <-> guest flood, many flows, during migration
diff --git a/test/migrate/iperf3_in6 b/test/migrate/iperf3_in6
index 16cf504f..9b7f2c60 100644
--- a/test/migrate/iperf3_in6
+++ b/test/migrate/iperf3_in6
@@ -44,7 +44,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv6 host to guest throughput during migration
diff --git a/test/migrate/iperf3_many_out6 b/test/migrate/iperf3_many_out6
index 88133f26..9b3095f6 100644
--- a/test/migrate/iperf3_many_out6
+++ b/test/migrate/iperf3_many_out6
@@ -44,7 +44,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv6 guest to host flood, many flows, during migration
diff --git a/test/migrate/iperf3_out6 b/test/migrate/iperf3_out6
index 21fbfcd6..b94a70c2 100644
--- a/test/migrate/iperf3_out6
+++ b/test/migrate/iperf3_out6
@@ -44,7 +44,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv6 guest to host throughput during migration
diff --git a/test/migrate/rampstream_in b/test/migrate/rampstream_in
index df333ba5..3c7fd200 100644
--- a/test/migrate/rampstream_in
+++ b/test/migrate/rampstream_in
@@ -40,7 +40,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv4: sequence check, ramps, inbound
diff --git a/test/migrate/rampstream_out b/test/migrate/rampstream_out
index 8ed3229b..8cff6d9c 100644
--- a/test/migrate/rampstream_out
+++ b/test/migrate/rampstream_out
@@ -40,7 +40,7 @@ guest1 /sbin/dhclient -6 __IFNAME1__
# Wait for DAD to complete on the DHCP address
guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
test TCP/IPv4: sequence check, ramps, outbound
diff --git a/test/passt/dhcp b/test/passt/dhcp
index 145f1baa..dc6b880f 100644
--- a/test/passt/dhcp
+++ b/test/passt/dhcp
@@ -61,7 +61,7 @@ guest /sbin/dhclient -6 __IFNAME__
# Wait for DAD to complete
guest while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
gout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR6__" = "__HOST_ADDR6__" ]
test DHCPv6: route
diff --git a/test/passt/ndp b/test/passt/ndp
index 516cd6b8..df77cdcc 100644
--- a/test/passt/ndp
+++ b/test/passt/ndp
@@ -25,7 +25,7 @@ check [ -n "__IFNAME__" ]
test SLAAC: prefix
gout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.protocol == "kernel_ra") | .local + "/" + (.prefixlen | tostring)] | .[0]'
gout PREFIX6 sipcalc __ADDR6__ | grep prefix | cut -d' ' -f4
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
hout HOST_PREFIX6 sipcalc __HOST_ADDR6__/64 | grep prefix | cut -d' ' -f4
check [ "__PREFIX6__" = "__HOST_PREFIX6__" ]
diff --git a/test/passt_in_ns/dhcp b/test/passt_in_ns/dhcp
index a38a6908..0ccb4800 100644
--- a/test/passt_in_ns/dhcp
+++ b/test/passt_in_ns/dhcp
@@ -55,7 +55,7 @@ guest /sbin/dhclient -6 __IFNAME__
# Wait for DAD to complete
guest while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
gout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR6__" = "__HOST_ADDR6__" ]
test DHCPv6: route
diff --git a/test/pasta/dhcp b/test/pasta/dhcp
index d4f3ad58..e1c66be6 100644
--- a/test/pasta/dhcp
+++ b/test/pasta/dhcp
@@ -39,7 +39,7 @@ ns /sbin/dhclient -6 --no-pid __IFNAME__
ns while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
hout HOST_IFNAME6 ip -j -6 route show|jq -rM '[.[] | select(.dst == "default").dev] | .[0]'
nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ __ADDR6__ = __HOST_ADDR6__ ]
test DHCPv6: route
diff --git a/test/pasta/ndp b/test/pasta/ndp
index 952c1eab..e4828765 100644
--- a/test/pasta/ndp
+++ b/test/pasta/ndp
@@ -24,7 +24,7 @@ ns while ! ip -j -6 addr show dev __IFNAME__ | jq -e '.[].addr_info.[] | select(
test SLAAC: prefix
nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.protocol == "kernel_ra") | .local + "/" + (.prefixlen | tostring)] | .[0]'
nsout PREFIX6 sipcalc __ADDR6__ | grep prefix | cut -d' ' -f4
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM ['.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM ['.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
hout HOST_PREFIX6 sipcalc __HOST_ADDR6__/64 | grep prefix | cut -d' ' -f4
check [ "__PREFIX6__" = "__HOST_PREFIX6__" ]
diff --git a/test/perf/pasta_tcp b/test/perf/pasta_tcp
index bc0de3c4..496d0fec 100644
--- a/test/perf/pasta_tcp
+++ b/test/perf/pasta_tcp
@@ -211,7 +211,7 @@ tr TCP throughput over IPv6: host to ns
iperf3s ns 10002
nsout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global").local] | .[0]'
+nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope != "host" and .scope != "link").local] | .[0]'
bw -
bw -
bw -
diff --git a/test/perf/pasta_udp b/test/perf/pasta_udp
index ab2f3e89..3a7054c9 100644
--- a/test/perf/pasta_udp
+++ b/test/perf/pasta_udp
@@ -196,7 +196,7 @@ tr UDP throughput over IPv6: host to ns
iperf3s ns 10002
nsout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope == "global").local] | .[0]'
+nsout ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME__").addr_info[] | select(.scope != "host" and .scope != "link").local] | .[0]'
iperf3 BW host __ADDR6__ 10002 __TIME__ __OPTS__ -b 8G -l 1472
bw __BW__ 0.3 0.5
iperf3 BW host __ADDR6__ 10002 __TIME__ __OPTS__ -b 12G -l 3972
diff --git a/test/two_guests/basic b/test/two_guests/basic
index e2338ffd..a9625f3e 100644
--- a/test/two_guests/basic
+++ b/test/two_guests/basic
@@ -45,7 +45,7 @@ guest1 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1;
guest2 while ip -j -6 addr show tentative | jq -e '.[].addr_info'; do sleep 0.1; done
g1out ADDR1_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME1__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
g2out ADDR2_6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__IFNAME2__").addr_info[] | select(.prefixlen == 128).local] | .[0]'
-hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope == "global" and .deprecated != true).local] | .[0]'
+hout HOST_ADDR6 ip -j -6 addr show|jq -rM '[.[] | select(.ifname == "__HOST_IFNAME6__").addr_info[] | select(.scope != "host" and .scope != "link" and .deprecated != true).local] | .[0]'
check [ "__ADDR1_6__" = "__HOST_ADDR6__" ]
check [ "__ADDR2_6__" = "__HOST_ADDR6__" ]
--
2.51.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] netlink: Don't require address to be global, just not link local
2025-09-30 5:49 [PATCH] netlink: Don't require address to be global, just not link local David Gibson
@ 2025-09-30 11:14 ` Stefano Brivio
2025-10-01 0:26 ` David Gibson
0 siblings, 1 reply; 3+ messages in thread
From: Stefano Brivio @ 2025-09-30 11:14 UTC (permalink / raw)
To: David Gibson; +Cc: passt-dev, Xun Gu
On Tue, 30 Sep 2025 15:49:11 +1000
David Gibson <david@gibson.dropbear.id.au> wrote:
> nl_addr_get() will only pick up global IPv6 addresses (RT_SCOPE_UNIVERSE).
> This is because link-local addresses aren't suitable. However site-local
> addresses (in the rare occassions they're used) would be fine for our
> purposes. In fact, anything wider than link scope is fine, so update the
> check to reflect that.
>
> Change the logic in the test scripts to match as well.
>
> Reported-by: Xun Gu <xugu@redhat.com>
> Link: https://bugs.passt.top/show_bug.cgi?id=122
>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> netlink.c | 2 +-
> test/demo/podman | 4 ++--
> test/migrate/basic | 2 +-
> test/migrate/basic_fin | 2 +-
> test/migrate/iperf3_bidir6 | 2 +-
> test/migrate/iperf3_in6 | 2 +-
> test/migrate/iperf3_many_out6 | 2 +-
> test/migrate/iperf3_out6 | 2 +-
> test/migrate/rampstream_in | 2 +-
> test/migrate/rampstream_out | 2 +-
> test/passt/dhcp | 2 +-
> test/passt/ndp | 2 +-
> test/passt_in_ns/dhcp | 2 +-
> test/pasta/dhcp | 2 +-
> test/pasta/ndp | 2 +-
> test/perf/pasta_tcp | 2 +-
> test/perf/pasta_udp | 2 +-
> test/two_guests/basic | 2 +-
> 18 files changed, 19 insertions(+), 19 deletions(-)
>
> diff --git a/netlink.c b/netlink.c
> index c4367807..9fe70f2c 100644
> --- a/netlink.c
> +++ b/netlink.c
> @@ -786,7 +786,7 @@ int nl_addr_get(int s, unsigned int ifi, sa_family_t af,
>
> prefix_max = *prefix_len = ifa->ifa_prefixlen;
> } else if (af == AF_INET6 && addr &&
> - ifa->ifa_scope == RT_SCOPE_UNIVERSE &&
> + ifa->ifa_scope < RT_SCOPE_LINK &&
Oh, I had no idea RT_SCOPE_SITE even existed.
Applied.
--
Stefano
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] netlink: Don't require address to be global, just not link local
2025-09-30 11:14 ` Stefano Brivio
@ 2025-10-01 0:26 ` David Gibson
0 siblings, 0 replies; 3+ messages in thread
From: David Gibson @ 2025-10-01 0:26 UTC (permalink / raw)
To: Stefano Brivio; +Cc: passt-dev, Xun Gu
[-- Attachment #1: Type: text/plain, Size: 2456 bytes --]
On Tue, Sep 30, 2025 at 01:14:02PM +0200, Stefano Brivio wrote:
> On Tue, 30 Sep 2025 15:49:11 +1000
> David Gibson <david@gibson.dropbear.id.au> wrote:
>
> > nl_addr_get() will only pick up global IPv6 addresses (RT_SCOPE_UNIVERSE).
> > This is because link-local addresses aren't suitable. However site-local
> > addresses (in the rare occassions they're used) would be fine for our
> > purposes. In fact, anything wider than link scope is fine, so update the
> > check to reflect that.
> >
> > Change the logic in the test scripts to match as well.
> >
> > Reported-by: Xun Gu <xugu@redhat.com>
> > Link: https://bugs.passt.top/show_bug.cgi?id=122
> >
> > Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> > ---
> > netlink.c | 2 +-
> > test/demo/podman | 4 ++--
> > test/migrate/basic | 2 +-
> > test/migrate/basic_fin | 2 +-
> > test/migrate/iperf3_bidir6 | 2 +-
> > test/migrate/iperf3_in6 | 2 +-
> > test/migrate/iperf3_many_out6 | 2 +-
> > test/migrate/iperf3_out6 | 2 +-
> > test/migrate/rampstream_in | 2 +-
> > test/migrate/rampstream_out | 2 +-
> > test/passt/dhcp | 2 +-
> > test/passt/ndp | 2 +-
> > test/passt_in_ns/dhcp | 2 +-
> > test/pasta/dhcp | 2 +-
> > test/pasta/ndp | 2 +-
> > test/perf/pasta_tcp | 2 +-
> > test/perf/pasta_udp | 2 +-
> > test/two_guests/basic | 2 +-
> > 18 files changed, 19 insertions(+), 19 deletions(-)
> >
> > diff --git a/netlink.c b/netlink.c
> > index c4367807..9fe70f2c 100644
> > --- a/netlink.c
> > +++ b/netlink.c
> > @@ -786,7 +786,7 @@ int nl_addr_get(int s, unsigned int ifi, sa_family_t af,
> >
> > prefix_max = *prefix_len = ifa->ifa_prefixlen;
> > } else if (af == AF_INET6 && addr &&
> > - ifa->ifa_scope == RT_SCOPE_UNIVERSE &&
> > + ifa->ifa_scope < RT_SCOPE_LINK &&
>
> Oh, I had no idea RT_SCOPE_SITE even existed.
Yeah, site-local addresses seem to be one of those things that was
written into an RFC, but then everyone decided was a bad idea and
didn't use. Strangely enough Xun Gu's test machine has one, though.
--
David Gibson (he or they) | 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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-10-01 0:28 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-30 5:49 [PATCH] netlink: Don't require address to be global, just not link local David Gibson
2025-09-30 11:14 ` Stefano Brivio
2025-10-01 0:26 ` David Gibson
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
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 IMAP folder(s).