in controllers/daemon/staticgatewayconfiguration_controller.go [929:954]
func (r *StaticGatewayConfigurationReconciler) addOrReplaceRoute(ctx context.Context, route *netlink.Route) error {
log := log.FromContext(ctx)
equalRoute := func(r1, r2 *netlink.Route) bool {
size1, _ := to.Val(r1.Dst).Mask.Size()
size2, _ := to.Val(r2.Dst).Mask.Size()
return r1.LinkIndex == r2.LinkIndex && r1.Scope == r2.Scope &&
to.Val(r1.Dst).IP.Equal(to.Val(r2.Dst).IP) && size1 == size2 && r1.Gw.Equal(r2.Gw)
}
routes, err := r.Netlink.RouteList(nil, nl.FAMILY_ALL)
if err != nil {
return err
}
foundRoute := false
for i := range routes {
if equalRoute(&routes[i], route) {
foundRoute = true
}
}
if !foundRoute {
log.Info("Adding new route", "route", *route)
if err = r.Netlink.RouteReplace(route); err != nil {
return err
}
}
return nil
}