Maint: routing interface composition
This commit is contained in:
@@ -449,7 +449,7 @@ func printVersions(ctx context.Context, logger logging.Logger,
|
||||
func routeReadyEvents(ctx context.Context, done chan<- struct{}, buildInfo models.BuildInformation,
|
||||
tunnelReadyCh <-chan struct{},
|
||||
unboundLooper dns.Looper, updaterLooper updater.Looper, publicIPLooper publicip.Looper,
|
||||
routing routing.Routing, logger logging.Logger, httpClient *http.Client,
|
||||
routing routing.VPNGetter, logger logging.Logger, httpClient *http.Client,
|
||||
versionInformation, portForwardingEnabled bool, startPortForward func(vpnGateway net.IP)) {
|
||||
defer close(done)
|
||||
|
||||
|
||||
@@ -20,6 +20,10 @@ var (
|
||||
ErrSubnetsOutboundSet = errors.New("cannot set outbound subnets routes")
|
||||
)
|
||||
|
||||
type Setuper interface {
|
||||
Setup() (err error)
|
||||
}
|
||||
|
||||
func (r *routing) Setup() (err error) {
|
||||
defaultIP, err := r.DefaultIP()
|
||||
if err != nil {
|
||||
@@ -59,6 +63,10 @@ func (r *routing) Setup() (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
type TearDowner interface {
|
||||
TearDown() error
|
||||
}
|
||||
|
||||
func (r *routing) TearDown() error {
|
||||
defaultIP, err := r.DefaultIP()
|
||||
if err != nil {
|
||||
|
||||
@@ -10,6 +10,10 @@ var (
|
||||
ErrAddOutboundSubnet = errors.New("cannot add outbound subnet to routes")
|
||||
)
|
||||
|
||||
type OutboundRoutesSetter interface {
|
||||
SetOutboundRoutes(outboundSubnets []net.IPNet) error
|
||||
}
|
||||
|
||||
func (r *routing) SetOutboundRoutes(outboundSubnets []net.IPNet) error {
|
||||
defaultInterface, defaultGateway, err := r.DefaultRoute()
|
||||
if err != nil {
|
||||
|
||||
@@ -34,6 +34,10 @@ var (
|
||||
ErrVPNLocalGatewayIPNotFound = errors.New("VPN local gateway IP address not found")
|
||||
)
|
||||
|
||||
type DefaultRouteGetter interface {
|
||||
DefaultRoute() (defaultInterface string, defaultGateway net.IP, err error)
|
||||
}
|
||||
|
||||
func (r *routing) DefaultRoute() (defaultInterface string, defaultGateway net.IP, err error) {
|
||||
routes, err := netlink.RouteList(nil, netlink.FAMILY_ALL)
|
||||
if err != nil {
|
||||
@@ -57,6 +61,10 @@ func (r *routing) DefaultRoute() (defaultInterface string, defaultGateway net.IP
|
||||
return "", nil, fmt.Errorf("%w: in %d route(s)", ErrRouteDefaultNotFound, len(routes))
|
||||
}
|
||||
|
||||
type DefaultIPGetter interface {
|
||||
DefaultIP() (defaultIP net.IP, err error)
|
||||
}
|
||||
|
||||
func (r *routing) DefaultIP() (ip net.IP, err error) {
|
||||
routes, err := netlink.RouteList(nil, netlink.FAMILY_ALL)
|
||||
if err != nil {
|
||||
@@ -81,6 +89,10 @@ func (r *routing) DefaultIP() (ip net.IP, err error) {
|
||||
return r.assignedIP(defaultLinkName)
|
||||
}
|
||||
|
||||
type LocalSubnetGetter interface {
|
||||
LocalSubnet() (defaultSubnet net.IPNet, err error)
|
||||
}
|
||||
|
||||
func (r *routing) LocalSubnet() (defaultSubnet net.IPNet, err error) {
|
||||
routes, err := netlink.RouteList(nil, netlink.FAMILY_ALL)
|
||||
if err != nil {
|
||||
@@ -110,6 +122,10 @@ func (r *routing) LocalSubnet() (defaultSubnet net.IPNet, err error) {
|
||||
return defaultSubnet, fmt.Errorf("%w: in %d routes", ErrSubnetDefaultNotFound, len(routes))
|
||||
}
|
||||
|
||||
type LocalNetworksGetter interface {
|
||||
LocalNetworks() (localNetworks []LocalNetwork, err error)
|
||||
}
|
||||
|
||||
func (r *routing) LocalNetworks() (localNetworks []LocalNetwork, err error) {
|
||||
links, err := netlink.LinkList()
|
||||
if err != nil {
|
||||
@@ -193,6 +209,10 @@ func (r *routing) assignedIP(interfaceName string) (ip net.IP, err error) {
|
||||
ErrInterfaceIPNotFound, interfaceName, len(addresses))
|
||||
}
|
||||
|
||||
type VPNDestinationIPGetter interface {
|
||||
VPNDestinationIP() (ip net.IP, err error)
|
||||
}
|
||||
|
||||
func (r *routing) VPNDestinationIP() (ip net.IP, err error) {
|
||||
routes, err := netlink.RouteList(nil, netlink.FAMILY_ALL)
|
||||
if err != nil {
|
||||
@@ -221,6 +241,10 @@ func (r *routing) VPNDestinationIP() (ip net.IP, err error) {
|
||||
return nil, fmt.Errorf("%w: in %d routes", ErrVPNDestinationIPNotFound, len(routes))
|
||||
}
|
||||
|
||||
type VPNLocalGatewayIPGetter interface {
|
||||
VPNLocalGatewayIP() (ip net.IP, err error)
|
||||
}
|
||||
|
||||
func (r *routing) VPNLocalGatewayIP() (ip net.IP, err error) {
|
||||
routes, err := netlink.RouteList(nil, netlink.FAMILY_ALL)
|
||||
if err != nil {
|
||||
|
||||
@@ -9,17 +9,27 @@ import (
|
||||
)
|
||||
|
||||
type Routing interface {
|
||||
// Mutations
|
||||
Setup() (err error)
|
||||
TearDown() error
|
||||
SetOutboundRoutes(outboundSubnets []net.IPNet) error
|
||||
Reader
|
||||
Writer
|
||||
}
|
||||
|
||||
// Read only
|
||||
DefaultRoute() (defaultInterface string, defaultGateway net.IP, err error)
|
||||
LocalNetworks() (localNetworks []LocalNetwork, err error)
|
||||
DefaultIP() (defaultIP net.IP, err error)
|
||||
VPNDestinationIP() (ip net.IP, err error)
|
||||
VPNLocalGatewayIP() (ip net.IP, err error)
|
||||
type Reader interface {
|
||||
DefaultRouteGetter
|
||||
DefaultIPGetter
|
||||
LocalSubnetGetter
|
||||
LocalNetworksGetter
|
||||
VPNGetter
|
||||
}
|
||||
|
||||
type VPNGetter interface {
|
||||
VPNDestinationIPGetter
|
||||
VPNLocalGatewayIPGetter
|
||||
}
|
||||
|
||||
type Writer interface {
|
||||
Setuper
|
||||
TearDowner
|
||||
OutboundRoutesSetter
|
||||
}
|
||||
|
||||
type routing struct {
|
||||
|
||||
Reference in New Issue
Block a user