Documentation ¶
Overview ¶
Package router presents an interface to manipulate the host network stack's state.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var SetRoutesFunc func(cfg *Config) error
SetRoutesFunc applies the given router settings to the OS network stack. cfg is guaranteed to be non-nil.
This is logically part of the router_darwin.go implementation, and should not be used on other platforms.
The code to reconfigure the network stack on MacOS and iOS is in the non-open `ipn-go-bridge` package, which bridges between the Go and Swift pieces of the application. The ipn-go-bridge sets SetRoutesFunc at startup.
So why isn't this in router_darwin.go? Because in the non-oss repository, we build ipn-go-bridge when developing on Linux as well as MacOS, so that we don't have to wait until the Mac CI to discover that we broke it. So this one definition needs to exist in both the darwin and linux builds. Hence this file and build tag.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { LocalAddrs []netaddr.IPPrefix DNS []netaddr.IP DNSDomains []string Routes []netaddr.IPPrefix // routes to point into the Tailscale interface SubnetRoutes []netaddr.IPPrefix // subnets being advertised to other Tailscale nodes SNATSubnetRoutes bool // SNAT traffic to local subnets NetfilterMode NetfilterMode // how much to manage netfilter rules }
Config is the subset of Tailscale configuration that is relevant to the OS's network stack.
type NetfilterMode ¶
type NetfilterMode int
NetfilterMode is the firewall management mode to use when programming the Linux network stack.
const ( NetfilterOff NetfilterMode = iota // remove all tailscale netfilter state NetfilterNoDivert // manage tailscale chains, but don't call them NetfilterOn // manage tailscale chains and call them from main chains )
func (NetfilterMode) String ¶
func (m NetfilterMode) String() string
type Router ¶
type Router interface { // Up brings the router up. Up() error // Set updates the OS network stack with a new Config. It may be // called multiple times with identical Configs, which the // implementation should handle gracefully. Set(*Config) error // Close closes the router. Close() error }
Router is responsible for managing the system network stack.
There is typically only one instance of this interface per process.