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"
|
|
|
|
|
)
|
|
|
|
|
|
2021-08-23 20:50:32 +00:00
|
|
|
type ReadWriter interface {
|
2021-07-26 16:18:53 +00:00
|
|
|
Reader
|
|
|
|
|
Writer
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Reader interface {
|
|
|
|
|
DefaultRouteGetter
|
|
|
|
|
DefaultIPGetter
|
|
|
|
|
LocalSubnetGetter
|
|
|
|
|
LocalNetworksGetter
|
|
|
|
|
VPNGetter
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type VPNGetter interface {
|
|
|
|
|
VPNDestinationIPGetter
|
|
|
|
|
VPNLocalGatewayIPGetter
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Writer interface {
|
|
|
|
|
Setuper
|
|
|
|
|
TearDowner
|
|
|
|
|
OutboundRoutesSetter
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
|
2021-08-23 20:50:32 +00: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-08-23 20:50:32 +00:00
|
|
|
// New creates a new routing instance.
|
|
|
|
|
func New(logger logging.Logger) *Routing {
|
|
|
|
|
return &Routing{
|
2021-07-23 18:20:18 +00:00
|
|
|
logger: logger,
|
2020-04-12 08:55:13 -04:00
|
|
|
}
|
|
|
|
|
}
|