summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-10-09 10:31:24 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-10-09 10:56:54 -0400
commit48f41fe8298c05cd9f99f1cc25dbfa0bcec1c15f (patch)
tree155ad20e09aaf72ebe0b3e7fe5a397f1b18287a9
parentf4dd8c46200b91fd589cb462739f3aca6b1a766f (diff)
pimd: Display RPF address as part of json output
When displaying the 'show ip pim upstream' command. Display proper information about the RPF address choosen. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
-rw-r--r--pimd/pim_cmd.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index 7ce345d8e3..30d3b35f9d 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -2400,6 +2400,30 @@ static void pim_show_upstream(struct pim_instance *pim, struct vty *vty,
json_object_string_add(
json_row, "inboundInterface",
up->rpf.source_nexthop.interface->name);
+
+ /*
+ * The RPF address we use is slightly different
+ * based upon what we are looking up.
+ * If we have a S, list that unless
+ * we are the FHR, else we just put
+ * the RP as the rpfAddress
+ */
+ if (up->flags & PIM_UPSTREAM_FLAG_MASK_FHR ||
+ up->sg.src.s_addr == INADDR_ANY) {
+ char rpf[PREFIX_STRLEN];
+ struct pim_rpf *rpg;
+
+ rpg = RP(pim, up->sg.grp);
+ pim_inet4_dump("<rpf?>",
+ rpg->rpf_addr.u.prefix4,
+ rpf, sizeof(rpf));
+ json_object_string_add(json_row,
+ "rpfAddress", rpf);
+ } else {
+ json_object_string_add(json_row,
+ "rpfAddress", src_str);
+ }
+
json_object_string_add(json_row, "source", src_str);
json_object_string_add(json_row, "group", grp_str);
json_object_string_add(json_row, "state", state_str);