diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2023-02-28 10:26:14 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-28 10:26:14 +0200 | 
| commit | 614a18415d642276bd27f000ebf4310455378dc6 (patch) | |
| tree | 602fefb545477d6996253f18d04a93a9d77cd262 | |
| parent | dbf2b160e6a7b47eec3ff883b7b5883c7e82c5d2 (diff) | |
| parent | a3350c948739e1fe6f45e8bca1c2bc9fbe6d8085 (diff) | |
Merge pull request #12910 from FRRouting/mergify/bp/dev/8.5/pr-12899frr-8.5-rc
pim6d: Fix display issue in "show ipv6 mld interface" command (backport #12899)
| -rw-r--r-- | pimd/pim6_mld.c | 57 | 
1 files changed, 36 insertions, 21 deletions
diff --git a/pimd/pim6_mld.c b/pimd/pim6_mld.c index 6faa53afe0..1b281b92d8 100644 --- a/pimd/pim6_mld.c +++ b/pimd/pim6_mld.c @@ -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, -			   json_object *js_if) +			   json_object *js_if, struct ttable *tt)  {  	struct pim_interface *pim_ifp = (struct pim_interface *)ifp->info;  	struct gm_if *gm_ifp = pim_ifp->mld;  	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);  	if (js_if) {  		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_addf(js_if, "version", "%d",  					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",  				    gm_ifp->cur_query_intv_trig);  	} else { -		vty_out(vty, "%-16s  %-5s  %d  %-25pPA  %-5s %11pTH  %pTVMs\n", -			ifp->name, "up", gm_ifp->cur_version, &gm_ifp->querier, -			querier ? "query" : "other", -			querier ? gm_ifp->t_query : gm_ifp->t_other_querier, -			&gm_ifp->started); +		ttable_add_row(tt, "%s|%s|%pPAs|%d|%s|%pPAs|%pTH|%pTVMs", +			       ifp->name, "up", &pim_ifp->primary_address, +			       gm_ifp->cur_version, querier ? "local" : "other", +			       &gm_ifp->querier, gm_ifp->t_query, +			       &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)  {  	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) {  		js_vrf = json_object_new_object();  		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) {  		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;  		} -		if (!ifp->info) +		pim_ifp = ifp->info; + +		if (!pim_ifp || !pim_ifp->mld)  			continue; +  		if (js) {  			js_if = json_object_new_object();  			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,  		       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)  		gm_show_if_vrf(vty, vrf, ifname, detail, js);  	else  | 
