mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-26 03:25:35 +00:00
b01db109f5
Signed-off-by: David Anderson <danderson@tailscale.com>
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
// 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 router presents an interface to manipulate the host network
|
|
// stack's state.
|
|
package router
|
|
|
|
import (
|
|
"github.com/tailscale/wireguard-go/device"
|
|
"github.com/tailscale/wireguard-go/tun"
|
|
"inet.af/netaddr"
|
|
"tailscale.com/types/logger"
|
|
)
|
|
|
|
// Router is responsible for managing the system network stack.
|
|
//
|
|
// There is typically only one instance of this interface per process.
|
|
type Router interface {
|
|
// Up brings the router up.
|
|
Up() error
|
|
|
|
// Set updates the OS network stack with new settings. It may be
|
|
// called multiple times with identical Settings, which the
|
|
// implementation should handle gracefully.
|
|
Set(Settings) error
|
|
|
|
// Close closes the router.
|
|
Close() error
|
|
}
|
|
|
|
// New returns a new Router for the current platform, using the
|
|
// provided tun device.
|
|
func New(logf logger.Logf, wgdev *device.Device, tundev tun.Device) (Router, error) {
|
|
return newUserspaceRouter(logf, wgdev, tundev)
|
|
}
|
|
|
|
// Settings is the subset of Tailscale configuration that is relevant
|
|
// to the OS's network stack.
|
|
type Settings 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
|
|
}
|