diff --git a/sys/net/route/route_ctl.c b/sys/net/route/route_ctl.c --- a/sys/net/route/route_ctl.c +++ b/sys/net/route/route_ctl.c @@ -57,6 +57,11 @@ #include +#define DEBUG_MOD_NAME route_ctl +#define DEBUG_MAX_LEVEL LOG_DEBUG +#include +_DECLARE_DEBUG(LOG_INFO); + /* * This file contains control plane routing tables functions. * @@ -999,18 +1004,17 @@ change_mpath_route(struct rib_head *rnh, struct rt_addrinfo *info, struct route_nhop_data *rnd_orig, struct rib_cmd_info *rc) { - int error = 0; - struct nhop_object *nh_orig, *nh_new; + int error = 0, found_idx = 0; + struct nhop_object *nh_orig = NULL, *nh_new; struct route_nhop_data rnd_new; struct weightened_nhop *wn = NULL, *wn_new; uint32_t num_nhops; - nh_orig = rnd_orig->rnd_nhop; - wn = nhgrp_get_nhops((struct nhgrp_object *)nh_orig, &num_nhops); - nh_orig = NULL; + wn = nhgrp_get_nhops(rnd_orig->rnd_nhgrp, &num_nhops); for (int i = 0; i < num_nhops; i++) { - if (check_info_match_nhop(info, NULL, wn[i].nh)) { + if (check_info_match_nhop(info, NULL, wn[i].nh) == 0) { nh_orig = wn[i].nh; + found_idx = i; break; } } @@ -1030,13 +1034,8 @@ } memcpy(wn_new, wn, num_nhops * sizeof(struct weightened_nhop)); - for (int i = 0; i < num_nhops; i++) { - if (wn[i].nh == nh_orig) { - wn[i].nh = nh_new; - wn[i].weight = get_info_weight(info, rnd_orig->rnd_weight); - break; - } - } + wn_new[found_idx].nh = nh_new; + wn_new[found_idx].weight = get_info_weight(info, wn[found_idx].weight); error = nhgrp_get_group(rnh, wn_new, num_nhops, &rnd_new); nhop_free(nh_new); @@ -1188,6 +1187,15 @@ struct rtentry *rt_new; int error = 0; +#if DEBUG_MAX_LEVEL >= LOG_DEBUG2 + { + char buf_old[NHOP_PRINT_BUFSIZE], buf_new[NHOP_PRINT_BUFSIZE]; + nhop_print_buf_any(rnd_orig->rnd_nhop, buf_old, NHOP_PRINT_BUFSIZE); + nhop_print_buf_any(rnd_new->rnd_nhop, buf_new, NHOP_PRINT_BUFSIZE); + FIB_LOG(LOG_DEBUG2, rnh->rib_fibnum, rnh->rib_family, + "trying change %s -> %s", buf_old, buf_new); + } +#endif RIB_WLOCK(rnh); rt_new = (struct rtentry *)rnh->rnh_lookup(info->rti_info[RTAX_DST],