Merge pull request #9596 from LabNConsulting/ziemba/printfrr-nexthop

printfrr %pNHcg, %pNHci
This commit is contained in:
Donald Sharp 2021-09-15 20:23:30 -04:00 committed by GitHub
commit 827ddd5a1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 79 additions and 0 deletions

View File

@ -191,6 +191,10 @@ Networking data types
``%pNHs``: :frrfmtout:`1.2.3.4 if 15` — same as :c:func:`nexthop2str()`
``%pNHcg``: :frrfmtout:`1.2.3.4` — compact gateway only
``%pNHci``: :frrfmtout:`eth0` — compact interface only
.. frrfmt:: %pBD (struct bgp_dest *)
:frrfmtout:`fe80::1234/64`

View File

@ -936,6 +936,12 @@ int nexthop_str2backups(const char *str, int *num_backups,
* unreachable (blackhole)
* %pNHs
* nexthop2str()
* %pNHcg
* 1.2.3.4
* (0-length if no IP address present)
* %pNHci
* eth0
* (0-length if no interface present)
*/
printfrr_ext_autoreg_p("NH", printfrr_nh)
static ssize_t printfrr_nh(struct fbuf *buf, struct printfrr_eargs *ea,
@ -1026,6 +1032,54 @@ static ssize_t printfrr_nh(struct fbuf *buf, struct printfrr_eargs *ea,
break;
}
return ret;
case 'c':
ea->fmt++;
if (*ea->fmt == 'g') {
ea->fmt++;
if (!nexthop)
return bputs(buf, "(null)");
switch (nexthop->type) {
case NEXTHOP_TYPE_IPV4:
case NEXTHOP_TYPE_IPV4_IFINDEX:
ret += bprintfrr(buf, "%pI4",
&nexthop->gate.ipv4);
break;
case NEXTHOP_TYPE_IPV6:
case NEXTHOP_TYPE_IPV6_IFINDEX:
ret += bprintfrr(buf, "%pI6",
&nexthop->gate.ipv6);
break;
case NEXTHOP_TYPE_IFINDEX:
case NEXTHOP_TYPE_BLACKHOLE:
break;
}
} else if (*ea->fmt == 'i') {
ea->fmt++;
if (!nexthop)
return bputs(buf, "(null)");
switch (nexthop->type) {
case NEXTHOP_TYPE_IFINDEX:
ret += bprintfrr(
buf, "%s",
ifindex2ifname(nexthop->ifindex,
nexthop->vrf_id));
break;
case NEXTHOP_TYPE_IPV4:
case NEXTHOP_TYPE_IPV4_IFINDEX:
case NEXTHOP_TYPE_IPV6:
case NEXTHOP_TYPE_IPV6_IFINDEX:
if (nexthop->ifindex)
ret += bprintfrr(
buf, "%s",
ifindex2ifname(
nexthop->ifindex,
nexthop->vrf_id));
break;
case NEXTHOP_TYPE_BLACKHOLE:
break;
}
}
return ret;
}
return -1;
}

View File

@ -24,6 +24,7 @@
#include "lib/printfrr.h"
#include "lib/memory.h"
#include "lib/prefix.h"
#include "lib/nexthop.h"
static int errors;
@ -253,5 +254,25 @@ int main(int argc, char **argv)
printchk("\"\"", "%pSQqn", (char *)NULL);
printchk("(null)", "%pSQq", (char *)NULL);
/*
* %pNH<foo> tests
*
* gateway addresses only for now: interfaces require more setup
*/
printchk("(null)", "%pNHcg", NULL);
printchk("(null)", "%pNHci", NULL);
struct nexthop nh;
memset(&nh, 0, sizeof(nh));
nh.type = NEXTHOP_TYPE_IPV4;
inet_aton("3.2.1.0", &nh.gate.ipv4);
printchk("3.2.1.0", "%pNHcg", &nh);
nh.type = NEXTHOP_TYPE_IPV6;
inet_pton(AF_INET6, "fe2c::34", &nh.gate.ipv6);
printchk("fe2c::34", "%pNHcg", &nh);
return !!errors;
}