From: Renato Westphal Date: Thu, 19 Aug 2021 02:07:10 +0000 (-0300) Subject: ospf6d: fix logging of border router routes X-Git-Tag: base_8.1~157^2~3 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=9142948e39f331231d05e68306c94a51db36c820;p=mirror%2Ffrr.git ospf6d: fix logging of border router routes The prefix of routes to border routers consists of two pieces of information embedded in a single struct (prefix.u.lp): struct prefix { uint8_t family; uint16_t prefixlen; union { [snip] struct { struct in_addr id; struct in_addr adv_router; } lp; } u __attribute__((aligned(8))); }; As such, using prefix2str() (or the %pFX format specifier) isn't correct when logging such routes. This commit adds a few special cases here and there to handle OSPF6_DEST_TYPE_ROUTER routes differently. It'd probably be a good idea to add a helper function to handle all cases in a single place, but that can be left for a second moment. Signed-off-by: Renato Westphal --- diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c index 69be807c13..650262f1ae 100644 --- a/ospf6d/ospf6_abr.c +++ b/ospf6d/ospf6_abr.c @@ -172,9 +172,19 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route, uint16_t type; int is_debug = 0; - if (IS_OSPF6_DEBUG_ABR) - zlog_debug("%s : start area %s, route %pFX", __func__, - area->name, &route->prefix); + if (IS_OSPF6_DEBUG_ABR) { + char buf[BUFSIZ]; + + if (route->type == OSPF6_DEST_TYPE_ROUTER) + inet_ntop(AF_INET, + &ADV_ROUTER_IN_PREFIX(&route->prefix), buf, + sizeof(buf)); + else + prefix2str(&route->prefix, buf, sizeof(buf)); + + zlog_debug("%s : start area %s, route %s", __func__, area->name, + buf); + } if (route->type == OSPF6_DEST_TYPE_ROUTER) summary_table = area->summary_router; @@ -684,8 +694,18 @@ void ospf6_abr_originate_summary(struct ospf6_route *route, struct ospf6 *ospf6) struct ospf6_area *oa; struct ospf6_route *range = NULL; - if (IS_OSPF6_DEBUG_ABR) - zlog_debug("%s: route %pFX", __func__, &route->prefix); + if (IS_OSPF6_DEBUG_ABR) { + char buf[BUFSIZ]; + + if (route->type == OSPF6_DEST_TYPE_ROUTER) + inet_ntop(AF_INET, + &ADV_ROUTER_IN_PREFIX(&route->prefix), buf, + sizeof(buf)); + else + prefix2str(&route->prefix, buf, sizeof(buf)); + + zlog_debug("%s: route %s", __func__, buf); + } if (route->type == OSPF6_DEST_TYPE_NETWORK) { oa = ospf6_area_lookup(route->path.area_id, ospf6); diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c index cd3139d28a..13003b4151 100644 --- a/ospf6d/ospf6_route.c +++ b/ospf6d/ospf6_route.c @@ -667,6 +667,9 @@ struct ospf6_route *ospf6_route_add(struct ospf6_route *route, if (route->type == OSPF6_DEST_TYPE_LINKSTATE) ospf6_linkstate_prefix2str(&route->prefix, buf, sizeof(buf)); + else if (route->type == OSPF6_DEST_TYPE_ROUTER) + inet_ntop(AF_INET, &ADV_ROUTER_IN_PREFIX(&route->prefix), buf, + sizeof(buf)); else prefix2str(&route->prefix, buf, sizeof(buf)); @@ -899,6 +902,9 @@ void ospf6_route_remove(struct ospf6_route *route, if (route->type == OSPF6_DEST_TYPE_LINKSTATE) ospf6_linkstate_prefix2str(&route->prefix, buf, sizeof(buf)); + else if (route->type == OSPF6_DEST_TYPE_ROUTER) + inet_ntop(AF_INET, &ADV_ROUTER_IN_PREFIX(&route->prefix), buf, + sizeof(buf)); else prefix2str(&route->prefix, buf, sizeof(buf));