forked from extern/smegmesh
59d8ae4334
- More code comments
45 lines
820 B
Go
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{}
|
|
}
|