2020-04-12 08:55:13 -04:00
|
|
|
package routing
|
|
|
|
|
|
|
|
|
|
import (
|
2023-04-27 13:41:05 +00:00
|
|
|
"net/netip"
|
2020-10-29 19:23:44 -04:00
|
|
|
"sync"
|
2020-04-12 08:55:13 -04:00
|
|
|
|
2021-08-23 20:56:10 +00:00
|
|
|
"github.com/qdm12/gluetun/internal/netlink"
|
2020-04-12 08:55:13 -04:00
|
|
|
)
|
|
|
|
|
|
2022-06-11 01:34:30 +00:00
|
|
|
type NetLinker interface {
|
2022-08-24 19:41:26 +00:00
|
|
|
Addresser
|
|
|
|
|
Router
|
|
|
|
|
Ruler
|
|
|
|
|
Linker
|
|
|
|
|
IsWireguardSupported() (ok bool, err error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Addresser interface {
|
2022-06-11 01:34:30 +00:00
|
|
|
AddrList(link netlink.Link, family int) (
|
|
|
|
|
addresses []netlink.Addr, err error)
|
2023-05-29 06:44:58 +00:00
|
|
|
AddrReplace(link netlink.Link, addr netlink.Addr) error
|
2022-08-24 19:41:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Router interface {
|
2023-05-29 06:44:58 +00:00
|
|
|
RouteList(link *netlink.Link, family int) (
|
2022-06-11 01:34:30 +00:00
|
|
|
routes []netlink.Route, err error)
|
2023-05-29 06:44:58 +00:00
|
|
|
RouteAdd(route netlink.Route) error
|
|
|
|
|
RouteDel(route netlink.Route) error
|
|
|
|
|
RouteReplace(route netlink.Route) error
|
2022-08-24 19:41:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Ruler interface {
|
2022-06-11 01:34:30 +00:00
|
|
|
RuleList(family int) (rules []netlink.Rule, err error)
|
2023-05-29 06:44:58 +00:00
|
|
|
RuleAdd(rule netlink.Rule) error
|
|
|
|
|
RuleDel(rule netlink.Rule) error
|
2022-08-24 19:41:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Linker interface {
|
2022-06-11 01:34:30 +00:00
|
|
|
LinkList() (links []netlink.Link, err error)
|
|
|
|
|
LinkByName(name string) (link netlink.Link, err error)
|
|
|
|
|
LinkByIndex(index int) (link netlink.Link, err error)
|
2023-05-29 06:44:58 +00:00
|
|
|
LinkAdd(link netlink.Link) (linkIndex int, err error)
|
2022-06-11 01:34:30 +00:00
|
|
|
LinkDel(link netlink.Link) (err error)
|
2023-05-29 06:44:58 +00:00
|
|
|
LinkSetUp(link netlink.Link) (linkIndex int, err error)
|
2022-06-11 01:34:30 +00:00
|
|
|
LinkSetDown(link netlink.Link) (err error)
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
|
2021-08-23 20:50:32 +00:00
|
|
|
type Routing struct {
|
2022-06-11 01:34:30 +00:00
|
|
|
netLinker NetLinker
|
2021-09-23 16:58:21 +00:00
|
|
|
logger Logger
|
2023-04-27 13:41:05 +00:00
|
|
|
outboundSubnets []netip.Prefix
|
2020-10-29 19:23:44 -04:00
|
|
|
stateMutex sync.RWMutex
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
|
2021-08-23 20:50:32 +00:00
|
|
|
// New creates a new routing instance.
|
2022-06-11 01:34:30 +00:00
|
|
|
func New(netLinker NetLinker, logger Logger) *Routing {
|
2021-08-23 20:50:32 +00:00
|
|
|
return &Routing{
|
2021-08-23 20:56:10 +00:00
|
|
|
netLinker: netLinker,
|
|
|
|
|
logger: logger,
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
}
|