From 7172f3dbf4fbd2a759401647641549fdef5b6f7c Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 2 Mar 2020 12:37:28 -0800 Subject: [PATCH] version: add IsMobile func And use it control/controlclient. --- control/controlclient/direct.go | 5 ++--- control/controlclient/netmap.go | 8 +++----- version/prop.go | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 version/prop.go diff --git a/control/controlclient/direct.go b/control/controlclient/direct.go index 85b196a23..aba2ee3d0 100644 --- a/control/controlclient/direct.go +++ b/control/controlclient/direct.go @@ -144,10 +144,9 @@ func hostinfoOS() string { os := runtime.GOOS switch os { case "darwin": - switch runtime.GOARCH { - case "arm", "arm64": + if version.IsMobile() { return "iOS" - default: + } else { return "macOS" } default: diff --git a/control/controlclient/netmap.go b/control/controlclient/netmap.go index a2cfaa6ea..703de7a34 100644 --- a/control/controlclient/netmap.go +++ b/control/controlclient/netmap.go @@ -11,12 +11,12 @@ import ( "fmt" "log" "net" - "runtime" "strings" "time" "github.com/tailscale/wireguard-go/wgcfg" "tailscale.com/tailcfg" + "tailscale.com/version" "tailscale.com/wgengine/filter" ) @@ -154,9 +154,6 @@ func (nm *NetworkMap) UserMap() map[string][]filter.IP { return rev } -var iOS = runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") -var keepalive = !iOS - const ( UAllowSingleHosts = 1 << iota UAllowSubnetRoutes @@ -278,7 +275,8 @@ func (nm *NetworkMap) _WireGuardConfig(uflags int, dnsOverride []wgcfg.IP, allEn aips = append(aips, aip) } fmt.Fprintf(buf, "AllowedIPs = %s\n", strings.Join(aips, ", ")) - if keepalive { + doKeepAlives := !version.IsMobile() + if doKeepAlives { fmt.Fprintf(buf, "PersistentKeepalive = 25\n") } } diff --git a/version/prop.go b/version/prop.go new file mode 100644 index 000000000..1cbd8a6fc --- /dev/null +++ b/version/prop.go @@ -0,0 +1,15 @@ +// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package version + +import "runtime" + +// IsMobile reports whether this is a mobile client build. +func IsMobile() bool { + // Good enough heuristic for now, at least until Apple makes + // ARM laptops... + return runtime.GOOS == "android" || + (runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64")) +}