Line | Count | Source (jump to first uncovered line) |
1 | | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | | /* |
3 | | * PIM address generalizations |
4 | | * Copyright (C) 2022 David Lamparter for NetDEF, Inc. |
5 | | */ |
6 | | |
7 | | #include <zebra.h> |
8 | | |
9 | | #include "pim_addr.h" |
10 | | #include "printfrr.h" |
11 | | #include "prefix.h" |
12 | | |
13 | | |
14 | | printfrr_ext_autoreg_p("PA", printfrr_pimaddr); |
15 | | static ssize_t printfrr_pimaddr(struct fbuf *buf, struct printfrr_eargs *ea, |
16 | | const void *vptr) |
17 | 250k | { |
18 | 250k | const pim_addr *addr = vptr; |
19 | 250k | bool use_star = false; |
20 | | |
21 | 250k | if (ea->fmt[0] == 's') { |
22 | 209k | use_star = true; |
23 | 209k | ea->fmt++; |
24 | 209k | } |
25 | | |
26 | 250k | if (!addr) |
27 | 0 | return bputs(buf, "(null)"); |
28 | | |
29 | 250k | if (use_star && pim_addr_is_any(*addr)) |
30 | 494 | return bputch(buf, '*'); |
31 | | |
32 | 249k | #if PIM_IPV == 4 |
33 | 249k | return bprintfrr(buf, "%pI4", addr); |
34 | | #else |
35 | | return bprintfrr(buf, "%pI6", addr); |
36 | | #endif |
37 | 250k | } |
38 | | |
39 | | printfrr_ext_autoreg_p("SG", printfrr_sgaddr); |
40 | | static ssize_t printfrr_sgaddr(struct fbuf *buf, struct printfrr_eargs *ea, |
41 | | const void *vptr) |
42 | 104k | { |
43 | 104k | const pim_sgaddr *sga = vptr; |
44 | | |
45 | 104k | if (!sga) |
46 | 0 | return bputs(buf, "(null)"); |
47 | | |
48 | 104k | return bprintfrr(buf, "(%pPAs,%pPAs)", &sga->src, &sga->grp); |
49 | 104k | } |