Maint: internal/routing returns *Routine struct
This commit is contained in:
@@ -234,7 +234,7 @@ func _main(ctx context.Context, buildInfo models.BuildInformation,
|
|||||||
Prefix: "routing: ",
|
Prefix: "routing: ",
|
||||||
Level: firewallLogLevel,
|
Level: firewallLogLevel,
|
||||||
})
|
})
|
||||||
routingConf := routing.NewRouting(routingLogger)
|
routingConf := routing.New(routingLogger)
|
||||||
|
|
||||||
defaultInterface, defaultGateway, err := routingConf.DefaultRoute()
|
defaultInterface, defaultGateway, err := routingConf.DefaultRoute()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ type Setuper interface {
|
|||||||
Setup() (err error)
|
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 {
|
||||||
return fmt.Errorf("%w: %s", ErrDefaultIP, err)
|
return fmt.Errorf("%w: %s", ErrDefaultIP, err)
|
||||||
@@ -67,7 +67,7 @@ type TearDowner interface {
|
|||||||
TearDown() error
|
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 {
|
||||||
return fmt.Errorf("%w: %s", ErrDefaultIP, err)
|
return fmt.Errorf("%w: %s", ErrDefaultIP, err)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ var (
|
|||||||
ErrRuleDel = errors.New("cannot delete routing rule")
|
ErrRuleDel = errors.New("cannot delete routing rule")
|
||||||
)
|
)
|
||||||
|
|
||||||
func (r *routing) addRouteVia(destination net.IPNet, gateway net.IP, iface string, table int) error {
|
func (r *Routing) addRouteVia(destination net.IPNet, gateway net.IP, iface string, table int) error {
|
||||||
destinationStr := destination.String()
|
destinationStr := destination.String()
|
||||||
r.logger.Info("adding route for " + destinationStr)
|
r.logger.Info("adding route for " + destinationStr)
|
||||||
r.logger.Debug("ip route replace " + destinationStr +
|
r.logger.Debug("ip route replace " + destinationStr +
|
||||||
@@ -42,7 +42,7 @@ func (r *routing) addRouteVia(destination net.IPNet, gateway net.IP, iface strin
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) deleteRouteVia(destination net.IPNet, gateway net.IP, iface string, table int) (err error) {
|
func (r *Routing) deleteRouteVia(destination net.IPNet, gateway net.IP, iface string, table int) (err error) {
|
||||||
destinationStr := destination.String()
|
destinationStr := destination.String()
|
||||||
r.logger.Info("deleting route for " + destinationStr)
|
r.logger.Info("deleting route for " + destinationStr)
|
||||||
r.logger.Debug("ip route delete " + destinationStr +
|
r.logger.Debug("ip route delete " + destinationStr +
|
||||||
@@ -67,7 +67,7 @@ func (r *routing) deleteRouteVia(destination net.IPNet, gateway net.IP, iface st
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) addIPRule(src net.IP, table, priority int) error {
|
func (r *Routing) addIPRule(src net.IP, table, priority int) error {
|
||||||
r.logger.Debug("ip rule add from " + src.String() +
|
r.logger.Debug("ip rule add from " + src.String() +
|
||||||
" lookup " + strconv.Itoa(table) +
|
" lookup " + strconv.Itoa(table) +
|
||||||
" pref " + strconv.Itoa(priority))
|
" pref " + strconv.Itoa(priority))
|
||||||
@@ -97,7 +97,7 @@ func (r *routing) addIPRule(src net.IP, table, priority int) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) deleteIPRule(src net.IP, table, priority int) error {
|
func (r *Routing) deleteIPRule(src net.IP, table, priority int) error {
|
||||||
r.logger.Debug("ip rule del from " + src.String() +
|
r.logger.Debug("ip rule del from " + src.String() +
|
||||||
" lookup " + strconv.Itoa(table) +
|
" lookup " + strconv.Itoa(table) +
|
||||||
" pref " + strconv.Itoa(priority))
|
" pref " + strconv.Itoa(priority))
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ type OutboundRoutesSetter interface {
|
|||||||
SetOutboundRoutes(outboundSubnets []net.IPNet) error
|
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 {
|
||||||
return err
|
return err
|
||||||
@@ -22,7 +22,7 @@ func (r *routing) SetOutboundRoutes(outboundSubnets []net.IPNet) error {
|
|||||||
return r.setOutboundRoutes(outboundSubnets, defaultInterface, defaultGateway)
|
return r.setOutboundRoutes(outboundSubnets, defaultInterface, defaultGateway)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) setOutboundRoutes(outboundSubnets []net.IPNet,
|
func (r *Routing) setOutboundRoutes(outboundSubnets []net.IPNet,
|
||||||
defaultInterfaceName string, defaultGateway net.IP) error {
|
defaultInterfaceName string, defaultGateway net.IP) error {
|
||||||
r.stateMutex.Lock()
|
r.stateMutex.Lock()
|
||||||
defer r.stateMutex.Unlock()
|
defer r.stateMutex.Unlock()
|
||||||
@@ -38,7 +38,7 @@ func (r *routing) setOutboundRoutes(outboundSubnets []net.IPNet,
|
|||||||
return r.addOutboundSubnets(subnetsToAdd, defaultInterfaceName, defaultGateway)
|
return r.addOutboundSubnets(subnetsToAdd, defaultInterfaceName, defaultGateway)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) removeOutboundSubnets(subnets []net.IPNet,
|
func (r *Routing) removeOutboundSubnets(subnets []net.IPNet,
|
||||||
defaultInterfaceName string, defaultGateway net.IP) {
|
defaultInterfaceName string, defaultGateway net.IP) {
|
||||||
for _, subnet := range subnets {
|
for _, subnet := range subnets {
|
||||||
const table = 0
|
const table = 0
|
||||||
@@ -50,7 +50,7 @@ func (r *routing) removeOutboundSubnets(subnets []net.IPNet,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) addOutboundSubnets(subnets []net.IPNet,
|
func (r *Routing) addOutboundSubnets(subnets []net.IPNet,
|
||||||
defaultInterfaceName string, defaultGateway net.IP) error {
|
defaultInterfaceName string, defaultGateway net.IP) error {
|
||||||
for _, subnet := range subnets {
|
for _, subnet := range subnets {
|
||||||
const table = 0
|
const table = 0
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ type DefaultRouteGetter interface {
|
|||||||
DefaultRoute() (defaultInterface string, defaultGateway net.IP, err error)
|
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 {
|
||||||
return "", nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
return "", nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
||||||
@@ -64,7 +64,7 @@ type DefaultIPGetter interface {
|
|||||||
DefaultIP() (defaultIP net.IP, err error)
|
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 {
|
||||||
return nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
return nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
||||||
@@ -92,7 +92,7 @@ type LocalSubnetGetter interface {
|
|||||||
LocalSubnet() (defaultSubnet net.IPNet, err error)
|
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 {
|
||||||
return defaultSubnet, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
return defaultSubnet, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
||||||
@@ -125,7 +125,7 @@ type LocalNetworksGetter interface {
|
|||||||
LocalNetworks() (localNetworks []LocalNetwork, err error)
|
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 {
|
||||||
return localNetworks, fmt.Errorf("%w: %s", ErrLinkList, err)
|
return localNetworks, fmt.Errorf("%w: %s", ErrLinkList, err)
|
||||||
@@ -187,7 +187,7 @@ func (r *routing) LocalNetworks() (localNetworks []LocalNetwork, err error) {
|
|||||||
return localNetworks, nil
|
return localNetworks, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) assignedIP(interfaceName string) (ip net.IP, err error) {
|
func (r *Routing) assignedIP(interfaceName string) (ip net.IP, err error) {
|
||||||
iface, err := net.InterfaceByName(interfaceName)
|
iface, err := net.InterfaceByName(interfaceName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("%w: %s: %s", ErrInterfaceNotFound, interfaceName, err)
|
return nil, fmt.Errorf("%w: %s: %s", ErrInterfaceNotFound, interfaceName, err)
|
||||||
@@ -212,7 +212,7 @@ type VPNDestinationIPGetter interface {
|
|||||||
VPNDestinationIP() (ip net.IP, err error)
|
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 {
|
||||||
return nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
return nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
||||||
@@ -244,7 +244,7 @@ type VPNLocalGatewayIPGetter interface {
|
|||||||
VPNLocalGatewayIP(vpnIntf string) (ip net.IP, err error)
|
VPNLocalGatewayIP(vpnIntf string) (ip net.IP, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *routing) VPNLocalGatewayIP(vpnIntf string) (ip net.IP, err error) {
|
func (r *Routing) VPNLocalGatewayIP(vpnIntf string) (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 {
|
||||||
return nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
return nil, fmt.Errorf("%w: %s", ErrRoutesList, err)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import (
|
|||||||
"github.com/qdm12/golibs/logging"
|
"github.com/qdm12/golibs/logging"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Routing interface {
|
type ReadWriter interface {
|
||||||
Reader
|
Reader
|
||||||
Writer
|
Writer
|
||||||
}
|
}
|
||||||
@@ -32,15 +32,15 @@ type Writer interface {
|
|||||||
OutboundRoutesSetter
|
OutboundRoutesSetter
|
||||||
}
|
}
|
||||||
|
|
||||||
type routing struct {
|
type Routing struct {
|
||||||
logger logging.Logger
|
logger logging.Logger
|
||||||
outboundSubnets []net.IPNet
|
outboundSubnets []net.IPNet
|
||||||
stateMutex sync.RWMutex
|
stateMutex sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRouting creates a new routing instance.
|
// New creates a new routing instance.
|
||||||
func NewRouting(logger logging.Logger) Routing {
|
func New(logger logging.Logger) *Routing {
|
||||||
return &routing{
|
return &Routing{
|
||||||
logger: logger,
|
logger: logger,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user