]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd, pim6d: Using ttable for displaying "show ip/ipv6 pim join" command output
authorAbhishek N R <abnr@vmware.com>
Fri, 16 Sep 2022 16:49:22 +0000 (09:49 -0700)
committerAbhishek N R <abnr@vmware.com>
Mon, 19 Sep 2022 09:03:24 +0000 (02:03 -0700)
Before:
frr# sh ipv6 pim join
Interface        Address         Source          Group           State      Uptime   Expire Prune
ens224           fe80::250:56ff:feb7:9091 *               ff08::1         JOIN       00:16:31 03:28  --:--

After:
frr# show ipv6 pim join
 Interface  Address                   Source  Group    State  Uptime    Expire  Prune
 ens224     fe80::250:56ff:feb7:9091  *       ff08::1  JOIN   00:00:51  03:27   --:--

Signed-off-by: Abhishek N R <abnr@vmware.com>
pimd/pim_cmd_common.c

index 70c1544717e3550594e7eae76f583c5c5012eda7..0ddce4200481648de42109f65e4a830565343cde 100644 (file)
@@ -1655,9 +1655,9 @@ void pim_show_upstream_rpf(struct pim_instance *pim, struct vty *vty, bool uj)
        }
 }
 
-static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp,
+static void pim_show_join_helper(struct pim_interface *pim_ifp,
                                 struct pim_ifchannel *ch, json_object *json,
-                                time_t now)
+                                time_t now, struct ttable *tt)
 {
        json_object *json_iface = NULL;
        json_object *json_row = NULL;
@@ -1724,8 +1724,8 @@ static void pim_show_join_helper(struct vty *vty, struct pim_interface *pim_ifp,
                        json_object_object_addf(json_grp, json_row, "%pPAs",
                                                &ch->sg.src);
        } else {
-               vty_out(vty,
-                       "%-16s %-15pPAs %-15pPAs %-15pPAs %-10s %8s %-6s %5s\n",
+               ttable_add_row(
+                       tt, "%s|%pPAs|%pPAs|%pPAs|%s|%s|%s|%s",
                        ch->interface->name, &ifaddr, &ch->sg.src, &ch->sg.grp,
                        pim_ifchannel_ifjoin_name(ch->ifjoin_state, ch->flags),
                        uptime, expire, prune);
@@ -1806,12 +1806,21 @@ void pim_show_join(struct pim_instance *pim, struct vty *vty, pim_sgaddr *sg,
        struct pim_ifchannel *ch;
        struct interface *ifp;
        time_t now;
+       struct ttable *tt = NULL;
+       char *table = NULL;
 
        now = pim_time_monotonic_sec();
 
-       if (!json)
-               vty_out(vty,
-                       "Interface        Address         Source          Group           State      Uptime   Expire Prune\n");
+       if (!json) {
+               /* Prepare table. */
+               tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
+               ttable_add_row(
+                       tt,
+                       "Interface|Address|Source|Group|State|Uptime|Expire|Prune");
+               tt->style.cell.rpad = 2;
+               tt->style.corner = '+';
+               ttable_restyle(tt);
+       }
 
        FOR_ALL_INTERFACES (pim->vrf, ifp) {
                pim_ifp = ifp->info;
@@ -1822,9 +1831,16 @@ void pim_show_join(struct pim_instance *pim, struct vty *vty, pim_sgaddr *sg,
                        if (!pim_sgaddr_match(ch->sg, *sg))
                                continue;
 
-                       pim_show_join_helper(vty, pim_ifp, ch, json, now);
+                       pim_show_join_helper(pim_ifp, ch, json, now, tt);
                } /* scan interface channels */
        }
+       /* Dump the generated table. */
+       if (!json) {
+               table = ttable_dump(tt, "\n");
+               vty_out(vty, "%s\n", table);
+               XFREE(MTYPE_TMP, table);
+               ttable_del(tt);
+       }
 }
 
 static void pim_show_jp_agg_helper(struct interface *ifp,