net/interfaces: return all Tailscale addresses from Tailscale().

Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
David Anderson
2021-04-28 19:05:24 -07:00
parent b7a497a30b
commit 72b6d98298
2 changed files with 15 additions and 4 deletions

View File

@@ -26,7 +26,7 @@ var LoginEndpointForProxyDetermination = "https://login.tailscale.com/"
// Tailscale returns the current machine's Tailscale interface, if any.
// If none is found, all zero values are returned.
// A non-nil error is only returned on a problem listing the system interfaces.
func Tailscale() (net.IP, *net.Interface, error) {
func Tailscale() ([]netaddr.IP, *net.Interface, error) {
ifs, err := net.Interfaces()
if err != nil {
return nil, nil, err
@@ -39,14 +39,18 @@ func Tailscale() (net.IP, *net.Interface, error) {
if err != nil {
continue
}
var tsIPs []netaddr.IP
for _, a := range addrs {
if ipnet, ok := a.(*net.IPNet); ok {
nip, ok := netaddr.FromStdIP(ipnet.IP)
if ok && tsaddr.IsTailscaleIP(nip) {
return ipnet.IP, &iface, nil
tsIPs = append(tsIPs, nip)
}
}
}
if len(tsIPs) > 0 {
return tsIPs, &iface, nil
}
}
return nil, nil, nil
}