Files
gluetun/internal/routing/routing.go
Quentin McGaw 38ddcfa756 chore(netlink): define own types with minimal fields
- Allow to swap `github.com/vishvananda/netlink`
- Allow to add build tags for each platform
- One step closer to development on non-Linux platforms
2023-05-29 06:44:58 +00:00

62 lines
1.4 KiB
Go

package routing
import (
"net/netip"
"sync"
"github.com/qdm12/gluetun/internal/netlink"
)
type NetLinker interface {
Addresser
Router
Ruler
Linker
IsWireguardSupported() (ok bool, err error)
}
type Addresser interface {
AddrList(link netlink.Link, family int) (
addresses []netlink.Addr, err error)
AddrReplace(link netlink.Link, addr netlink.Addr) error
}
type Router interface {
RouteList(link *netlink.Link, family int) (
routes []netlink.Route, err error)
RouteAdd(route netlink.Route) error
RouteDel(route netlink.Route) error
RouteReplace(route netlink.Route) error
}
type Ruler interface {
RuleList(family int) (rules []netlink.Rule, err error)
RuleAdd(rule netlink.Rule) error
RuleDel(rule netlink.Rule) error
}
type Linker interface {
LinkList() (links []netlink.Link, err error)
LinkByName(name string) (link netlink.Link, err error)
LinkByIndex(index int) (link netlink.Link, err error)
LinkAdd(link netlink.Link) (linkIndex int, err error)
LinkDel(link netlink.Link) (err error)
LinkSetUp(link netlink.Link) (linkIndex int, err error)
LinkSetDown(link netlink.Link) (err error)
}
type Routing struct {
netLinker NetLinker
logger Logger
outboundSubnets []netip.Prefix
stateMutex sync.RWMutex
}
// New creates a new routing instance.
func New(netLinker NetLinker, logger Logger) *Routing {
return &Routing{
netLinker: netLinker,
logger: logger,
}
}