Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrEngineClosing = errors.New("engine closing; no status")
var ErrNoChanges = errors.New("no changes made to Engine config")
ErrNoChanges is returned by Engine.Reconfig if no changes were made.
Functions ¶
This section is empty.
Types ¶
type BIRDClient ¶
type BIRDClient interface { EnableProtocol(proto string) error DisableProtocol(proto string) error Close() error }
BIRDClient handles communication with the BIRD Internet Routing Daemon.
type Config ¶
type Config struct { // Tun is the device used by the Engine to exchange packets with // the OS. // If nil, a fake Device that does nothing is used. Tun tun.Device // IsTAP is whether Tun is actually a TAP (Layer 2) device that'll // require ethernet headers. IsTAP bool // Router interfaces the Engine to the OS network stack. // If nil, a fake Router that does nothing is used. Router router.Router // DNS interfaces the Engine to the OS DNS resolver configuration. // If nil, a fake OSConfigurator that does nothing is used. DNS dns.OSConfigurator // NetMon optionally provides an existing network monitor to re-use. // If nil, a new network monitor is created. NetMon *netmon.Monitor // Dialer is the dialer to use for outbound connections. // If nil, a new Dialer is created Dialer *tsdial.Dialer // ListenPort is the port on which the engine will listen. // If zero, a port is automatically selected. ListenPort uint16 // RespondToPing determines whether this engine should internally // reply to ICMP pings, without involving the OS. // Used in "fake" mode for development. RespondToPing bool // BIRDClient, if non-nil, will be used to configure BIRD whenever // this node is a primary subnet router. BIRDClient BIRDClient // SetSubsystem, if non-nil, is called for each new subsystem created, just before a successful return. SetSubsystem func(any) }
Config is the engine configuration.
type Engine ¶
type Engine interface { // Reconfig reconfigures WireGuard and makes sure it's running. // This also handles setting up any kernel routes. // // This is called whenever tailcontrol (the control plane) // sends an updated network map. // // The returned error is ErrNoChanges if no changes were made. Reconfig(*wgcfg.Config, *router.Config, *dns.Config) error // PeerForIP returns the node to which the provided IP routes, // if any. If none is found, (nil, false) is returned. PeerForIP(netip.Addr) (_ PeerForIP, ok bool) // GetFilter returns the current packet filter, if any. GetFilter() *filter.Filter // SetFilter updates the packet filter. SetFilter(*filter.Filter) // SetStatusCallback sets the function to call when the // WireGuard status changes. SetStatusCallback(StatusCallback) // RequestStatus requests a WireGuard status update right // away, sent to the callback registered via SetStatusCallback. RequestStatus() // Close shuts down this wireguard instance, remove any routes // it added, etc. To bring it up again later, you'll need a // new Engine. Close() // Wait waits until the Engine's Close method is called or the // engine aborts with an error. You don't have to call this. // TODO: return an error? Wait() // LinkChange informs the engine that the system network // link has changed. // // The isExpensive parameter is not used. // // LinkChange should be called whenever something changed with // the network, no matter how minor. // // Deprecated: don't use this method. It was removed shortly // before the Tailscale 1.6 release when we remembered that // Android doesn't use the Linux-based network monitor and has // its own mechanism that uses LinkChange. Android is the only // caller of this method now. Don't add more. LinkChange(isExpensive bool) // SetDERPMap controls which (if any) DERP servers are used. // If nil, DERP is disabled. It starts disabled until a DERP map // is configured. SetDERPMap(*tailcfg.DERPMap) // SetNetworkMap informs the engine of the latest network map // from the server. The network map's DERPMap field should be // ignored as as it might be disabled; get it from SetDERPMap // instead. // The network map should only be read from. SetNetworkMap(*netmap.NetworkMap) // AddNetworkMapCallback adds a function to a list of callbacks // that are called when the network map updates. It returns a // function that when called would remove the function from the // list of callbacks. AddNetworkMapCallback(NetworkMapCallback) (removeCallback func()) // SetNetInfoCallback sets the function to call when a // new NetInfo summary is available. SetNetInfoCallback(NetInfoCallback) // DiscoPublicKey gets the public key used for path discovery // messages. DiscoPublicKey() key.DiscoPublic // UpdateStatus populates the network state using the provided // status builder. UpdateStatus(*ipnstate.StatusBuilder) // Ping is a request to start a ping of the given message size to the peer // handling the given IP, then call cb with its ping latency & method. // // If size is zero too small, it is ignored. See tailscale.PingOpts for details. Ping(ip netip.Addr, pingType tailcfg.PingType, size int, cb func(*ipnstate.PingResult)) // RegisterIPPortIdentity registers a given node (identified by its // Tailscale IP) as temporarily having the given IP:port for whois lookups. // The IP:port is generally a localhost IP and an ephemeral port, used // while proxying connections to localhost when tailscaled is running // in netstack mode. RegisterIPPortIdentity(netip.AddrPort, netip.Addr) // UnregisterIPPortIdentity removes a temporary IP:port registration // made previously by RegisterIPPortIdentity. UnregisterIPPortIdentity(netip.AddrPort) // WhoIsIPPort looks up an IP:port in the temporary registrations, // and returns a matching Tailscale IP, if it exists. WhoIsIPPort(netip.AddrPort) (netip.Addr, bool) // InstallCaptureHook registers a function to be called to capture // packets traversing the data path. The hook can be uninstalled by // calling this function with a nil value. InstallCaptureHook(capture.Callback) }
Engine is the Tailscale WireGuard engine interface.
func NewFakeUserspaceEngine ¶
NewFakeUserspaceEngine returns a new userspace engine for testing.
The opts may contain the following types:
- int or uint16: to set the ListenPort.
func NewUserspaceEngine ¶
NewUserspaceEngine creates the named tun device and returns a Tailscale Engine running on it.
func NewWatchdog ¶
NewWatchdog wraps an Engine and makes sure that all methods complete within a reasonable amount of time.
If they do not, the watchdog crashes the process.
type NetInfoCallback ¶
NetInfoCallback is the type used by Engine.SetNetInfoCallback.
type NetworkMapCallback ¶
type NetworkMapCallback func(*netmap.NetworkMap)
NetworkMapCallback is the type used by callbacks that hook into network map updates.
type PeerForIP ¶
type PeerForIP struct { // Node is the matched node. It's always a valid value when // Engine.PeerForIP returns ok==true. Node tailcfg.NodeView // IsSelf is whether the Node is the local process. IsSelf bool // Route is the route that matched the IP provided // to Engine.PeerForIP. Route netip.Prefix }
PeerForIP is the type returned by Engine.PeerForIP.
type Status ¶
type Status struct { AsOf time.Time // the time at which the status was calculated Peers []ipnstate.PeerStatusLite LocalAddrs []tailcfg.Endpoint // the set of possible endpoints for the magic conn DERPs int // number of active DERP connections }
Status is the Engine status.
TODO(bradfitz): remove this, subset of ipnstate? Need to migrate users.
type StatusCallback ¶
StatusCallback is the type of status callbacks used by Engine.SetStatusCallback.
Exactly one of Status or error is non-nil.
Directories ¶
Path | Synopsis |
---|---|
Create two wgengine instances and pass data through them, measuring throughput, latency, and packet loss.
|
Create two wgengine instances and pass data through them, measuring throughput, latency, and packet loss. |
Package capture formats packet logging into a debug pcap stream.
|
Package capture formats packet logging into a debug pcap stream. |
Package filter is a stateful packet filter.
|
Package filter is a stateful packet filter. |
Package magicsock implements a socket that can change its communication path while in use, actively searching for the best way to communicate.
|
Package magicsock implements a socket that can change its communication path while in use, actively searching for the best way to communicate. |
Package netlog provides a logger that monitors a TUN device and periodically records any traffic into a log stream.
|
Package netlog provides a logger that monitors a TUN device and periodically records any traffic into a log stream. |
Package netstack wires up gVisor's netstack into Tailscale.
|
Package netstack wires up gVisor's netstack into Tailscale. |
Package router presents an interface to manipulate the host network stack's state.
|
Package router presents an interface to manipulate the host network stack's state. |
Package wgcfg has types and a parser for representing WireGuard config.
|
Package wgcfg has types and a parser for representing WireGuard config. |
nmcfg
Package nmcfg converts a controlclient.NetMap into a wgcfg config.
|
Package nmcfg converts a controlclient.NetMap into a wgcfg config. |
Package wgint provides somewhat shady access to wireguard-go internals that don't (yet) have public APIs.
|
Package wgint provides somewhat shady access to wireguard-go internals that don't (yet) have public APIs. |
Package wglog contains logging helpers for wireguard-go.
|
Package wglog contains logging helpers for wireguard-go. |