From: Nikolay Aleksandrov Date: Thu, 30 Sep 2021 11:38:42 +0000 (+0300) Subject: ip: nexthop: add a helper which retrieves and prints cached nh entry X-Git-Tag: v5.16.0~33^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb3d18c29e20fa95bd98a614cc5a86f9a1336115;p=thirdparty%2Fiproute2.git ip: nexthop: add a helper which retrieves and prints cached nh entry Add a helper which looks for a nexthop in the cache and if not found reads the entry from the kernel and caches it. Finally the entry is printed. Signed-off-by: Nikolay Aleksandrov Signed-off-by: David Ahern --- diff --git a/ip/ipnexthop.c b/ip/ipnexthop.c index e0f0f7846..31462c57d 100644 --- a/ip/ipnexthop.c +++ b/ip/ipnexthop.c @@ -602,6 +602,22 @@ static void ipnh_cache_del(struct nh_entry *nhe) free(nhe); } +void print_cache_nexthop_id(FILE *fp, const char *fp_prefix, const char *jsobj, + __u32 nh_id) +{ + struct nh_entry *nhe = ipnh_cache_get(nh_id); + + if (!nhe) { + nhe = ipnh_cache_add(nh_id); + if (!nhe) + return; + } + + if (fp_prefix) + print_string(PRINT_FP, NULL, "%s", fp_prefix); + __print_nexthop_entry(fp, jsobj, nhe, false); +} + int print_nexthop(struct nlmsghdr *n, void *arg) { struct nhmsg *nhm = NLMSG_DATA(n); diff --git a/ip/nh_common.h b/ip/nh_common.h index ee84d968d..b448f1b55 100644 --- a/ip/nh_common.h +++ b/ip/nh_common.h @@ -46,4 +46,7 @@ struct nh_entry { struct nexthop_grp *nh_groups; }; +void print_cache_nexthop_id(FILE *fp, const char *fp_prefix, const char *jsobj, + __u32 nh_id); + #endif /* __NH_COMMON_H__ */