2021-02-06 16:26:23 +00:00
|
|
|
// Package routing defines interfaces to interact with the ip routes using NETLINK.
|
2020-04-12 08:55:13 -04:00
|
|
|
package routing
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"net"
|
2020-10-29 19:23:44 -04:00
|
|
|
"sync"
|
2020-04-12 08:55:13 -04:00
|
|
|
|
|
|
|
|
"github.com/qdm12/golibs/logging"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Routing interface {
|
2020-10-29 19:23:44 -04:00
|
|
|
// Mutations
|
2020-10-24 18:05:11 -04:00
|
|
|
Setup() (err error)
|
|
|
|
|
TearDown() error
|
2020-10-29 19:23:44 -04:00
|
|
|
SetOutboundRoutes(outboundSubnets []net.IPNet) error
|
|
|
|
|
|
|
|
|
|
// Read only
|
2020-07-12 19:05:48 +00:00
|
|
|
DefaultRoute() (defaultInterface string, defaultGateway net.IP, err error)
|
2021-04-10 03:08:20 +10:00
|
|
|
LocalNetworks() (localNetworks []LocalNetwork, err error)
|
2020-10-29 19:23:44 -04:00
|
|
|
DefaultIP() (defaultIP net.IP, err error)
|
2020-10-22 18:55:28 -04:00
|
|
|
VPNDestinationIP() (ip net.IP, err error)
|
2020-10-12 10:55:08 -04:00
|
|
|
VPNLocalGatewayIP() (ip net.IP, err error)
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type routing struct {
|
2020-10-29 19:23:44 -04:00
|
|
|
logger logging.Logger
|
|
|
|
|
outboundSubnets []net.IPNet
|
|
|
|
|
stateMutex sync.RWMutex
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
|
2021-02-06 17:16:58 +00:00
|
|
|
// NewRouting creates a new routing instance.
|
2020-10-22 18:55:28 -04:00
|
|
|
func NewRouting(logger logging.Logger) Routing {
|
2020-04-12 08:55:13 -04:00
|
|
|
return &routing{
|
2021-07-23 18:20:18 +00:00
|
|
|
logger: logger,
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
}
|