summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Stapp <mjs@voltanet.io>2020-04-03 15:00:13 -0400
committerMark Stapp <mjs@voltanet.io>2020-06-01 14:46:32 -0400
commitae076fc276a22b2a5331b066964901e65034e73c (patch)
tree49c3650ba94ea1bc724000346c7e9eb0429f7f0c
parentdaaeaa21507477e35dc9b455962a28ae38761e16 (diff)
lib: add zapi_nexthop2str()
Add a handy 2str api for zapi nexthop debugging. Signed-off-by: Mark Stapp <mjs@voltanet.io>
-rw-r--r--lib/zclient.c33
-rw-r--r--lib/zclient.h2
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/zclient.c b/lib/zclient.c
index fe0cd3ce27..02532e7069 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -1543,6 +1543,39 @@ int zapi_backup_nexthop_from_nexthop(struct zapi_nexthop *znh,
}
/*
+ * Format some info about a zapi nexthop, for debug or logging.
+ */
+const char *zapi_nexthop2str(const struct zapi_nexthop *znh, char *buf,
+ int bufsize)
+{
+ char tmp[INET6_ADDRSTRLEN];
+
+ switch (znh->type) {
+ case NEXTHOP_TYPE_IFINDEX:
+ snprintf(buf, bufsize, "if %u", znh->ifindex);
+ break;
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ inet_ntop(AF_INET, &znh->gate.ipv4, tmp, sizeof(tmp));
+ snprintf(buf, bufsize, "%s if %u", tmp, znh->ifindex);
+ break;
+ case NEXTHOP_TYPE_IPV6:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ inet_ntop(AF_INET6, &znh->gate.ipv6, tmp, sizeof(tmp));
+ snprintf(buf, bufsize, "%s if %u", tmp, znh->ifindex);
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
+ snprintf(buf, bufsize, "blackhole");
+ break;
+ default:
+ snprintf(buf, bufsize, "unknown");
+ break;
+ }
+
+ return buf;
+}
+
+/*
* Decode the nexthop-tracking update message
*/
bool zapi_nexthop_update_decode(struct stream *s, struct zapi_route *nhr)
diff --git a/lib/zclient.h b/lib/zclient.h
index 92ac017e80..5b3b4635a4 100644
--- a/lib/zclient.h
+++ b/lib/zclient.h
@@ -804,6 +804,8 @@ int zapi_backup_nexthop_from_nexthop(struct zapi_nexthop *znh,
const struct nexthop *nh);
extern bool zapi_nexthop_update_decode(struct stream *s,
struct zapi_route *nhr);
+const char *zapi_nexthop2str(const struct zapi_nexthop *znh, char *buf,
+ int bufsize);
/* Decode the zebra error message */
extern bool zapi_error_decode(struct stream *s, enum zebra_error_types *error);