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