net/netns: on Windows, fall back to default interface index when unspecified address is passed to ControlC and bindToInterfaceByRoute is enabled

We were returning an error instead of binding to the default interface.

Updates #12979

Signed-off-by: Aaron Klotz <aaron@tailscale.com>
pull/12983/head
Aaron Klotz 4 months ago
parent 7bc2ddaedc
commit 0def4f8e38

@ -86,10 +86,7 @@ func controlC(logf logger.Logf, network, address string, c syscall.RawConn) (err
var ifaceIdxV4, ifaceIdxV6 uint32 var ifaceIdxV4, ifaceIdxV6 uint32
if useRoute := bindToInterfaceByRoute.Load() || bindToInterfaceByRouteEnv(); useRoute { if useRoute := bindToInterfaceByRoute.Load() || bindToInterfaceByRouteEnv(); useRoute {
addr, err := parseAddress(address) addr, err := parseAddress(address)
if err != nil { if err == nil {
return fmt.Errorf("parseAddress: %w", err)
}
if canV4 && (addr.Is4() || addr.Is4In6()) { if canV4 && (addr.Is4() || addr.Is4In6()) {
addrV4 := addr.Unmap() addrV4 := addr.Unmap()
ifaceIdxV4, err = getInterfaceIndex(logf, addrV4, defIfaceIdxV4) ifaceIdxV4, err = getInterfaceIndex(logf, addrV4, defIfaceIdxV4)
@ -104,6 +101,10 @@ func controlC(logf logger.Logf, network, address string, c syscall.RawConn) (err
return fmt.Errorf("getInterfaceIndex(%v): %w", addr, err) return fmt.Errorf("getInterfaceIndex(%v): %w", addr, err)
} }
} }
} else {
logf("[unexpected] netns: error parsing address %q: %v", address, err)
ifaceIdxV4, ifaceIdxV6 = defIfaceIdxV4, defIfaceIdxV6
}
} else { } else {
ifaceIdxV4, ifaceIdxV6 = defIfaceIdxV4, defIfaceIdxV6 ifaceIdxV4, ifaceIdxV6 = defIfaceIdxV4, defIfaceIdxV6
} }

Loading…
Cancel
Save