mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-22 05:27:08 +00:00
wgengine/router{,/osrouter}: split OS router implementations into subpackage
So wgengine/router is just the docs + entrypoint + types, and then underscore importing wgengine/router/osrouter registers the constructors with the wgengine/router package. Then tsnet can not pull those in. Updates #17313 Change-Id: If313226f6987d709ea9193c8f16a909326ceefe7 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
65d6c80695
commit
39e35379d4
@@ -86,7 +86,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
github.com/coder/websocket/internal/errd from github.com/coder/websocket
|
github.com/coder/websocket/internal/errd from github.com/coder/websocket
|
||||||
github.com/coder/websocket/internal/util from github.com/coder/websocket
|
github.com/coder/websocket/internal/util from github.com/coder/websocket
|
||||||
github.com/coder/websocket/internal/xsync from github.com/coder/websocket
|
github.com/coder/websocket/internal/xsync from github.com/coder/websocket
|
||||||
L github.com/coreos/go-iptables/iptables from tailscale.com/util/linuxfw
|
|
||||||
💣 github.com/davecgh/go-spew/spew from k8s.io/apimachinery/pkg/util/dump
|
💣 github.com/davecgh/go-spew/spew from k8s.io/apimachinery/pkg/util/dump
|
||||||
W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/com+
|
W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/com+
|
||||||
W 💣 github.com/dblohm7/wingoes/com from tailscale.com/util/osdiag+
|
W 💣 github.com/dblohm7/wingoes/com from tailscale.com/util/osdiag+
|
||||||
@@ -113,8 +112,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
github.com/go-logr/logr from github.com/go-logr/logr/slogr+
|
github.com/go-logr/logr from github.com/go-logr/logr/slogr+
|
||||||
github.com/go-logr/logr/slogr from github.com/go-logr/zapr
|
github.com/go-logr/logr/slogr from github.com/go-logr/zapr
|
||||||
github.com/go-logr/zapr from sigs.k8s.io/controller-runtime/pkg/log/zap+
|
github.com/go-logr/zapr from sigs.k8s.io/controller-runtime/pkg/log/zap+
|
||||||
W 💣 github.com/go-ole/go-ole from github.com/go-ole/go-ole/oleutil+
|
|
||||||
W 💣 github.com/go-ole/go-ole/oleutil from tailscale.com/wgengine/winnet
|
|
||||||
github.com/go-openapi/jsonpointer from github.com/go-openapi/jsonreference
|
github.com/go-openapi/jsonpointer from github.com/go-openapi/jsonreference
|
||||||
github.com/go-openapi/jsonreference from k8s.io/kube-openapi/pkg/internal+
|
github.com/go-openapi/jsonreference from k8s.io/kube-openapi/pkg/internal+
|
||||||
github.com/go-openapi/jsonreference/internal from github.com/go-openapi/jsonreference
|
github.com/go-openapi/jsonreference/internal from github.com/go-openapi/jsonreference
|
||||||
@@ -137,12 +134,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
💣 github.com/google/go-cmp/cmp/internal/value from github.com/google/go-cmp/cmp
|
💣 github.com/google/go-cmp/cmp/internal/value from github.com/google/go-cmp/cmp
|
||||||
github.com/google/gofuzz from k8s.io/apimachinery/pkg/apis/meta/v1+
|
github.com/google/gofuzz from k8s.io/apimachinery/pkg/apis/meta/v1+
|
||||||
github.com/google/gofuzz/bytesource from github.com/google/gofuzz
|
github.com/google/gofuzz/bytesource from github.com/google/gofuzz
|
||||||
L github.com/google/nftables from tailscale.com/util/linuxfw
|
|
||||||
L 💣 github.com/google/nftables/alignedbuff from github.com/google/nftables/xt
|
|
||||||
L 💣 github.com/google/nftables/binaryutil from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/expr from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/internal/parseexprfunc from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/xt from github.com/google/nftables/expr+
|
|
||||||
github.com/google/uuid from github.com/prometheus-community/pro-bing+
|
github.com/google/uuid from github.com/prometheus-community/pro-bing+
|
||||||
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign+
|
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign+
|
||||||
L github.com/jmespath/go-jmespath from github.com/aws/aws-sdk-go-v2/service/ssm
|
L github.com/jmespath/go-jmespath from github.com/aws/aws-sdk-go-v2/service/ssm
|
||||||
@@ -161,9 +152,8 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
💣 github.com/mailru/easyjson/jlexer from github.com/go-openapi/swag
|
💣 github.com/mailru/easyjson/jlexer from github.com/go-openapi/swag
|
||||||
github.com/mailru/easyjson/jwriter from github.com/go-openapi/swag
|
github.com/mailru/easyjson/jwriter from github.com/go-openapi/swag
|
||||||
L github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
L github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
||||||
L 💣 github.com/mdlayher/netlink from github.com/google/nftables+
|
L 💣 github.com/mdlayher/netlink from github.com/jsimonetti/rtnetlink+
|
||||||
L 💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
L 💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
||||||
L github.com/mdlayher/netlink/nltest from github.com/google/nftables
|
|
||||||
L 💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
L 💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
||||||
💣 github.com/mitchellh/go-ps from tailscale.com/safesocket
|
💣 github.com/mitchellh/go-ps from tailscale.com/safesocket
|
||||||
github.com/modern-go/concurrent from github.com/json-iterator/go
|
github.com/modern-go/concurrent from github.com/json-iterator/go
|
||||||
@@ -199,8 +189,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
github.com/tailscale/goupnp/soap from github.com/tailscale/goupnp+
|
github.com/tailscale/goupnp/soap from github.com/tailscale/goupnp+
|
||||||
github.com/tailscale/goupnp/ssdp from github.com/tailscale/goupnp
|
github.com/tailscale/goupnp/ssdp from github.com/tailscale/goupnp
|
||||||
github.com/tailscale/hujson from tailscale.com/ipn/conffile+
|
github.com/tailscale/hujson from tailscale.com/ipn/conffile+
|
||||||
L 💣 github.com/tailscale/netlink from tailscale.com/util/linuxfw+
|
|
||||||
L 💣 github.com/tailscale/netlink/nl from github.com/tailscale/netlink
|
|
||||||
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
||||||
github.com/tailscale/web-client-prebuilt from tailscale.com/client/web
|
github.com/tailscale/web-client-prebuilt from tailscale.com/client/web
|
||||||
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
||||||
@@ -213,7 +201,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
||||||
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
||||||
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
||||||
L github.com/vishvananda/netns from github.com/tailscale/netlink+
|
|
||||||
github.com/x448/float16 from github.com/fxamacker/cbor/v2
|
github.com/x448/float16 from github.com/fxamacker/cbor/v2
|
||||||
go.uber.org/multierr from go.uber.org/zap+
|
go.uber.org/multierr from go.uber.org/zap+
|
||||||
go.uber.org/zap from github.com/go-logr/zapr+
|
go.uber.org/zap from github.com/go-logr/zapr+
|
||||||
@@ -931,7 +918,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
||||||
tailscale.com/util/httpm from tailscale.com/client/tailscale+
|
tailscale.com/util/httpm from tailscale.com/client/tailscale+
|
||||||
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
||||||
L tailscale.com/util/linuxfw from tailscale.com/wgengine/router
|
|
||||||
tailscale.com/util/mak from tailscale.com/appc+
|
tailscale.com/util/mak from tailscale.com/appc+
|
||||||
tailscale.com/util/multierr from tailscale.com/control/controlclient+
|
tailscale.com/util/multierr from tailscale.com/control/controlclient+
|
||||||
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
||||||
@@ -980,7 +966,6 @@ tailscale.com/cmd/k8s-operator dependencies: (generated by github.com/tailscale/
|
|||||||
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
||||||
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
||||||
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
||||||
W 💣 tailscale.com/wgengine/winnet from tailscale.com/wgengine/router
|
|
||||||
golang.org/x/crypto/argon2 from tailscale.com/tka
|
golang.org/x/crypto/argon2 from tailscale.com/tka
|
||||||
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
||||||
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
||||||
|
|||||||
@@ -13,12 +13,6 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
github.com/go-json-experiment/json/internal/jsonwire from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/internal/jsonwire from github.com/go-json-experiment/json+
|
||||||
github.com/go-json-experiment/json/jsontext from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/jsontext from github.com/go-json-experiment/json+
|
||||||
github.com/golang/groupcache/lru from tailscale.com/net/dnscache
|
github.com/golang/groupcache/lru from tailscale.com/net/dnscache
|
||||||
github.com/google/nftables from tailscale.com/util/linuxfw
|
|
||||||
💣 github.com/google/nftables/alignedbuff from github.com/google/nftables/xt
|
|
||||||
💣 github.com/google/nftables/binaryutil from github.com/google/nftables+
|
|
||||||
github.com/google/nftables/expr from github.com/google/nftables+
|
|
||||||
github.com/google/nftables/internal/parseexprfunc from github.com/google/nftables+
|
|
||||||
github.com/google/nftables/xt from github.com/google/nftables/expr+
|
|
||||||
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign
|
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign
|
||||||
💣 github.com/jsimonetti/rtnetlink from tailscale.com/net/netmon
|
💣 github.com/jsimonetti/rtnetlink from tailscale.com/net/netmon
|
||||||
github.com/jsimonetti/rtnetlink/internal/unix from github.com/jsimonetti/rtnetlink
|
github.com/jsimonetti/rtnetlink/internal/unix from github.com/jsimonetti/rtnetlink
|
||||||
@@ -30,14 +24,11 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
github.com/klauspost/compress/zstd from tailscale.com/util/zstdframe
|
github.com/klauspost/compress/zstd from tailscale.com/util/zstdframe
|
||||||
github.com/klauspost/compress/zstd/internal/xxhash from github.com/klauspost/compress/zstd
|
github.com/klauspost/compress/zstd/internal/xxhash from github.com/klauspost/compress/zstd
|
||||||
github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
||||||
💣 github.com/mdlayher/netlink from github.com/google/nftables+
|
💣 github.com/mdlayher/netlink from github.com/jsimonetti/rtnetlink+
|
||||||
💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
||||||
github.com/mdlayher/netlink/nltest from github.com/google/nftables
|
|
||||||
💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
||||||
💣 github.com/safchain/ethtool from tailscale.com/net/netkernelconf
|
💣 github.com/safchain/ethtool from tailscale.com/net/netkernelconf
|
||||||
github.com/tailscale/hujson from tailscale.com/ipn/conffile
|
github.com/tailscale/hujson from tailscale.com/ipn/conffile
|
||||||
💣 github.com/tailscale/netlink from tailscale.com/util/linuxfw+
|
|
||||||
💣 github.com/tailscale/netlink/nl from github.com/tailscale/netlink
|
|
||||||
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
||||||
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
||||||
💣 github.com/tailscale/wireguard-go/device from tailscale.com/net/tstun+
|
💣 github.com/tailscale/wireguard-go/device from tailscale.com/net/tstun+
|
||||||
@@ -47,7 +38,6 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
||||||
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
||||||
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
||||||
github.com/vishvananda/netns from github.com/tailscale/netlink+
|
|
||||||
💣 go4.org/mem from tailscale.com/control/controlbase+
|
💣 go4.org/mem from tailscale.com/control/controlbase+
|
||||||
go4.org/netipx from tailscale.com/ipn/ipnlocal+
|
go4.org/netipx from tailscale.com/ipn/ipnlocal+
|
||||||
tailscale.com from tailscale.com/version
|
tailscale.com from tailscale.com/version
|
||||||
@@ -139,7 +129,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/tempfork/heap from tailscale.com/wgengine/magicsock
|
tailscale.com/tempfork/heap from tailscale.com/wgengine/magicsock
|
||||||
tailscale.com/tempfork/httprec from tailscale.com/control/controlclient
|
tailscale.com/tempfork/httprec from tailscale.com/control/controlclient
|
||||||
tailscale.com/tka from tailscale.com/control/controlclient+
|
tailscale.com/tka from tailscale.com/control/controlclient+
|
||||||
tailscale.com/tsconst from tailscale.com/net/netns+
|
tailscale.com/tsconst from tailscale.com/net/netns
|
||||||
tailscale.com/tsd from tailscale.com/cmd/tailscaled+
|
tailscale.com/tsd from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/tstime from tailscale.com/control/controlclient+
|
tailscale.com/tstime from tailscale.com/control/controlclient+
|
||||||
tailscale.com/tstime/mono from tailscale.com/net/tstun+
|
tailscale.com/tstime/mono from tailscale.com/net/tstun+
|
||||||
@@ -183,7 +173,6 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
||||||
tailscale.com/util/httpm from tailscale.com/clientupdate/distsign+
|
tailscale.com/util/httpm from tailscale.com/clientupdate/distsign+
|
||||||
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
||||||
tailscale.com/util/linuxfw from tailscale.com/wgengine/router
|
|
||||||
tailscale.com/util/mak from tailscale.com/appc+
|
tailscale.com/util/mak from tailscale.com/appc+
|
||||||
tailscale.com/util/multierr from tailscale.com/cmd/tailscaled+
|
tailscale.com/util/multierr from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
||||||
@@ -253,13 +242,13 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
golang.org/x/net/proxy from tailscale.com/net/netns
|
golang.org/x/net/proxy from tailscale.com/net/netns
|
||||||
golang.org/x/sync/errgroup from github.com/mdlayher/socket+
|
golang.org/x/sync/errgroup from github.com/mdlayher/socket+
|
||||||
golang.org/x/sys/cpu from github.com/tailscale/wireguard-go/tun+
|
golang.org/x/sys/cpu from github.com/tailscale/wireguard-go/tun+
|
||||||
golang.org/x/sys/unix from github.com/google/nftables+
|
golang.org/x/sys/unix from github.com/jsimonetti/rtnetlink/internal/unix+
|
||||||
golang.org/x/term from tailscale.com/logpolicy
|
golang.org/x/term from tailscale.com/logpolicy
|
||||||
golang.org/x/text/secure/bidirule from golang.org/x/net/idna
|
golang.org/x/text/secure/bidirule from golang.org/x/net/idna
|
||||||
golang.org/x/text/transform from golang.org/x/text/secure/bidirule+
|
golang.org/x/text/transform from golang.org/x/text/secure/bidirule+
|
||||||
golang.org/x/text/unicode/bidi from golang.org/x/net/idna+
|
golang.org/x/text/unicode/bidi from golang.org/x/net/idna+
|
||||||
golang.org/x/text/unicode/norm from golang.org/x/net/idna
|
golang.org/x/text/unicode/norm from golang.org/x/net/idna
|
||||||
golang.org/x/time/rate from tailscale.com/derp+
|
golang.org/x/time/rate from tailscale.com/derp
|
||||||
archive/tar from tailscale.com/clientupdate
|
archive/tar from tailscale.com/clientupdate
|
||||||
bufio from compress/flate+
|
bufio from compress/flate+
|
||||||
bytes from archive/tar+
|
bytes from archive/tar+
|
||||||
@@ -392,7 +381,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
internal/unsafeheader from internal/reflectlite+
|
internal/unsafeheader from internal/reflectlite+
|
||||||
io from archive/tar+
|
io from archive/tar+
|
||||||
io/fs from archive/tar+
|
io/fs from archive/tar+
|
||||||
io/ioutil from github.com/digitalocean/go-smbios/smbios+
|
io/ioutil from github.com/digitalocean/go-smbios/smbios
|
||||||
iter from bytes+
|
iter from bytes+
|
||||||
log from expvar+
|
log from expvar+
|
||||||
log/internal from log
|
log/internal from log
|
||||||
|
|||||||
@@ -420,7 +420,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/util/httphdr from tailscale.com/feature/taildrop
|
tailscale.com/util/httphdr from tailscale.com/feature/taildrop
|
||||||
tailscale.com/util/httpm from tailscale.com/client/web+
|
tailscale.com/util/httpm from tailscale.com/client/web+
|
||||||
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
||||||
L tailscale.com/util/linuxfw from tailscale.com/wgengine/router
|
L tailscale.com/util/linuxfw from tailscale.com/wgengine/router/osrouter
|
||||||
tailscale.com/util/mak from tailscale.com/control/controlclient+
|
tailscale.com/util/mak from tailscale.com/control/controlclient+
|
||||||
tailscale.com/util/multierr from tailscale.com/cmd/tailscaled+
|
tailscale.com/util/multierr from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
||||||
@@ -468,11 +468,12 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/wgengine/netstack from tailscale.com/cmd/tailscaled
|
tailscale.com/wgengine/netstack from tailscale.com/cmd/tailscaled
|
||||||
tailscale.com/wgengine/netstack/gro from tailscale.com/net/tstun+
|
tailscale.com/wgengine/netstack/gro from tailscale.com/net/tstun+
|
||||||
tailscale.com/wgengine/router from tailscale.com/cmd/tailscaled+
|
tailscale.com/wgengine/router from tailscale.com/cmd/tailscaled+
|
||||||
|
tailscale.com/wgengine/router/osrouter from tailscale.com/feature/condregister
|
||||||
tailscale.com/wgengine/wgcfg from tailscale.com/ipn/ipnlocal+
|
tailscale.com/wgengine/wgcfg from tailscale.com/ipn/ipnlocal+
|
||||||
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
||||||
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
||||||
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
||||||
W 💣 tailscale.com/wgengine/winnet from tailscale.com/wgengine/router
|
W 💣 tailscale.com/wgengine/winnet from tailscale.com/wgengine/router/osrouter
|
||||||
golang.org/x/crypto/argon2 from tailscale.com/tka
|
golang.org/x/crypto/argon2 from tailscale.com/tka
|
||||||
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
||||||
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
github.com/coder/websocket/internal/errd from github.com/coder/websocket
|
github.com/coder/websocket/internal/errd from github.com/coder/websocket
|
||||||
github.com/coder/websocket/internal/util from github.com/coder/websocket
|
github.com/coder/websocket/internal/util from github.com/coder/websocket
|
||||||
github.com/coder/websocket/internal/xsync from github.com/coder/websocket
|
github.com/coder/websocket/internal/xsync from github.com/coder/websocket
|
||||||
L github.com/coreos/go-iptables/iptables from tailscale.com/util/linuxfw
|
|
||||||
W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/com+
|
W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/com+
|
||||||
W 💣 github.com/dblohm7/wingoes/com from tailscale.com/util/osdiag+
|
W 💣 github.com/dblohm7/wingoes/com from tailscale.com/util/osdiag+
|
||||||
W 💣 github.com/dblohm7/wingoes/com/automation from tailscale.com/util/osdiag/internal/wsc
|
W 💣 github.com/dblohm7/wingoes/com/automation from tailscale.com/util/osdiag/internal/wsc
|
||||||
@@ -101,17 +100,9 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
github.com/go-json-experiment/json/internal/jsonopts from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/internal/jsonopts from github.com/go-json-experiment/json+
|
||||||
github.com/go-json-experiment/json/internal/jsonwire from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/internal/jsonwire from github.com/go-json-experiment/json+
|
||||||
github.com/go-json-experiment/json/jsontext from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/jsontext from github.com/go-json-experiment/json+
|
||||||
W 💣 github.com/go-ole/go-ole from github.com/go-ole/go-ole/oleutil+
|
|
||||||
W 💣 github.com/go-ole/go-ole/oleutil from tailscale.com/wgengine/winnet
|
|
||||||
L 💣 github.com/godbus/dbus/v5 from tailscale.com/net/dns
|
L 💣 github.com/godbus/dbus/v5 from tailscale.com/net/dns
|
||||||
github.com/golang/groupcache/lru from tailscale.com/net/dnscache
|
github.com/golang/groupcache/lru from tailscale.com/net/dnscache
|
||||||
github.com/google/btree from gvisor.dev/gvisor/pkg/tcpip/header+
|
github.com/google/btree from gvisor.dev/gvisor/pkg/tcpip/header+
|
||||||
L github.com/google/nftables from tailscale.com/util/linuxfw
|
|
||||||
L 💣 github.com/google/nftables/alignedbuff from github.com/google/nftables/xt
|
|
||||||
L 💣 github.com/google/nftables/binaryutil from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/expr from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/internal/parseexprfunc from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/xt from github.com/google/nftables/expr+
|
|
||||||
DW github.com/google/uuid from github.com/prometheus-community/pro-bing+
|
DW github.com/google/uuid from github.com/prometheus-community/pro-bing+
|
||||||
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign+
|
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign+
|
||||||
L github.com/jmespath/go-jmespath from github.com/aws/aws-sdk-go-v2/service/ssm
|
L github.com/jmespath/go-jmespath from github.com/aws/aws-sdk-go-v2/service/ssm
|
||||||
@@ -125,9 +116,8 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
github.com/klauspost/compress/zstd from tailscale.com/util/zstdframe
|
github.com/klauspost/compress/zstd from tailscale.com/util/zstdframe
|
||||||
github.com/klauspost/compress/zstd/internal/xxhash from github.com/klauspost/compress/zstd
|
github.com/klauspost/compress/zstd/internal/xxhash from github.com/klauspost/compress/zstd
|
||||||
L github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
L github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
||||||
L 💣 github.com/mdlayher/netlink from github.com/google/nftables+
|
L 💣 github.com/mdlayher/netlink from github.com/jsimonetti/rtnetlink+
|
||||||
L 💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
L 💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
||||||
L github.com/mdlayher/netlink/nltest from github.com/google/nftables
|
|
||||||
L 💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
L 💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
||||||
💣 github.com/mitchellh/go-ps from tailscale.com/safesocket
|
💣 github.com/mitchellh/go-ps from tailscale.com/safesocket
|
||||||
D github.com/prometheus-community/pro-bing from tailscale.com/wgengine/netstack
|
D github.com/prometheus-community/pro-bing from tailscale.com/wgengine/netstack
|
||||||
@@ -145,8 +135,6 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
github.com/tailscale/goupnp/soap from github.com/tailscale/goupnp+
|
github.com/tailscale/goupnp/soap from github.com/tailscale/goupnp+
|
||||||
github.com/tailscale/goupnp/ssdp from github.com/tailscale/goupnp
|
github.com/tailscale/goupnp/ssdp from github.com/tailscale/goupnp
|
||||||
github.com/tailscale/hujson from tailscale.com/ipn/conffile
|
github.com/tailscale/hujson from tailscale.com/ipn/conffile
|
||||||
L 💣 github.com/tailscale/netlink from tailscale.com/util/linuxfw+
|
|
||||||
L 💣 github.com/tailscale/netlink/nl from github.com/tailscale/netlink
|
|
||||||
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
||||||
github.com/tailscale/web-client-prebuilt from tailscale.com/client/web
|
github.com/tailscale/web-client-prebuilt from tailscale.com/client/web
|
||||||
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
||||||
@@ -159,7 +147,6 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
||||||
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
||||||
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
||||||
L github.com/vishvananda/netns from github.com/tailscale/netlink+
|
|
||||||
github.com/x448/float16 from github.com/fxamacker/cbor/v2
|
github.com/x448/float16 from github.com/fxamacker/cbor/v2
|
||||||
💣 go4.org/mem from tailscale.com/client/local+
|
💣 go4.org/mem from tailscale.com/client/local+
|
||||||
go4.org/netipx from tailscale.com/ipn/ipnlocal+
|
go4.org/netipx from tailscale.com/ipn/ipnlocal+
|
||||||
@@ -361,7 +348,6 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
||||||
tailscale.com/util/httpm from tailscale.com/client/web+
|
tailscale.com/util/httpm from tailscale.com/client/web+
|
||||||
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
||||||
L tailscale.com/util/linuxfw from tailscale.com/wgengine/router
|
|
||||||
tailscale.com/util/mak from tailscale.com/appc+
|
tailscale.com/util/mak from tailscale.com/appc+
|
||||||
tailscale.com/util/multierr from tailscale.com/control/controlclient+
|
tailscale.com/util/multierr from tailscale.com/control/controlclient+
|
||||||
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
||||||
@@ -410,7 +396,6 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
||||||
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
||||||
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
||||||
W 💣 tailscale.com/wgengine/winnet from tailscale.com/wgengine/router
|
|
||||||
golang.org/x/crypto/argon2 from tailscale.com/tka
|
golang.org/x/crypto/argon2 from tailscale.com/tka
|
||||||
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
||||||
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
||||||
@@ -455,7 +440,7 @@ tailscale.com/cmd/tsidp dependencies: (generated by github.com/tailscale/depawar
|
|||||||
golang.org/x/oauth2/internal from golang.org/x/oauth2+
|
golang.org/x/oauth2/internal from golang.org/x/oauth2+
|
||||||
golang.org/x/sync/errgroup from github.com/mdlayher/socket+
|
golang.org/x/sync/errgroup from github.com/mdlayher/socket+
|
||||||
golang.org/x/sys/cpu from github.com/tailscale/certstore+
|
golang.org/x/sys/cpu from github.com/tailscale/certstore+
|
||||||
LD golang.org/x/sys/unix from github.com/google/nftables+
|
LD golang.org/x/sys/unix from github.com/jsimonetti/rtnetlink/internal/unix+
|
||||||
W golang.org/x/sys/windows from github.com/dblohm7/wingoes+
|
W golang.org/x/sys/windows from github.com/dblohm7/wingoes+
|
||||||
W golang.org/x/sys/windows/registry from github.com/dblohm7/wingoes+
|
W golang.org/x/sys/windows/registry from github.com/dblohm7/wingoes+
|
||||||
W golang.org/x/sys/windows/svc from golang.org/x/sys/windows/svc/mgr+
|
W golang.org/x/sys/windows/svc from golang.org/x/sys/windows/svc/mgr+
|
||||||
|
|||||||
13
feature/buildfeatures/feature_osrouter_disabled.go
Normal file
13
feature/buildfeatures/feature_osrouter_disabled.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
// Code generated by gen.go; DO NOT EDIT.
|
||||||
|
|
||||||
|
//go:build ts_omit_osrouter
|
||||||
|
|
||||||
|
package buildfeatures
|
||||||
|
|
||||||
|
// HasOSRouter is whether the binary was built with support for modular feature "Configure the operating system's network stack, IPs, and routing tables".
|
||||||
|
// Specifically, it's whether the binary was NOT built with the "ts_omit_osrouter" build tag.
|
||||||
|
// It's a const so it can be used for dead code elimination.
|
||||||
|
const HasOSRouter = false
|
||||||
13
feature/buildfeatures/feature_osrouter_enabled.go
Normal file
13
feature/buildfeatures/feature_osrouter_enabled.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
// Code generated by gen.go; DO NOT EDIT.
|
||||||
|
|
||||||
|
//go:build !ts_omit_osrouter
|
||||||
|
|
||||||
|
package buildfeatures
|
||||||
|
|
||||||
|
// HasOSRouter is whether the binary was built with support for modular feature "Configure the operating system's network stack, IPs, and routing tables".
|
||||||
|
// Specifically, it's whether the binary was NOT built with the "ts_omit_osrouter" build tag.
|
||||||
|
// It's a const so it can be used for dead code elimination.
|
||||||
|
const HasOSRouter = true
|
||||||
8
feature/condregister/maybe_osrouter.go
Normal file
8
feature/condregister/maybe_osrouter.go
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
//go:build !ts_omit_osrouter
|
||||||
|
|
||||||
|
package condregister
|
||||||
|
|
||||||
|
import _ "tailscale.com/wgengine/router/osrouter"
|
||||||
@@ -126,6 +126,16 @@ var Features = map[FeatureTag]FeatureMeta{
|
|||||||
Desc: "Outbound localhost HTTP/SOCK5 proxy support",
|
Desc: "Outbound localhost HTTP/SOCK5 proxy support",
|
||||||
Deps: []FeatureTag{"netstack"},
|
Deps: []FeatureTag{"netstack"},
|
||||||
},
|
},
|
||||||
|
"osrouter": {
|
||||||
|
Sym: "OSRouter",
|
||||||
|
Desc: "Configure the operating system's network stack, IPs, and routing tables",
|
||||||
|
// TODO(bradfitz): if this is omitted, and netstack is too, then tailscaled needs
|
||||||
|
// external config to be useful. Some people may want that, and we should support it,
|
||||||
|
// but it's rare. Maybe there should be a way to declare here that this "Provides"
|
||||||
|
// another feature (and netstack can too), and then if those required features provided
|
||||||
|
// by some other feature are missing, then it's an error by default unless you accept
|
||||||
|
// that it's okay to proceed without that meta feature.
|
||||||
|
},
|
||||||
"portlist": {"PortList", "Optionally advertise listening service ports", nil},
|
"portlist": {"PortList", "Optionally advertise listening service ports", nil},
|
||||||
"portmapper": {"PortMapper", "NAT-PMP/PCP/UPnP port mapping support", nil},
|
"portmapper": {"PortMapper", "NAT-PMP/PCP/UPnP port mapping support", nil},
|
||||||
"netlog": {
|
"netlog": {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func TestLicenseHeaders(t *testing.T) {
|
|||||||
|
|
||||||
// WireGuard copyright
|
// WireGuard copyright
|
||||||
"cmd/tailscale/cli/authenticode_windows.go",
|
"cmd/tailscale/cli/authenticode_windows.go",
|
||||||
"wgengine/router/ifconfig_windows.go",
|
"wgengine/router/osrouter/ifconfig_windows.go",
|
||||||
|
|
||||||
// noiseexplorer.com copyright
|
// noiseexplorer.com copyright
|
||||||
"control/controlbase/noiseexplorer_test.go",
|
"control/controlbase/noiseexplorer_test.go",
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
LDW github.com/coder/websocket/internal/errd from github.com/coder/websocket
|
LDW github.com/coder/websocket/internal/errd from github.com/coder/websocket
|
||||||
LDW github.com/coder/websocket/internal/util from github.com/coder/websocket
|
LDW github.com/coder/websocket/internal/util from github.com/coder/websocket
|
||||||
LDW github.com/coder/websocket/internal/xsync from github.com/coder/websocket
|
LDW github.com/coder/websocket/internal/xsync from github.com/coder/websocket
|
||||||
L github.com/coreos/go-iptables/iptables from tailscale.com/util/linuxfw
|
|
||||||
W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/com+
|
W 💣 github.com/dblohm7/wingoes from github.com/dblohm7/wingoes/com+
|
||||||
W 💣 github.com/dblohm7/wingoes/com from tailscale.com/util/osdiag+
|
W 💣 github.com/dblohm7/wingoes/com from tailscale.com/util/osdiag+
|
||||||
W 💣 github.com/dblohm7/wingoes/com/automation from tailscale.com/util/osdiag/internal/wsc
|
W 💣 github.com/dblohm7/wingoes/com/automation from tailscale.com/util/osdiag/internal/wsc
|
||||||
@@ -101,17 +100,9 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
github.com/go-json-experiment/json/internal/jsonopts from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/internal/jsonopts from github.com/go-json-experiment/json+
|
||||||
github.com/go-json-experiment/json/internal/jsonwire from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/internal/jsonwire from github.com/go-json-experiment/json+
|
||||||
github.com/go-json-experiment/json/jsontext from github.com/go-json-experiment/json+
|
github.com/go-json-experiment/json/jsontext from github.com/go-json-experiment/json+
|
||||||
W 💣 github.com/go-ole/go-ole from github.com/go-ole/go-ole/oleutil+
|
|
||||||
W 💣 github.com/go-ole/go-ole/oleutil from tailscale.com/wgengine/winnet
|
|
||||||
L 💣 github.com/godbus/dbus/v5 from tailscale.com/net/dns
|
L 💣 github.com/godbus/dbus/v5 from tailscale.com/net/dns
|
||||||
github.com/golang/groupcache/lru from tailscale.com/net/dnscache
|
github.com/golang/groupcache/lru from tailscale.com/net/dnscache
|
||||||
github.com/google/btree from gvisor.dev/gvisor/pkg/tcpip/header+
|
github.com/google/btree from gvisor.dev/gvisor/pkg/tcpip/header+
|
||||||
L github.com/google/nftables from tailscale.com/util/linuxfw
|
|
||||||
L 💣 github.com/google/nftables/alignedbuff from github.com/google/nftables/xt
|
|
||||||
L 💣 github.com/google/nftables/binaryutil from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/expr from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/internal/parseexprfunc from github.com/google/nftables+
|
|
||||||
L github.com/google/nftables/xt from github.com/google/nftables/expr+
|
|
||||||
DWI github.com/google/uuid from github.com/prometheus-community/pro-bing+
|
DWI github.com/google/uuid from github.com/prometheus-community/pro-bing+
|
||||||
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign+
|
github.com/hdevalence/ed25519consensus from tailscale.com/clientupdate/distsign+
|
||||||
L github.com/jmespath/go-jmespath from github.com/aws/aws-sdk-go-v2/service/ssm
|
L github.com/jmespath/go-jmespath from github.com/aws/aws-sdk-go-v2/service/ssm
|
||||||
@@ -125,9 +116,8 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
github.com/klauspost/compress/zstd from tailscale.com/util/zstdframe
|
github.com/klauspost/compress/zstd from tailscale.com/util/zstdframe
|
||||||
github.com/klauspost/compress/zstd/internal/xxhash from github.com/klauspost/compress/zstd
|
github.com/klauspost/compress/zstd/internal/xxhash from github.com/klauspost/compress/zstd
|
||||||
L github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
L github.com/mdlayher/genetlink from tailscale.com/net/tstun
|
||||||
L 💣 github.com/mdlayher/netlink from github.com/google/nftables+
|
L 💣 github.com/mdlayher/netlink from github.com/jsimonetti/rtnetlink+
|
||||||
L 💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
L 💣 github.com/mdlayher/netlink/nlenc from github.com/jsimonetti/rtnetlink+
|
||||||
L github.com/mdlayher/netlink/nltest from github.com/google/nftables
|
|
||||||
LA 💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
LA 💣 github.com/mdlayher/socket from github.com/mdlayher/netlink+
|
||||||
LDW 💣 github.com/mitchellh/go-ps from tailscale.com/safesocket
|
LDW 💣 github.com/mitchellh/go-ps from tailscale.com/safesocket
|
||||||
DI github.com/prometheus-community/pro-bing from tailscale.com/wgengine/netstack
|
DI github.com/prometheus-community/pro-bing from tailscale.com/wgengine/netstack
|
||||||
@@ -145,8 +135,6 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
github.com/tailscale/goupnp/soap from github.com/tailscale/goupnp+
|
github.com/tailscale/goupnp/soap from github.com/tailscale/goupnp+
|
||||||
github.com/tailscale/goupnp/ssdp from github.com/tailscale/goupnp
|
github.com/tailscale/goupnp/ssdp from github.com/tailscale/goupnp
|
||||||
LDW github.com/tailscale/hujson from tailscale.com/ipn/conffile
|
LDW github.com/tailscale/hujson from tailscale.com/ipn/conffile
|
||||||
L 💣 github.com/tailscale/netlink from tailscale.com/util/linuxfw+
|
|
||||||
L 💣 github.com/tailscale/netlink/nl from github.com/tailscale/netlink
|
|
||||||
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
github.com/tailscale/peercred from tailscale.com/ipn/ipnauth
|
||||||
LDW github.com/tailscale/web-client-prebuilt from tailscale.com/client/web
|
LDW github.com/tailscale/web-client-prebuilt from tailscale.com/client/web
|
||||||
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/conn from github.com/tailscale/wireguard-go/device+
|
||||||
@@ -159,7 +147,6 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
github.com/tailscale/wireguard-go/rwcancel from github.com/tailscale/wireguard-go/device+
|
||||||
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
github.com/tailscale/wireguard-go/tai64n from github.com/tailscale/wireguard-go/device
|
||||||
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
💣 github.com/tailscale/wireguard-go/tun from github.com/tailscale/wireguard-go/device+
|
||||||
L github.com/vishvananda/netns from github.com/tailscale/netlink+
|
|
||||||
github.com/x448/float16 from github.com/fxamacker/cbor/v2
|
github.com/x448/float16 from github.com/fxamacker/cbor/v2
|
||||||
💣 go4.org/mem from tailscale.com/client/local+
|
💣 go4.org/mem from tailscale.com/client/local+
|
||||||
go4.org/netipx from tailscale.com/ipn/ipnlocal+
|
go4.org/netipx from tailscale.com/ipn/ipnlocal+
|
||||||
@@ -356,7 +343,6 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
💣 tailscale.com/util/hashx from tailscale.com/util/deephash
|
||||||
tailscale.com/util/httpm from tailscale.com/client/web+
|
tailscale.com/util/httpm from tailscale.com/client/web+
|
||||||
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
tailscale.com/util/lineiter from tailscale.com/hostinfo+
|
||||||
L tailscale.com/util/linuxfw from tailscale.com/wgengine/router
|
|
||||||
tailscale.com/util/mak from tailscale.com/appc+
|
tailscale.com/util/mak from tailscale.com/appc+
|
||||||
tailscale.com/util/multierr from tailscale.com/control/controlclient+
|
tailscale.com/util/multierr from tailscale.com/control/controlclient+
|
||||||
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
tailscale.com/util/must from tailscale.com/clientupdate/distsign+
|
||||||
@@ -405,7 +391,6 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
tailscale.com/wgengine/wgcfg/nmcfg from tailscale.com/ipn/ipnlocal
|
||||||
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
💣 tailscale.com/wgengine/wgint from tailscale.com/wgengine+
|
||||||
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
tailscale.com/wgengine/wglog from tailscale.com/wgengine
|
||||||
W 💣 tailscale.com/wgengine/winnet from tailscale.com/wgengine/router
|
|
||||||
golang.org/x/crypto/argon2 from tailscale.com/tka
|
golang.org/x/crypto/argon2 from tailscale.com/tka
|
||||||
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
golang.org/x/crypto/blake2b from golang.org/x/crypto/argon2+
|
||||||
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
golang.org/x/crypto/blake2s from github.com/tailscale/wireguard-go/device+
|
||||||
@@ -448,7 +433,7 @@ tailscale.com/tsnet dependencies: (generated by github.com/tailscale/depaware)
|
|||||||
golang.org/x/oauth2/internal from golang.org/x/oauth2+
|
golang.org/x/oauth2/internal from golang.org/x/oauth2+
|
||||||
golang.org/x/sync/errgroup from github.com/mdlayher/socket+
|
golang.org/x/sync/errgroup from github.com/mdlayher/socket+
|
||||||
golang.org/x/sys/cpu from github.com/tailscale/certstore+
|
golang.org/x/sys/cpu from github.com/tailscale/certstore+
|
||||||
LDAI golang.org/x/sys/unix from github.com/google/nftables+
|
LDAI golang.org/x/sys/unix from github.com/jsimonetti/rtnetlink/internal/unix+
|
||||||
W golang.org/x/sys/windows from github.com/dblohm7/wingoes+
|
W golang.org/x/sys/windows from github.com/dblohm7/wingoes+
|
||||||
W golang.org/x/sys/windows/registry from github.com/dblohm7/wingoes+
|
W golang.org/x/sys/windows/registry from github.com/dblohm7/wingoes+
|
||||||
W golang.org/x/sys/windows/svc from golang.org/x/sys/windows/svc/mgr+
|
W golang.org/x/sys/windows/svc from golang.org/x/sys/windows/svc/mgr+
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@@ -56,7 +55,7 @@ func TestConsolidateRoutes(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
cr := &consolidatingRouter{logf: log.Printf}
|
cr := &consolidatingRouter{logf: t.Logf}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
got := cr.consolidateRoutes(test.cfg)
|
got := cr.consolidateRoutes(test.cfg)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
|
* Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -19,6 +19,7 @@ import (
|
|||||||
"tailscale.com/net/tsaddr"
|
"tailscale.com/net/tsaddr"
|
||||||
"tailscale.com/net/tstun"
|
"tailscale.com/net/tstun"
|
||||||
"tailscale.com/util/multierr"
|
"tailscale.com/util/multierr"
|
||||||
|
"tailscale.com/wgengine/router"
|
||||||
"tailscale.com/wgengine/winnet"
|
"tailscale.com/wgengine/winnet"
|
||||||
|
|
||||||
ole "github.com/go-ole/go-ole"
|
ole "github.com/go-ole/go-ole"
|
||||||
@@ -246,7 +247,7 @@ var networkCategoryWarnable = health.Register(&health.Warnable{
|
|||||||
MapDebugFlag: "warn-network-category-unhealthy",
|
MapDebugFlag: "warn-network-category-unhealthy",
|
||||||
})
|
})
|
||||||
|
|
||||||
func configureInterface(cfg *Config, tun *tun.NativeTun, ht *health.Tracker) (retErr error) {
|
func configureInterface(cfg *router.Config, tun *tun.NativeTun, ht *health.Tracker) (retErr error) {
|
||||||
var mtu = tstun.DefaultTUNMTU()
|
var mtu = tstun.DefaultTUNMTU()
|
||||||
luid := winipcfg.LUID(tun.LUID())
|
luid := winipcfg.LUID(tun.LUID())
|
||||||
iface, err := interfaceFromLUID(luid,
|
iface, err := interfaceFromLUID(luid,
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
15
wgengine/router/osrouter/osrouter.go
Normal file
15
wgengine/router/osrouter/osrouter.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
// Package osrouter contains OS-specific router implementations.
|
||||||
|
// This package has no API; it exists purely to import
|
||||||
|
// for the side effect of it registering itself with the wgengine/router
|
||||||
|
// package.
|
||||||
|
package osrouter
|
||||||
|
|
||||||
|
import "tailscale.com/wgengine/router"
|
||||||
|
|
||||||
|
// shutdownConfig is a routing configuration that removes all router
|
||||||
|
// state from the OS. It's the config used when callers pass in a nil
|
||||||
|
// Config.
|
||||||
|
var shutdownConfig router.Config
|
||||||
15
wgengine/router/osrouter/osrouter_test.go
Normal file
15
wgengine/router/osrouter/osrouter_test.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
package osrouter
|
||||||
|
|
||||||
|
import "net/netip"
|
||||||
|
|
||||||
|
//lint:ignore U1000 used in Windows/Linux tests only
|
||||||
|
func mustCIDRs(ss ...string) []netip.Prefix {
|
||||||
|
var ret []netip.Prefix
|
||||||
|
for _, s := range ss {
|
||||||
|
ret = append(ret, netip.MustParsePrefix(s))
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
@@ -1,23 +1,18 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/tailscale/wireguard-go/tun"
|
|
||||||
"tailscale.com/health"
|
|
||||||
"tailscale.com/net/netmon"
|
"tailscale.com/net/netmon"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/util/eventbus"
|
"tailscale.com/wgengine/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
// For now this router only supports the userspace WireGuard implementations.
|
func init() {
|
||||||
//
|
router.HookCleanUp.Set(func(logf logger.Logf, netMon *netmon.Monitor, ifName string) {
|
||||||
// Work is currently underway for an in-kernel FreeBSD implementation of wireguard
|
cleanUp(logf, ifName)
|
||||||
// https://svnweb.freebsd.org/base?view=revision&revision=357986
|
})
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (Router, error) {
|
|
||||||
return newUserspaceBSDRouter(logf, tundev, netMon, health)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func cleanUp(logf logger.Logf, interfaceName string) {
|
func cleanUp(logf logger.Logf, interfaceName string) {
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
//go:build !android
|
//go:build !android
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -34,8 +34,18 @@ import (
|
|||||||
"tailscale.com/util/linuxfw"
|
"tailscale.com/util/linuxfw"
|
||||||
"tailscale.com/util/multierr"
|
"tailscale.com/util/multierr"
|
||||||
"tailscale.com/version/distro"
|
"tailscale.com/version/distro"
|
||||||
|
"tailscale.com/wgengine/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
router.HookNewUserspaceRouter.Set(func(opts router.NewOpts) (router.Router, error) {
|
||||||
|
return newUserspaceRouter(opts.Logf, opts.Tun, opts.NetMon, opts.Health, opts.Bus)
|
||||||
|
})
|
||||||
|
router.HookCleanUp.Set(func(logf logger.Logf, netMon *netmon.Monitor, ifName string) {
|
||||||
|
cleanUp(logf, ifName)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
var getDistroFunc = distro.Get
|
var getDistroFunc = distro.Get
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -81,7 +91,7 @@ type linuxRouter struct {
|
|||||||
magicsockPortV6 uint16
|
magicsockPortV6 uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tunDev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (Router, error) {
|
func newUserspaceRouter(logf logger.Logf, tunDev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (router.Router, error) {
|
||||||
tunname, err := tunDev.Name()
|
tunname, err := tunDev.Name()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -94,7 +104,7 @@ func newUserspaceRouter(logf logger.Logf, tunDev tun.Device, netMon *netmon.Moni
|
|||||||
return newUserspaceRouterAdvanced(logf, tunname, netMon, cmd, health, bus)
|
return newUserspaceRouterAdvanced(logf, tunname, netMon, cmd, health, bus)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUserspaceRouterAdvanced(logf logger.Logf, tunname string, netMon *netmon.Monitor, cmd commandRunner, health *health.Tracker, bus *eventbus.Bus) (Router, error) {
|
func newUserspaceRouterAdvanced(logf logger.Logf, tunname string, netMon *netmon.Monitor, cmd commandRunner, health *health.Tracker, bus *eventbus.Bus) (router.Router, error) {
|
||||||
r := &linuxRouter{
|
r := &linuxRouter{
|
||||||
logf: logf,
|
logf: logf,
|
||||||
tunname: tunname,
|
tunname: tunname,
|
||||||
@@ -401,7 +411,7 @@ func (r *linuxRouter) setupNetfilter(kind string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set implements the Router interface.
|
// Set implements the Router interface.
|
||||||
func (r *linuxRouter) Set(cfg *Config) error {
|
func (r *linuxRouter) Set(cfg *router.Config) error {
|
||||||
var errs []error
|
var errs []error
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
cfg = &shutdownConfig
|
cfg = &shutdownConfig
|
||||||
@@ -488,7 +498,7 @@ var dockerStatefulFilteringWarnable = health.Register(&health.Warnable{
|
|||||||
Text: health.StaticMessage("Stateful filtering is enabled and Docker was detected; this may prevent Docker containers on this host from resolving DNS and connecting to Tailscale nodes. See https://tailscale.com/s/stateful-docker"),
|
Text: health.StaticMessage("Stateful filtering is enabled and Docker was detected; this may prevent Docker containers on this host from resolving DNS and connecting to Tailscale nodes. See https://tailscale.com/s/stateful-docker"),
|
||||||
})
|
})
|
||||||
|
|
||||||
func (r *linuxRouter) updateStatefulFilteringWithDockerWarning(cfg *Config) {
|
func (r *linuxRouter) updateStatefulFilteringWithDockerWarning(cfg *router.Config) {
|
||||||
// If stateful filtering is disabled, clear the warning.
|
// If stateful filtering is disabled, clear the warning.
|
||||||
if !r.statefulFiltering {
|
if !r.statefulFiltering {
|
||||||
r.health.SetHealthy(dockerStatefulFilteringWarnable)
|
r.health.SetHealthy(dockerStatefulFilteringWarnable)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -32,8 +32,11 @@ import (
|
|||||||
"tailscale.com/util/eventbus/eventbustest"
|
"tailscale.com/util/eventbus/eventbustest"
|
||||||
"tailscale.com/util/linuxfw"
|
"tailscale.com/util/linuxfw"
|
||||||
"tailscale.com/version/distro"
|
"tailscale.com/version/distro"
|
||||||
|
"tailscale.com/wgengine/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Config = router.Config
|
||||||
|
|
||||||
func TestRouterStates(t *testing.T) {
|
func TestRouterStates(t *testing.T) {
|
||||||
basic := `
|
basic := `
|
||||||
ip rule add -4 pref 5210 fwmark 0x80000/0xff0000 table main
|
ip rule add -4 pref 5210 fwmark 0x80000/0xff0000 table main
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -17,10 +17,18 @@ import (
|
|||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/util/eventbus"
|
"tailscale.com/util/eventbus"
|
||||||
"tailscale.com/util/set"
|
"tailscale.com/util/set"
|
||||||
|
"tailscale.com/wgengine/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
// For now this router only supports the WireGuard userspace implementation.
|
func init() {
|
||||||
// There is an experimental kernel version in the works for OpenBSD:
|
router.HookNewUserspaceRouter.Set(func(opts router.NewOpts) (router.Router, error) {
|
||||||
|
return newUserspaceRouter(opts.Logf, opts.Tun, opts.NetMon, opts.Health, opts.Bus)
|
||||||
|
})
|
||||||
|
router.HookCleanUp.Set(func(logf logger.Logf, netMon *netmon.Monitor, ifName string) {
|
||||||
|
cleanUp(logf, ifName)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// https://git.zx2c4.com/wireguard-openbsd.
|
// https://git.zx2c4.com/wireguard-openbsd.
|
||||||
|
|
||||||
type openbsdRouter struct {
|
type openbsdRouter struct {
|
||||||
@@ -32,7 +40,7 @@ type openbsdRouter struct {
|
|||||||
routes set.Set[netip.Prefix]
|
routes set.Set[netip.Prefix]
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (Router, error) {
|
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (router.Router, error) {
|
||||||
tunname, err := tundev.Name()
|
tunname, err := tundev.Name()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -68,7 +76,7 @@ func inet(p netip.Prefix) string {
|
|||||||
return "inet"
|
return "inet"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *openbsdRouter) Set(cfg *Config) error {
|
func (r *openbsdRouter) Set(cfg *router.Config) error {
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
cfg = &shutdownConfig
|
cfg = &shutdownConfig
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
@@ -15,10 +15,19 @@ import (
|
|||||||
"tailscale.com/health"
|
"tailscale.com/health"
|
||||||
"tailscale.com/net/netmon"
|
"tailscale.com/net/netmon"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/util/eventbus"
|
"tailscale.com/wgengine/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (Router, error) {
|
func init() {
|
||||||
|
router.HookCleanUp.Set(func(logf logger.Logf, netMon *netmon.Monitor, ifName string) {
|
||||||
|
cleanAllTailscaleRoutes(logf)
|
||||||
|
})
|
||||||
|
router.HookNewUserspaceRouter.Set(func(opts router.NewOpts) (router.Router, error) {
|
||||||
|
return newUserspaceRouter(opts.Logf, opts.Tun, opts.NetMon)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor) (router.Router, error) {
|
||||||
r := &plan9Router{
|
r := &plan9Router{
|
||||||
logf: logf,
|
logf: logf,
|
||||||
tundev: tundev,
|
tundev: tundev,
|
||||||
@@ -39,7 +48,7 @@ func (r *plan9Router) Up() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *plan9Router) Set(cfg *Config) error {
|
func (r *plan9Router) Set(cfg *router.Config) error {
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
cleanAllTailscaleRoutes(r.logf)
|
cleanAllTailscaleRoutes(r.logf)
|
||||||
return nil
|
return nil
|
||||||
@@ -118,10 +127,6 @@ func (r *plan9Router) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func cleanUp(logf logger.Logf, _ string) {
|
|
||||||
cleanAllTailscaleRoutes(logf)
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanAllTailscaleRoutes(logf logger.Logf) {
|
func cleanAllTailscaleRoutes(logf logger.Logf) {
|
||||||
routes, err := os.OpenFile("/net/iproute", os.O_RDWR, 0)
|
routes, err := os.OpenFile("/net/iproute", os.O_RDWR, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
//go:build darwin || freebsd
|
//go:build darwin || freebsd
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -19,8 +19,15 @@ import (
|
|||||||
"tailscale.com/net/tsaddr"
|
"tailscale.com/net/tsaddr"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/version"
|
"tailscale.com/version"
|
||||||
|
"tailscale.com/wgengine/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
router.HookNewUserspaceRouter.Set(func(opts router.NewOpts) (router.Router, error) {
|
||||||
|
return newUserspaceBSDRouter(opts.Logf, opts.Tun, opts.NetMon, opts.Health)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
type userspaceBSDRouter struct {
|
type userspaceBSDRouter struct {
|
||||||
logf logger.Logf
|
logf logger.Logf
|
||||||
netMon *netmon.Monitor
|
netMon *netmon.Monitor
|
||||||
@@ -30,7 +37,7 @@ type userspaceBSDRouter struct {
|
|||||||
routes map[netip.Prefix]bool
|
routes map[netip.Prefix]bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUserspaceBSDRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker) (Router, error) {
|
func newUserspaceBSDRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker) (router.Router, error) {
|
||||||
tunname, err := tundev.Name()
|
tunname, err := tundev.Name()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -99,7 +106,7 @@ func inet(p netip.Prefix) string {
|
|||||||
return "inet"
|
return "inet"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *userspaceBSDRouter) Set(cfg *Config) (reterr error) {
|
func (r *userspaceBSDRouter) Set(cfg *router.Config) (reterr error) {
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
cfg = &shutdownConfig
|
cfg = &shutdownConfig
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
@@ -28,8 +28,15 @@ import (
|
|||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/util/backoff"
|
"tailscale.com/util/backoff"
|
||||||
"tailscale.com/util/eventbus"
|
"tailscale.com/util/eventbus"
|
||||||
|
"tailscale.com/wgengine/router"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
router.HookNewUserspaceRouter.Set(func(opts router.NewOpts) (router.Router, error) {
|
||||||
|
return newUserspaceRouter(opts.Logf, opts.Tun, opts.NetMon, opts.Health, opts.Bus)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
type winRouter struct {
|
type winRouter struct {
|
||||||
logf func(fmt string, args ...any)
|
logf func(fmt string, args ...any)
|
||||||
netMon *netmon.Monitor // may be nil
|
netMon *netmon.Monitor // may be nil
|
||||||
@@ -39,7 +46,7 @@ type winRouter struct {
|
|||||||
firewall *firewallTweaker
|
firewall *firewallTweaker
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (Router, error) {
|
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (router.Router, error) {
|
||||||
nativeTun := tundev.(*tun.NativeTun)
|
nativeTun := tundev.(*tun.NativeTun)
|
||||||
luid := winipcfg.LUID(nativeTun.LUID())
|
luid := winipcfg.LUID(nativeTun.LUID())
|
||||||
guid, err := luid.GUID()
|
guid, err := luid.GUID()
|
||||||
@@ -73,7 +80,7 @@ func (r *winRouter) Up() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *winRouter) Set(cfg *Config) error {
|
func (r *winRouter) Set(cfg *router.Config) error {
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
cfg = &shutdownConfig
|
cfg = &shutdownConfig
|
||||||
}
|
}
|
||||||
@@ -124,10 +131,6 @@ func (r *winRouter) Close() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func cleanUp(logf logger.Logf, interfaceName string) {
|
|
||||||
// Nothing to do here.
|
|
||||||
}
|
|
||||||
|
|
||||||
// firewallTweaker changes the Windows firewall. Normally this wouldn't be so complicated,
|
// firewallTweaker changes the Windows firewall. Normally this wouldn't be so complicated,
|
||||||
// but it can be REALLY SLOW to change the Windows firewall for reasons not understood.
|
// but it can be REALLY SLOW to change the Windows firewall for reasons not understood.
|
||||||
// Like 4 minutes slow. But usually it's tens of milliseconds.
|
// Like 4 minutes slow. But usually it's tens of milliseconds.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
//go:build linux
|
//go:build linux
|
||||||
|
|
||||||
package router
|
package osrouter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@@ -6,10 +6,15 @@
|
|||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"runtime"
|
||||||
|
|
||||||
"github.com/tailscale/wireguard-go/tun"
|
"github.com/tailscale/wireguard-go/tun"
|
||||||
|
"tailscale.com/feature"
|
||||||
|
"tailscale.com/feature/buildfeatures"
|
||||||
"tailscale.com/health"
|
"tailscale.com/health"
|
||||||
"tailscale.com/net/netmon"
|
"tailscale.com/net/netmon"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
@@ -41,6 +46,22 @@ type Router interface {
|
|||||||
Close() error
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewOpts are the options passed to the NewUserspaceRouter hook.
|
||||||
|
type NewOpts struct {
|
||||||
|
Logf logger.Logf // required
|
||||||
|
Tun tun.Device // required
|
||||||
|
NetMon *netmon.Monitor // optional
|
||||||
|
Health *health.Tracker // required (but TODO: support optional later)
|
||||||
|
Bus *eventbus.Bus // required
|
||||||
|
}
|
||||||
|
|
||||||
|
// HookNewUserspaceRouter is the registration point for router implementations
|
||||||
|
// to register a constructor for userspace routers. It's meant for implementations
|
||||||
|
// in wgengine/router/osrouter.
|
||||||
|
//
|
||||||
|
// If no implementation is registered, [New] will return an error.
|
||||||
|
var HookNewUserspaceRouter feature.Hook[func(NewOpts) (Router, error)]
|
||||||
|
|
||||||
// New returns a new Router for the current platform, using the
|
// New returns a new Router for the current platform, using the
|
||||||
// provided tun device.
|
// provided tun device.
|
||||||
//
|
//
|
||||||
@@ -50,14 +71,33 @@ func New(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor,
|
|||||||
health *health.Tracker, bus *eventbus.Bus,
|
health *health.Tracker, bus *eventbus.Bus,
|
||||||
) (Router, error) {
|
) (Router, error) {
|
||||||
logf = logger.WithPrefix(logf, "router: ")
|
logf = logger.WithPrefix(logf, "router: ")
|
||||||
return newUserspaceRouter(logf, tundev, netMon, health, bus)
|
if f, ok := HookNewUserspaceRouter.GetOk(); ok {
|
||||||
|
return f(NewOpts{
|
||||||
|
Logf: logf,
|
||||||
|
Tun: tundev,
|
||||||
|
NetMon: netMon,
|
||||||
|
Health: health,
|
||||||
|
Bus: bus,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if !buildfeatures.HasOSRouter {
|
||||||
|
return nil, errors.New("router: tailscaled was built without OSRouter support")
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("unsupported OS %q", runtime.GOOS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HookCleanUp is the optional registration point for router implementations
|
||||||
|
// to register a cleanup function for [CleanUp] to use. It's meant for
|
||||||
|
// implementations in wgengine/router/osrouter.
|
||||||
|
var HookCleanUp feature.Hook[func(_ logger.Logf, _ *netmon.Monitor, ifName string)]
|
||||||
|
|
||||||
// CleanUp restores the system network configuration to its original state
|
// CleanUp restores the system network configuration to its original state
|
||||||
// in case the Tailscale daemon terminated without closing the router.
|
// in case the Tailscale daemon terminated without closing the router.
|
||||||
// No other state needs to be instantiated before this runs.
|
// No other state needs to be instantiated before this runs.
|
||||||
func CleanUp(logf logger.Logf, netMon *netmon.Monitor, interfaceName string) {
|
func CleanUp(logf logger.Logf, netMon *netmon.Monitor, interfaceName string) {
|
||||||
cleanUp(logf, interfaceName)
|
if f, ok := HookCleanUp.GetOk(); ok {
|
||||||
|
f(logf, netMon, interfaceName)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Config is the subset of Tailscale configuration that is relevant to
|
// Config is the subset of Tailscale configuration that is relevant to
|
||||||
@@ -106,8 +146,3 @@ func (a *Config) Equal(b *Config) bool {
|
|||||||
}
|
}
|
||||||
return reflect.DeepEqual(a, b)
|
return reflect.DeepEqual(a, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
// shutdownConfig is a routing configuration that removes all router
|
|
||||||
// state from the OS. It's the config used when callers pass in a nil
|
|
||||||
// Config.
|
|
||||||
var shutdownConfig = Config{}
|
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
//go:build android
|
|
||||||
|
|
||||||
package router
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/tailscale/wireguard-go/tun"
|
|
||||||
"tailscale.com/health"
|
|
||||||
"tailscale.com/net/netmon"
|
|
||||||
"tailscale.com/types/logger"
|
|
||||||
"tailscale.com/util/eventbus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tunDev tun.Device, netMon *netmon.Monitor, health *health.Tracker, _ *eventbus.Bus) (Router, error) {
|
|
||||||
// Note, this codepath is _not_ used when building the android app
|
|
||||||
// from github.com/tailscale/tailscale-android. The android app
|
|
||||||
// constructs its own wgengine with a custom router implementation
|
|
||||||
// that plugs into Android networking APIs.
|
|
||||||
//
|
|
||||||
// In practice, the only place this fake router gets used is when
|
|
||||||
// you build a tsnet app for android, in which case we don't want
|
|
||||||
// to touch the OS network stack and a no-op router is correct.
|
|
||||||
return NewFake(logf), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanUp(logf logger.Logf, interfaceName string) {
|
|
||||||
// Nothing to do here.
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
package router
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/tailscale/wireguard-go/tun"
|
|
||||||
"tailscale.com/health"
|
|
||||||
"tailscale.com/net/netmon"
|
|
||||||
"tailscale.com/types/logger"
|
|
||||||
"tailscale.com/util/eventbus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tundev tun.Device, netMon *netmon.Monitor, health *health.Tracker, bus *eventbus.Bus) (Router, error) {
|
|
||||||
return newUserspaceBSDRouter(logf, tundev, netMon, health)
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanUp(logger.Logf, string) {
|
|
||||||
// Nothing to do.
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
// Copyright (c) Tailscale Inc & AUTHORS
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
//go:build !windows && !linux && !darwin && !openbsd && !freebsd && !plan9
|
|
||||||
|
|
||||||
package router
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"runtime"
|
|
||||||
|
|
||||||
"github.com/tailscale/wireguard-go/tun"
|
|
||||||
"tailscale.com/health"
|
|
||||||
"tailscale.com/net/netmon"
|
|
||||||
"tailscale.com/types/logger"
|
|
||||||
"tailscale.com/util/eventbus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func newUserspaceRouter(logf logger.Logf, tunDev tun.Device, netMon *netmon.Monitor, health *health.Tracker, _ *eventbus.Bus) (Router, error) {
|
|
||||||
return nil, fmt.Errorf("unsupported OS %q", runtime.GOOS)
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanUp(logf logger.Logf, interfaceName string) {
|
|
||||||
// Nothing to do here.
|
|
||||||
}
|
|
||||||
@@ -11,15 +11,6 @@ import (
|
|||||||
"tailscale.com/types/preftype"
|
"tailscale.com/types/preftype"
|
||||||
)
|
)
|
||||||
|
|
||||||
//lint:ignore U1000 used in Windows/Linux tests only
|
|
||||||
func mustCIDRs(ss ...string) []netip.Prefix {
|
|
||||||
var ret []netip.Prefix
|
|
||||||
for _, s := range ss {
|
|
||||||
ret = append(ret, netip.MustParsePrefix(s))
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigEqual(t *testing.T) {
|
func TestConfigEqual(t *testing.T) {
|
||||||
testedFields := []string{
|
testedFields := []string{
|
||||||
"LocalAddrs", "Routes", "LocalRoutes", "NewMTU",
|
"LocalAddrs", "Routes", "LocalRoutes", "NewMTU",
|
||||||
|
|||||||
Reference in New Issue
Block a user