bgpd: fixes for the "show bgp large-community" command

* Fix a segfault when the "show bgp large-community" command is given
  without any optional large communities;
* Fix parsing of optional large communities. Without this fix a
  "Large-community malformed" error is shown even for valid large
  communities.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
Renato Westphal 2017-04-10 12:28:45 -03:00
parent 2caafa8c6f
commit d536095fd3

View File

@ -8171,7 +8171,7 @@ bgp_show_lcommunity (struct vty *vty, struct bgp *bgp, int argc,
buffer_putc (b, ' '); buffer_putc (b, ' ');
else else
{ {
if (strmatch (argv[i]->text, "<AA:BB:CC>")) if (strmatch (argv[i]->text, "AA:BB:CC"))
{ {
first = 1; first = 1;
buffer_putstr (b, argv[i]->arg); buffer_putstr (b, argv[i]->arg);
@ -8187,7 +8187,7 @@ bgp_show_lcommunity (struct vty *vty, struct bgp *bgp, int argc,
XFREE (MTYPE_TMP, str); XFREE (MTYPE_TMP, str);
if (! lcom) if (! lcom)
{ {
vty_out (vty, "%% Large-community malformed: %s", VTY_NEWLINE); vty_out (vty, "%% Large-community malformed%s", VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
} }
@ -8299,8 +8299,7 @@ DEFUN (show_ip_bgp_large_community,
return CMD_WARNING; return CMD_WARNING;
} }
argv_find (argv, argc, "large-community", &idx); if (argv_find (argv, argc, "AA:BB:CC", &idx))
if (strmatch(argv[idx+1]->text, "AA:BB:CC"))
return bgp_show_lcommunity (vty, bgp, argc, argv, afi, safi, uj); return bgp_show_lcommunity (vty, bgp, argc, argv, afi, safi, uj);
else else
return bgp_show (vty, bgp, afi, safi, bgp_show_type_lcommunity_all, NULL, uj); return bgp_show (vty, bgp, afi, safi, bgp_show_type_lcommunity_all, NULL, uj);