diff options
| author | Aaron Klotz <aaron@tailscale.com> | 2024-07-31 10:37:08 -0600 |
|---|---|---|
| committer | Aaron Klotz <aaron@tailscale.com> | 2024-07-31 10:58:45 -0600 |
| commit | 0def4f8e38c6cf8f2f2004607de4fef6b7dcb79c (patch) | |
| tree | eba5c86a185be08332d66b66d68963e4eb6707a3 | |
| parent | 7bc2ddaedc2ac5965f02a76453147e23d58687bd (diff) | |
| download | tailscale-0def4f8e38c6cf8f2f2004607de4fef6b7dcb79c.tar.xz tailscale-0def4f8e38c6cf8f2f2004607de4fef6b7dcb79c.zip | |
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>
| -rw-r--r-- | net/netns/netns_windows.go | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/net/netns/netns_windows.go b/net/netns/netns_windows.go index 3c4bafbb5..c78001560 100644 --- a/net/netns/netns_windows.go +++ b/net/netns/netns_windows.go @@ -86,23 +86,24 @@ func controlC(logf logger.Logf, network, address string, c syscall.RawConn) (err var ifaceIdxV4, ifaceIdxV6 uint32 if useRoute := bindToInterfaceByRoute.Load() || bindToInterfaceByRouteEnv(); useRoute { addr, err := parseAddress(address) - if err != nil { - return fmt.Errorf("parseAddress: %w", err) - } - - if canV4 && (addr.Is4() || addr.Is4In6()) { - addrV4 := addr.Unmap() - ifaceIdxV4, err = getInterfaceIndex(logf, addrV4, defIfaceIdxV4) - if err != nil { - return fmt.Errorf("getInterfaceIndex(%v): %w", addrV4, err) + if err == nil { + if canV4 && (addr.Is4() || addr.Is4In6()) { + addrV4 := addr.Unmap() + ifaceIdxV4, err = getInterfaceIndex(logf, addrV4, defIfaceIdxV4) + if err != nil { + return fmt.Errorf("getInterfaceIndex(%v): %w", addrV4, err) + } } - } - if canV6 && addr.Is6() { - ifaceIdxV6, err = getInterfaceIndex(logf, addr, defIfaceIdxV6) - if err != nil { - return fmt.Errorf("getInterfaceIndex(%v): %w", addr, err) + if canV6 && addr.Is6() { + ifaceIdxV6, err = getInterfaceIndex(logf, addr, defIfaceIdxV6) + if err != nil { + return fmt.Errorf("getInterfaceIndex(%v): %w", addr, err) + } } + } else { + logf("[unexpected] netns: error parsing address %q: %v", address, err) + ifaceIdxV4, ifaceIdxV6 = defIfaceIdxV4, defIfaceIdxV6 } } else { ifaceIdxV4, ifaceIdxV6 = defIfaceIdxV4, defIfaceIdxV6 |
