in pkg/initalizer/iproute/route_linux.go [11:45]
func (l *agentLink) SetupRouteTableForAddrFamily(ctx context.Context, family AddrFamily) error {
log := logger.FromContext(ctx)
newRoute := &netlink.Route{
LinkIndex: l.link.Attrs().Index,
Dst: family.LinkLocalAddr.IPNet,
}
routeList, err := l.netlinkHandle.RouteList(nil, family.Family)
if err != nil {
return fmt.Errorf("unable to fetch newRoute list for interface %s: %w", l.link.Attrs().Name, err)
}
// search for the newRoute, if it already exists do not create it
for _, existingRoute := range routeList {
log.Tracef("Got route: (tbl: %v, dst: %v, iface idx: %v)", existingRoute.Table, existingRoute.Dst, existingRoute.LinkIndex)
if dstRoutesEq(&existingRoute, newRoute) {
if err = l.validateRouteLinkMatch(existingRoute); err != nil {
return err
}
log.Infof("Route (dst: %v, iface idx: %v) already exists, skipping creation", existingRoute.Dst, existingRoute.LinkIndex)
return nil
} else {
log.Tracef("Discarding route %v as it doesnt contain %v", existingRoute.Dst, family.LinkLocalAddr.IP)
}
}
err = l.netlinkHandle.RouteAdd(newRoute)
if err != nil {
return fmt.Errorf("unable to create route for addr %v: %v", family.LinkLocalAddr, err)
}
log.Infof("Created newRoute (dst: %v, iface idx: %v)", newRoute.Dst, newRoute.LinkIndex)
return nil
}