1
0
forked from extern/smegmesh
smegmesh/pkg/route/route.go
Tim Beatham 59d8ae4334 81-seperate-synchronisation
- More code comments
2024-01-04 13:12:07 +00:00

45 lines
820 B
Go

package route
import (
"github.com/tim-beatham/smegmesh/pkg/lib"
"golang.org/x/sys/unix"
)
// RouteInstaller: install the routes to the given interface
type RouteInstaller interface {
InstallRoutes(devName string, routes ...lib.Route) error
}
type RouteInstallerImpl struct{}
// InstallRoutes: installs a route into the routing table
func (r *RouteInstallerImpl) InstallRoutes(devName string, routes ...lib.Route) error {
rtnl, err := lib.NewRtNetlinkConfig()
if err != nil {
return err
}
defer rtnl.Close()
err = rtnl.DeleteRoutes(devName, unix.AF_INET6, routes...)
if err != nil {
return err
}
for _, route := range routes {
err := rtnl.AddRoute(devName, route)
if err != nil {
return err
}
}
return nil
}
func NewRouteInstaller() RouteInstaller {
return &RouteInstallerImpl{}
}