mirror of
https://github.com/qdm12/gluetun.git
synced 2025-12-11 13:56:50 -06:00
61 lines
1.4 KiB
Go
61 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(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,
|
|
}
|
|
}
|