2021-08-22 14:58:39 -07:00
|
|
|
package netlink
|
|
|
|
|
|
2023-05-29 06:44:58 +00:00
|
|
|
import (
|
|
|
|
|
"github.com/vishvananda/netlink"
|
|
|
|
|
)
|
2021-08-23 21:12:28 +00:00
|
|
|
|
2023-05-29 06:44:58 +00:00
|
|
|
func (n *NetLink) RouteList(link *Link, family int) (
|
2021-09-07 02:35:39 +00:00
|
|
|
routes []Route, err error) {
|
2023-05-29 06:44:58 +00:00
|
|
|
netlinkLink := linkToNetlinkLink(link)
|
|
|
|
|
netlinkRoutes, err := netlink.RouteList(netlinkLink, family)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
routes = make([]Route, len(netlinkRoutes))
|
|
|
|
|
for i := range netlinkRoutes {
|
|
|
|
|
routes[i] = netlinkRouteToRoute(netlinkRoutes[i])
|
|
|
|
|
}
|
|
|
|
|
return routes, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (n *NetLink) RouteAdd(route Route) error {
|
|
|
|
|
netlinkRoute := routeToNetlinkRoute(route)
|
|
|
|
|
return netlink.RouteAdd(&netlinkRoute)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (n *NetLink) RouteDel(route Route) error {
|
|
|
|
|
netlinkRoute := routeToNetlinkRoute(route)
|
|
|
|
|
return netlink.RouteDel(&netlinkRoute)
|
2021-08-23 20:56:10 +00:00
|
|
|
}
|
|
|
|
|
|
2023-05-29 06:44:58 +00:00
|
|
|
func (n *NetLink) RouteReplace(route Route) error {
|
|
|
|
|
netlinkRoute := routeToNetlinkRoute(route)
|
|
|
|
|
return netlink.RouteReplace(&netlinkRoute)
|
2021-08-22 14:58:39 -07:00
|
|
|
}
|
2021-08-23 20:56:10 +00:00
|
|
|
|
2023-05-29 06:44:58 +00:00
|
|
|
func netlinkRouteToRoute(netlinkRoute netlink.Route) (route Route) {
|
|
|
|
|
return Route{
|
|
|
|
|
LinkIndex: netlinkRoute.LinkIndex,
|
|
|
|
|
Dst: netIPNetToNetipPrefix(netlinkRoute.Dst),
|
|
|
|
|
Src: netIPToNetipAddress(netlinkRoute.Src),
|
|
|
|
|
Gw: netIPToNetipAddress(netlinkRoute.Gw),
|
|
|
|
|
Priority: netlinkRoute.Priority,
|
|
|
|
|
Family: netlinkRoute.Family,
|
|
|
|
|
Table: netlinkRoute.Table,
|
|
|
|
|
Type: netlinkRoute.Type,
|
|
|
|
|
}
|
2021-08-23 20:56:10 +00:00
|
|
|
}
|
|
|
|
|
|
2023-05-29 06:44:58 +00:00
|
|
|
func routeToNetlinkRoute(route Route) (netlinkRoute netlink.Route) {
|
|
|
|
|
return netlink.Route{
|
|
|
|
|
LinkIndex: route.LinkIndex,
|
|
|
|
|
Dst: netipPrefixToIPNet(route.Dst),
|
|
|
|
|
Src: netipAddrToNetIP(route.Src),
|
|
|
|
|
Gw: netipAddrToNetIP(route.Gw),
|
|
|
|
|
Priority: route.Priority,
|
|
|
|
|
Family: route.Family,
|
|
|
|
|
Table: route.Table,
|
|
|
|
|
Type: route.Type,
|
|
|
|
|
}
|
2021-08-23 20:56:10 +00:00
|
|
|
}
|