* [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule.
@ 2025-01-03 5:43 Shiming Cheng
2025-01-03 10:27 ` Shiming Cheng (成诗明)
2025-01-04 2:14 ` Jakub Kicinski
0 siblings, 2 replies; 6+ messages in thread
From: Shiming Cheng @ 2025-01-03 5:43 UTC (permalink / raw)
To: willemdebruijn.kernel, davem, dsahern, edumazet, kuba, pabeni,
horms, matthias.bgg, angelogioacchino.delregno, linux-kernel,
linux-arm-kernel, linux-mediatek
Cc: netdev, lena.wang, Shiming Cheng
When using socket IPv6 with SO_BINDTODEVICE, if IPv6 rule is not
matched, it will return ENETUNREACH. In fact, IPv4 does not behave
this way. IPv4 prioritizes looking up IP rules for routing and
forwarding, if not matched it will use socket-bound out interface
to send packets. The modification here is to make IPv6 behave the
same as IPv4. If IP rule is not found, it will also use socket-bound
out interface to send packts.
Fixes: 6f21c96a78b8 ("ipv6: enforce flowi6_oif usage in ip6_dst_lookup_tail()")
Signed-off-by: Shiming Cheng <shiming.cheng@mediatek.com>
---
include/net/ip6_route.h | 2 ++
net/ipv6/ip6_output.c | 7 ++++++-
net/ipv6/route.c | 34 ++++++++++++++++++++++++++++++++++
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index 6dbdf60b342f..0625597def6f 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -214,6 +214,8 @@ void rt6_multipath_rebalance(struct fib6_info *f6i);
void rt6_uncached_list_add(struct rt6_info *rt);
void rt6_uncached_list_del(struct rt6_info *rt);
+struct rt6_info *ip6_create_rt_oif_rcu(struct net *net, const struct sock *sk,
+ struct flowi6 *fl6, int flags);
static inline const struct rt6_info *skb_rt6_info(const struct sk_buff *skb)
{
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index f7b4608bb316..95728c8921cb 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1156,8 +1156,13 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk,
*dst = ip6_route_output_flags(net, sk, fl6, flags);
err = (*dst)->error;
- if (err)
+ if (err && (flags & RT6_LOOKUP_F_IFACE)) {
+ *dst = (struct dst_entry *)ip6_create_rt_oif_rcu(net, sk, fl6, flags);
+ if (!*dst)
+ goto out_err_release;
+ } else if (err) {
goto out_err_release;
+ }
#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
/*
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 67ff16c04718..7d7450fab44f 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1214,6 +1214,40 @@ static struct rt6_info *ip6_create_rt_rcu(const struct fib6_result *res)
return nrt;
}
+struct rt6_info *ip6_create_rt_oif_rcu(struct net *net, const struct sock *sk,
+ struct flowi6 *fl6, int flags)
+{
+ struct rt6_info *rt;
+ unsigned int prefs;
+ int err;
+ struct net_device *dev = dev_get_by_index_rcu(net, fl6->flowi6_oif);
+
+ if (!dev)
+ return NULL;
+ rt = ip6_dst_alloc(dev_net(dev), dev, flags);
+
+ if (!rt)
+ return NULL;
+ rt->dst.error = 0;
+ rt->dst.output = ip6_output;
+ rt->dst.lastuse = jiffies;
+ prefs = sk ? inet6_sk(sk)->srcprefs : 0;
+ err = ipv6_dev_get_saddr(net, dev, &fl6->daddr, prefs, &fl6->saddr);
+
+ if (err) {
+ dst_release(&rt->dst);
+ return NULL;
+ }
+ rt->rt6i_dst.addr = fl6->daddr;
+ rt->rt6i_dst.plen = 128;
+ rt->rt6i_src.addr = fl6->saddr;
+ rt->rt6i_dst.plen = 128;
+ rt->rt6i_idev = in6_dev_get(dev);
+ rt->rt6i_flags = flags;
+ return rt;
+}
+EXPORT_SYMBOL_GPL(ip6_create_rt_oif_rcu);
+
INDIRECT_CALLABLE_SCOPE struct rt6_info *ip6_pol_route_lookup(struct net *net,
struct fib6_table *table,
struct flowi6 *fl6,
--
2.45.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule. 2025-01-03 5:43 [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule Shiming Cheng @ 2025-01-03 10:27 ` Shiming Cheng (成诗明) 2025-01-03 15:31 ` David Ahern 2025-01-04 2:14 ` Jakub Kicinski 1 sibling, 1 reply; 6+ messages in thread From: Shiming Cheng (成诗明) @ 2025-01-03 10:27 UTC (permalink / raw) To: linux-kernel@vger.kernel.org, dsahern@kernel.org, linux-mediatek@lists.infradead.org, horms@kernel.org, kuba@kernel.org, edumazet@google.com, pabeni@redhat.com, willemdebruijn.kernel@gmail.com, linux-arm-kernel@lists.infradead.org, matthias.bgg@gmail.com, davem@davemloft.net, AngeloGioacchino Del Regno Cc: netdev@vger.kernel.org, Lena Wang (王娜) Hi David Test cases will be provided later, below are the corresponding IP rule configurations for IPv4 and IPv6 that i provided, as well as the differences in ping results, the IPv4 result passed, but the IPv6 result failed, after adding this patch, the IPv6 result passed. Thanks bind out interface ccmni2 address: ccmni2 Link encap:UNSPEC inet addr:10.233.33.169 Mask:255.0.0.0 inet6 addr: fe80::1817:1da4:19a1:dc42/64 Scope: Link inet6 addr: 2409:8900:26f3:2541:1817:1da4:19a1:dc42/64 Scope: 1.There is no ip rule for ccmni2 and also pass. k6991v1_64:/ # ip rule list 0: from all lookup local 10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system 11000: from all iif lo oif dummy0 uidrange 0-0 lookup dummy0 11000: from all iif lo oif ccmni1 uidrange 0-0 lookup ccmni1 16000: from all fwmark 0x10063/0x1ffff iif lo lookup local_network 16000: from all fwmark 0xd0071/0xdffff iif lo lookup ccmni1 17000: from all iif lo oif dummy0 lookup dummy0 17000: from all fwmark 0xc0000/0xc0000 iif lo oif ccmni1 lookup ccmni1 18000: from all fwmark 0x0/0x10000 lookup legacy_system 19000: from all fwmark 0x0/0x10000 lookup legacy_network 20000: from all fwmark 0x0/0x10000 lookup local_network 32000: from all unreachable k6991v1_64:/ # k6991v1_64:/ # k6991v1_64:/ # k6991v1_64:/ # ping -I ccmni2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) from 10.233.33.169 ccmni2: 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=179 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=74.3 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=72.7 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=50 time=67.1 ms 64 bytes from 8.8.8.8: icmp_seq=5 ttl=50 time=63.3 ms 64 bytes from 8.8.8.8: icmp_seq=6 ttl=50 time=90.8 ms ^C --- 8.8.8.8 ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5017ms rtt min/avg/max/mdev = 63.323/91.253/179.082/40.213 ms 2.There is no ipv6 rule for ccmni2 and fail. k6991v1_64:/ # ip -6 rule list 0: from all lookup local 10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system 11000: from all iif lo oif dummy0 uidrange 0-0 lookup dummy0 11000: from all iif lo oif ccmni1 uidrange 0-0 lookup ccmni1 16000: from all fwmark 0x10063/0x1ffff iif lo lookup local_network 16000: from all fwmark 0xd0071/0xdffff iif lo lookup ccmni1 17000: from all iif lo oif dummy0 lookup dummy0 17000: from all fwmark 0xc0000/0xc0000 iif lo oif ccmni1 lookup ccmni1 18000: from all fwmark 0x0/0x10000 lookup legacy_system 19000: from all fwmark 0x0/0x10000 lookup legacy_network 20000: from all fwmark 0x0/0x10000 lookup local_network 32000: from all unreachable k6991v1_64:/ # ping6 -I ccmni2 2001:4860:4860::8888 connect: Network is unreachable 3.After merging the submitted patch. There is no ipv6 rule for ccmni2 and pass. ccmni2 Link encap:UNSPEC inet addr:10.185.46.236 Mask:255.0.0.0 inet6 addr: 2409:8900:24d9:404e:1817:25c4:e1c7:4e52/64 Scope: k6897v1_64:/ # ip -6 rule list 0: from all lookup local 10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system 11000: from all iif lo oif dummy0 uidrange 0-0 lookup dummy0 11000: from all iif lo oif ccmni1 uidrange 0-0 lookup ccmni1 16000: from all fwmark 0x10063/0x1ffff iif lo lookup local_network 16000: from all fwmark 0xd0070/0xdffff iif lo lookup ccmni1 17000: from all iif lo oif dummy0 lookup dummy0 17000: from all fwmark 0xc0000/0xc0000 iif lo oif ccmni1 lookup ccmni1 18000: from all fwmark 0x0/0x10000 lookup legacy_system 19000: from all fwmark 0x0/0x10000 lookup legacy_network 20000: from all fwmark 0x0/0x10000 lookup local_network 32000: from all unreachable k6897v1_64:/ # ping6 -I ccmni2 2001:4860:4860::8888 PING 2001:4860:4860::8888(2001:4860:4860::8888) from 2409:8900:24d9:404e:1817:25c4:e1c7:4e52 ccmni2: 56 data bytes 64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=51 time=167 ms 64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=51 time=73.9 ms 64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=51 time=101 ms 64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=51 time=62.3 ms ^C --- 2001:4860:4860::8888 ping statistics --- 5 packets transmitted, 4 received, 20% packet loss, time 4011ms On Fri, 2025-01-03 at 13:43 +0800, Shiming Cheng wrote: > When using socket IPv6 with SO_BINDTODEVICE, if IPv6 rule is not > matched, it will return ENETUNREACH. In fact, IPv4 does not behave > this way. IPv4 prioritizes looking up IP rules for routing and > forwarding, if not matched it will use socket-bound out interface > to send packets. The modification here is to make IPv6 behave the > same as IPv4. If IP rule is not found, it will also use socket-bound > out interface to send packts. > > Fixes: 6f21c96a78b8 ("ipv6: enforce flowi6_oif usage in > ip6_dst_lookup_tail()") > Signed-off-by: Shiming Cheng <shiming.cheng@mediatek.com> > --- > include/net/ip6_route.h | 2 ++ > net/ipv6/ip6_output.c | 7 ++++++- > net/ipv6/route.c | 34 ++++++++++++++++++++++++++++++++++ > 3 files changed, 42 insertions(+), 1 deletion(-) > > diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h > index 6dbdf60b342f..0625597def6f 100644 > --- a/include/net/ip6_route.h > +++ b/include/net/ip6_route.h > @@ -214,6 +214,8 @@ void rt6_multipath_rebalance(struct fib6_info > *f6i); > > void rt6_uncached_list_add(struct rt6_info *rt); > void rt6_uncached_list_del(struct rt6_info *rt); > +struct rt6_info *ip6_create_rt_oif_rcu(struct net *net, const struct > sock *sk, > + struct flowi6 *fl6, int flags); > > static inline const struct rt6_info *skb_rt6_info(const struct > sk_buff *skb) > { > diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c > index f7b4608bb316..95728c8921cb 100644 > --- a/net/ipv6/ip6_output.c > +++ b/net/ipv6/ip6_output.c > @@ -1156,8 +1156,13 @@ static int ip6_dst_lookup_tail(struct net > *net, const struct sock *sk, > *dst = ip6_route_output_flags(net, sk, fl6, flags); > > err = (*dst)->error; > - if (err) > + if (err && (flags & RT6_LOOKUP_F_IFACE)) { > + *dst = (struct dst_entry *)ip6_create_rt_oif_rcu(net, > sk, fl6, flags); > + if (!*dst) > + goto out_err_release; > + } else if (err) { > goto out_err_release; > + } > > #ifdef CONFIG_IPV6_OPTIMISTIC_DAD > /* > diff --git a/net/ipv6/route.c b/net/ipv6/route.c > index 67ff16c04718..7d7450fab44f 100644 > --- a/net/ipv6/route.c > +++ b/net/ipv6/route.c > @@ -1214,6 +1214,40 @@ static struct rt6_info > *ip6_create_rt_rcu(const struct fib6_result *res) > return nrt; > } > > +struct rt6_info *ip6_create_rt_oif_rcu(struct net *net, const struct > sock *sk, > + struct flowi6 *fl6, int flags) > +{ > + struct rt6_info *rt; > + unsigned int prefs; > + int err; > + struct net_device *dev = dev_get_by_index_rcu(net, fl6- > >flowi6_oif); > + > + if (!dev) > + return NULL; > + rt = ip6_dst_alloc(dev_net(dev), dev, flags); > + > + if (!rt) > + return NULL; > + rt->dst.error = 0; > + rt->dst.output = ip6_output; > + rt->dst.lastuse = jiffies; > + prefs = sk ? inet6_sk(sk)->srcprefs : 0; > + err = ipv6_dev_get_saddr(net, dev, &fl6->daddr, prefs, &fl6- > >saddr); > + > + if (err) { > + dst_release(&rt->dst); > + return NULL; > + } > + rt->rt6i_dst.addr = fl6->daddr; > + rt->rt6i_dst.plen = 128; > + rt->rt6i_src.addr = fl6->saddr; > + rt->rt6i_dst.plen = 128; > + rt->rt6i_idev = in6_dev_get(dev); > + rt->rt6i_flags = flags; > + return rt; > +} > +EXPORT_SYMBOL_GPL(ip6_create_rt_oif_rcu); > + > INDIRECT_CALLABLE_SCOPE struct rt6_info *ip6_pol_route_lookup(struct > net *net, > struct fib6_table *table, > struct flowi6 *fl6, ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule. 2025-01-03 10:27 ` Shiming Cheng (成诗明) @ 2025-01-03 15:31 ` David Ahern 2025-01-14 3:11 ` Shiming Cheng (成诗明) 0 siblings, 1 reply; 6+ messages in thread From: David Ahern @ 2025-01-03 15:31 UTC (permalink / raw) To: Shiming Cheng (成诗明), linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, horms@kernel.org, kuba@kernel.org, edumazet@google.com, pabeni@redhat.com, willemdebruijn.kernel@gmail.com, linux-arm-kernel@lists.infradead.org, matthias.bgg@gmail.com, davem@davemloft.net, AngeloGioacchino Del Regno Cc: netdev@vger.kernel.org, Lena Wang (王娜) On 1/3/25 3:27 AM, Shiming Cheng (成诗明) wrote: > Test cases will be provided later, below are the corresponding IP rule > configurations for IPv4 and IPv6 that i provided, as well as the > differences in ping results, the IPv4 result passed, but the IPv6 result > failed, after adding this patch, the IPv6 result passed. I do not want the output of a complicated stack of ip rules with a ping a command. Provide a simplistic set of commands that configure the stack and show what you believe is a problem. Anyone on this list should be able to quickly reproduce the setup to verify it is a problem and investigate what is happening. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule. 2025-01-03 15:31 ` David Ahern @ 2025-01-14 3:11 ` Shiming Cheng (成诗明) 2025-01-19 23:21 ` David Ahern 0 siblings, 1 reply; 6+ messages in thread From: Shiming Cheng (成诗明) @ 2025-01-14 3:11 UTC (permalink / raw) To: linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, dsahern@kernel.org, horms@kernel.org, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, willemdebruijn.kernel@gmail.com, linux-arm-kernel@lists.infradead.org, matthias.bgg@gmail.com, davem@davemloft.net, AngeloGioacchino Del Regno Cc: netdev@vger.kernel.org, Lena Wang (王娜) Dear David Attached are the test script commands and test results. Please review. Thanks #!/bin/bash ip netns add test1 ip netns add test2 ip link add dev veth0 netns test1 type veth peer name veth0 netns test2 ip link add dev veth1 netns test2 type dummy ip netns exec test1 ip link set dev veth0 up ip netns exec test2 ip link set dev veth0 up ip netns exec test2 ip link set dev veth1 up ip netns exec test1 ip addr add 10.0.8.1/24 dev veth0 ip netns exec test2 ip addr add 10.0.8.2/24 dev veth0 ip netns exec test2 ip addr add 10.0.9.2/24 dev veth1 ip -6 -netns test1 addr add fdaa::1 dev veth0 ip -6 -netns test2 addr add fdaa::2 dev veth0 ip -6 -netns test2 addr add fdab::2 dev veth1 ip -netns test1 route add default via 10.0.8.2 ip -netns test2 route add default via 10.0.8.1 ip -6 -netns test1 route add fdaa::2 dev veth0 ip -6 -netns test2 route add fdaa::1 dev veth0 ip -6 -netns test1 route add default via fdaa::2 ip -6 -netns test2 route add default via fdaa::1 ip -6 -netns test1 rule add from all unreachable pri 1 ip -netns test1 rule add from all unreachable pri 1 test results as below: 1.test ipv4 pass xxx:/ # ip netns exec test1 ping -I veth0 10.0.9.2 PING 10.0.9.2 (10.0.9.2) from 10.0.8.1 veth0: 56(84) bytes of data. 64 bytes from 10.0.9.2: icmp_seq=1 ttl=64 time=0.164 ms 64 bytes from 10.0.9.2: icmp_seq=2 ttl=64 time=0.154 ms 64 bytes from 10.0.9.2: icmp_seq=3 ttl=64 time=0.148 ms 64 bytes from 10.0.9.2: icmp_seq=4 ttl=64 time=0.150 ms 2.test ipv6 fail xxx:/ # ip netns exec test1 ping6 -I veth0 fdab::2 connect: Network is unreachable 3.test ipv6 pass without unreachable rule xxx:/ # ip -6 -netns test1 rule del from all unreachable pri 1 xxx:/ # ip netns exec test1 ping6 -I veth0 fdab::2 PING fdab::2(fdab::2) from fdaa::1 veth0: 56 data bytes 64 bytes from fdab::2: icmp_seq=1 ttl=64 time=0.098 ms 64 bytes from fdab::2: icmp_seq=2 ttl=64 time=0.201 ms 64 bytes from fdab::2: icmp_seq=3 ttl=64 time=0.215 ms On Fri, 2025-01-03 at 08:31 -0700, David Ahern wrote: > External email : Please do not click links or open attachments until > you have verified the sender or the content. > > > On 1/3/25 3:27 AM, Shiming Cheng (成诗明) wrote: > > Test cases will be provided later, below are the corresponding IP > > rule > > configurations for IPv4 and IPv6 that i provided, as well as the > > differences in ping results, the IPv4 result passed, but the IPv6 > > result > > failed, after adding this patch, the IPv6 result passed. > > I do not want the output of a complicated stack of ip rules with a > ping > a command. > > Provide a simplistic set of commands that configure the stack and > show > what you believe is a problem. Anyone on this list should be able to > quickly reproduce the setup to verify it is a problem and investigate > what is happening. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule. 2025-01-14 3:11 ` Shiming Cheng (成诗明) @ 2025-01-19 23:21 ` David Ahern 0 siblings, 0 replies; 6+ messages in thread From: David Ahern @ 2025-01-19 23:21 UTC (permalink / raw) To: Shiming Cheng (成诗明), linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, horms@kernel.org, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, willemdebruijn.kernel@gmail.com, linux-arm-kernel@lists.infradead.org, matthias.bgg@gmail.com, davem@davemloft.net, AngeloGioacchino Del Regno Cc: netdev@vger.kernel.org, Lena Wang (王娜) On 1/13/25 8:11 PM, Shiming Cheng (成诗明) wrote: > > ip -6 -netns test1 rule add from all unreachable pri 1 > ip -netns test1 rule add from all unreachable pri 1 The bug is in ipv4, ip_route_output_key_hash_rc(): err = fib_lookup(net, fl4, res, 0); if (err) { res->fi = NULL; res->table = NULL; if (fl4->flowi4_oif && (ipv4_is_multicast(fl4->daddr) || !fl4->flowi4_l3mdev)) { ... The fib lookup should fail because of the unreachable rule, but the output side is overlooking it for this legacy reason. ip6_route_output_flags does not have this exception and so it is rightly failing. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule. 2025-01-03 5:43 [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule Shiming Cheng 2025-01-03 10:27 ` Shiming Cheng (成诗明) @ 2025-01-04 2:14 ` Jakub Kicinski 1 sibling, 0 replies; 6+ messages in thread From: Jakub Kicinski @ 2025-01-04 2:14 UTC (permalink / raw) To: Shiming Cheng Cc: willemdebruijn.kernel, davem, dsahern, edumazet, pabeni, horms, matthias.bgg, angelogioacchino.delregno, linux-kernel, linux-arm-kernel, linux-mediatek, netdev, lena.wang On Fri, 3 Jan 2025 13:43:49 +0800 Shiming Cheng wrote: > When using socket IPv6 with SO_BINDTODEVICE, if IPv6 rule is not > matched, it will return ENETUNREACH. In fact, IPv4 does not behave > this way. IPv4 prioritizes looking up IP rules for routing and > forwarding, if not matched it will use socket-bound out interface > to send packets. The modification here is to make IPv6 behave the > same as IPv4. If IP rule is not found, it will also use socket-bound > out interface to send packts. CI shows failures in tools/testing/selftests/net/fcnal-test.sh and tools/testing/selftests/net/fib_nexthops.sh with this patch applied. Could be a flake but please double check before sending v3 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-01-19 23:21 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-01-03 5:43 [PATCH net v2] ipv6: socket SO_BINDTODEVICE lookup routing fail without IPv6 rule Shiming Cheng 2025-01-03 10:27 ` Shiming Cheng (成诗明) 2025-01-03 15:31 ` David Ahern 2025-01-14 3:11 ` Shiming Cheng (成诗明) 2025-01-19 23:21 ` David Ahern 2025-01-04 2:14 ` Jakub Kicinski
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).