diff options
| author | G. Paul Ziemba <p-fbsd-bugs@ziemba.us> | 2021-09-09 08:25:03 -0700 |
|---|---|---|
| committer | G. Paul Ziemba <p-fbsd-bugs@ziemba.us> | 2021-09-14 10:06:57 -0700 |
| commit | 016cfe701e2091cf94da129faf29f67999cad72e (patch) | |
| tree | 892299d1156b2a3bf16ce498fefb9ec8f3c949a5 /lib/nexthop.c | |
| parent | 4250098311f4e6ca9da45ceed9e270c1cba6fba7 (diff) | |
lib,doc,tests: printfrr %pNHcg, %pNHci
Signed-off-by: G. Paul Ziemba <paulz@labn.net>
Diffstat (limited to 'lib/nexthop.c')
| -rw-r--r-- | lib/nexthop.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/nexthop.c b/lib/nexthop.c index 23e3a2b733..fc33a990c0 100644 --- a/lib/nexthop.c +++ b/lib/nexthop.c @@ -938,6 +938,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, @@ -1033,6 +1039,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; } |
