Merge pull request #12910 from FRRouting/mergify/bp/dev/8.5/pr-12899

pim6d: Fix display issue in "show ipv6 mld interface" command (backport #12899)
This commit is contained in:
Donatas Abraitis 2023-02-28 10:26:14 +02:00 committed by GitHub
commit 614a18415d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2393,24 +2393,18 @@ static void gm_show_if_one_detail(struct vty *vty, struct interface *ifp)
} }
static void gm_show_if_one(struct vty *vty, struct interface *ifp, static void gm_show_if_one(struct vty *vty, struct interface *ifp,
json_object *js_if) json_object *js_if, struct ttable *tt)
{ {
struct pim_interface *pim_ifp = (struct pim_interface *)ifp->info; struct pim_interface *pim_ifp = (struct pim_interface *)ifp->info;
struct gm_if *gm_ifp = pim_ifp->mld; struct gm_if *gm_ifp = pim_ifp->mld;
bool querier; bool querier;
if (!gm_ifp) {
if (js_if)
json_object_string_add(js_if, "state", "down");
else
vty_out(vty, "%-16s %5s\n", ifp->name, "down");
return;
}
querier = IPV6_ADDR_SAME(&gm_ifp->querier, &pim_ifp->ll_lowest); querier = IPV6_ADDR_SAME(&gm_ifp->querier, &pim_ifp->ll_lowest);
if (js_if) { if (js_if) {
json_object_string_add(js_if, "name", ifp->name); json_object_string_add(js_if, "name", ifp->name);
json_object_string_addf(js_if, "address", "%pPA",
&pim_ifp->primary_address);
json_object_string_add(js_if, "state", "up"); json_object_string_add(js_if, "state", "up");
json_object_string_addf(js_if, "version", "%d", json_object_string_addf(js_if, "version", "%d",
gm_ifp->cur_version); gm_ifp->cur_version);
@ -2437,11 +2431,11 @@ static void gm_show_if_one(struct vty *vty, struct interface *ifp,
json_object_int_add(js_if, "timerLastMemberQueryIntervalMsec", json_object_int_add(js_if, "timerLastMemberQueryIntervalMsec",
gm_ifp->cur_query_intv_trig); gm_ifp->cur_query_intv_trig);
} else { } else {
vty_out(vty, "%-16s %-5s %d %-25pPA %-5s %11pTH %pTVMs\n", ttable_add_row(tt, "%s|%s|%pPAs|%d|%s|%pPAs|%pTH|%pTVMs",
ifp->name, "up", gm_ifp->cur_version, &gm_ifp->querier, ifp->name, "up", &pim_ifp->primary_address,
querier ? "query" : "other", gm_ifp->cur_version, querier ? "local" : "other",
querier ? gm_ifp->t_query : gm_ifp->t_other_querier, &gm_ifp->querier, gm_ifp->t_query,
&gm_ifp->started); &gm_ifp->started);
} }
} }
@ -2449,13 +2443,27 @@ static void gm_show_if_vrf(struct vty *vty, struct vrf *vrf, const char *ifname,
bool detail, json_object *js) bool detail, json_object *js)
{ {
struct interface *ifp; struct interface *ifp;
json_object *js_vrf; json_object *js_vrf = NULL;
struct pim_interface *pim_ifp;
struct ttable *tt = NULL;
char *table = NULL;
if (js) { if (js) {
js_vrf = json_object_new_object(); js_vrf = json_object_new_object();
json_object_object_add(js, vrf->name, js_vrf); json_object_object_add(js, vrf->name, js_vrf);
} }
if (!js && !detail) {
/* Prepare table. */
tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
ttable_add_row(
tt,
"Interface|State|Address|V|Querier|QuerierIp|Query Timer|Uptime");
tt->style.cell.rpad = 2;
tt->style.corner = '+';
ttable_restyle(tt);
}
FOR_ALL_INTERFACES (vrf, ifp) { FOR_ALL_INTERFACES (vrf, ifp) {
json_object *js_if = NULL; json_object *js_if = NULL;
@ -2466,24 +2474,31 @@ static void gm_show_if_vrf(struct vty *vty, struct vrf *vrf, const char *ifname,
continue; continue;
} }
if (!ifp->info) pim_ifp = ifp->info;
if (!pim_ifp || !pim_ifp->mld)
continue; continue;
if (js) { if (js) {
js_if = json_object_new_object(); js_if = json_object_new_object();
json_object_object_add(js_vrf, ifp->name, js_if); json_object_object_add(js_vrf, ifp->name, js_if);
} }
gm_show_if_one(vty, ifp, js_if); gm_show_if_one(vty, ifp, js_if, tt);
}
/* Dump the generated table. */
if (!js && !detail) {
table = ttable_dump(tt, "\n");
vty_out(vty, "%s\n", table);
XFREE(MTYPE_TMP, table);
ttable_del(tt);
} }
} }
static void gm_show_if(struct vty *vty, struct vrf *vrf, const char *ifname, static void gm_show_if(struct vty *vty, struct vrf *vrf, const char *ifname,
bool detail, json_object *js) bool detail, json_object *js)
{ {
if (!js && !detail)
vty_out(vty, "%-16s %-5s V %-25s %-18s %s\n", "Interface",
"State", "Querier", "Timer", "Uptime");
if (vrf) if (vrf)
gm_show_if_vrf(vty, vrf, ifname, detail, js); gm_show_if_vrf(vty, vrf, ifname, detail, js);
else else