lib: Abstract usage of '%pNHs' so that nexthop groups can use it too

Abstract the usage of '%pNHs' so that when nexthop groups get
a new special printfrr that it can take advantage of this
functionality too.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2022-06-14 14:42:11 -04:00
parent f90391998c
commit f7a410a7c3
2 changed files with 30 additions and 21 deletions

View File

@ -922,6 +922,34 @@ int nexthop_str2backups(const char *str, int *num_backups,
return ret;
}
ssize_t printfrr_nhs(struct fbuf *buf, const struct nexthop *nexthop)
{
ssize_t ret = 0;
if (!nexthop)
return bputs(buf, "(null)");
switch (nexthop->type) {
case NEXTHOP_TYPE_IFINDEX:
ret += bprintfrr(buf, "if %u", nexthop->ifindex);
break;
case NEXTHOP_TYPE_IPV4:
case NEXTHOP_TYPE_IPV4_IFINDEX:
ret += bprintfrr(buf, "%pI4 if %u", &nexthop->gate.ipv4,
nexthop->ifindex);
break;
case NEXTHOP_TYPE_IPV6:
case NEXTHOP_TYPE_IPV6_IFINDEX:
ret += bprintfrr(buf, "%pI6 if %u", &nexthop->gate.ipv6,
nexthop->ifindex);
break;
case NEXTHOP_TYPE_BLACKHOLE:
ret += bputs(buf, "blackhole");
break;
}
return ret;
}
/*
* nexthop printing variants:
* %pNHvv
@ -1010,27 +1038,7 @@ static ssize_t printfrr_nh(struct fbuf *buf, struct printfrr_eargs *ea,
case 's':
ea->fmt++;
if (!nexthop)
return bputs(buf, "(null)");
switch (nexthop->type) {
case NEXTHOP_TYPE_IFINDEX:
ret += bprintfrr(buf, "if %u", nexthop->ifindex);
break;
case NEXTHOP_TYPE_IPV4:
case NEXTHOP_TYPE_IPV4_IFINDEX:
ret += bprintfrr(buf, "%pI4 if %u", &nexthop->gate.ipv4,
nexthop->ifindex);
break;
case NEXTHOP_TYPE_IPV6:
case NEXTHOP_TYPE_IPV6_IFINDEX:
ret += bprintfrr(buf, "%pI6 if %u", &nexthop->gate.ipv6,
nexthop->ifindex);
break;
case NEXTHOP_TYPE_BLACKHOLE:
ret += bputs(buf, "blackhole");
break;
}
ret += printfrr_nhs(buf, nexthop);
return ret;
case 'c':
ea->fmt++;

View File

@ -260,6 +260,7 @@ int nexthop_str2backups(const char *str, int *num_backups,
#pragma FRR printfrr_ext "%pNH" (struct nexthop *)
#endif
ssize_t printfrr_nhs(struct fbuf *buf, const struct nexthop *nh);
#ifdef __cplusplus
}
#endif