Merge remote-tracking branch 'origin/client-ipv6-routing' into client-ipv6-nftables

This commit is contained in:
Viktor Liu
2026-04-07 18:45:05 +02:00
2 changed files with 12 additions and 1 deletions

View File

@@ -40,6 +40,10 @@ func (noopNetworkChangeListener) SetInterfaceIP(string) {
// network stack, not by OS-level interface configuration.
}
func (noopNetworkChangeListener) SetInterfaceIPv6(string) {
// No-op: same as SetInterfaceIP, IPv6 overlay is managed by userspace stack.
}
// noopDnsReadyListener is a stub for embed.Client on Android.
// DNS readiness notifications are not needed in netstack/embed mode
// since system DNS is disabled and DNS resolution happens externally.

View File

@@ -26,6 +26,7 @@ func (r *Route) getIPsFromResolver(domain domain.Domain) ([]net.IP, error) {
startTime := time.Now()
var ips []net.IP
var queryErr error
for _, qtype := range []uint16{dns.TypeA, dns.TypeAAAA} {
msg := new(dns.Msg)
@@ -33,7 +34,10 @@ func (r *Route) getIPsFromResolver(domain domain.Domain) ([]net.IP, error) {
response, _, err := nbdns.ExchangeWithFallback(nil, privateClient, msg, r.resolverAddr.String())
if err != nil {
return nil, fmt.Errorf("DNS query for %s (type %d) after %s: %s", domain.SafeString(), qtype, time.Since(startTime), err)
if queryErr == nil {
queryErr = fmt.Errorf("DNS query for %s (type %d) after %s: %w", domain.SafeString(), qtype, time.Since(startTime), err)
}
continue
}
if response.Rcode != dns.RcodeSuccess {
@@ -51,6 +55,9 @@ func (r *Route) getIPsFromResolver(domain domain.Domain) ([]net.IP, error) {
}
if len(ips) == 0 {
if queryErr != nil {
return nil, queryErr
}
return nil, fmt.Errorf("no A or AAAA records found for %s", domain.SafeString())
}