From e8f7da3a90c2fd0fbbff438665301d78d7773a40 Mon Sep 17 00:00:00 2001 From: Daniel Walton Date: Wed, 18 May 2016 13:31:59 +0000 Subject: [PATCH] BGP: "show ip bgp neighbor json" keys are stepping all over each other Signed-off-by: Daniel Walton Reviewed-by: Donald Sharp Ticket: CM-11007 bgp_show_neighbor() was allocating a json_neigh struct and using that for every single peer...so the resulting json was a munge of state from all peers We need to allocate a new json_neigh for each neighbor. --- bgpd/bgp_vty.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index cc6d3d2339..bde1273508 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -10948,7 +10948,7 @@ bgp_show_peer_afi (struct vty *vty, struct peer *p, afi_t afi, safi_t safi, } static void -bgp_show_peer (struct vty *vty, struct peer *p, u_char use_json, json_object *json, json_object *json_neigh) +bgp_show_peer (struct vty *vty, struct peer *p, u_char use_json, json_object *json) { struct bgp *bgp; char buf1[PREFIX2STR_BUFFER], buf[SU_ADDRSTRLEN]; @@ -10960,9 +10960,13 @@ bgp_show_peer (struct vty *vty, struct peer *p, u_char use_json, json_object *js safi_t safi; u_int16_t i; u_char *msg; + json_object *json_neigh = NULL; bgp = p->bgp; + if (use_json) + json_neigh = json_object_new_object(); + if (!use_json) { if (p->conf_if) /* Configured interface name. */ @@ -11909,7 +11913,7 @@ bgp_show_peer (struct vty *vty, struct peer *p, u_char use_json, json_object *js { if (use_json) { - json_object_string_add(json_hold, "reducePrefixNumFrom", p->host); + json_object_boolean_true_add(json_hold, "reducePrefixNumFrom"); json_object_int_add(json_hold, "restartInTimerMsec", thread_timer_remain_second (p->t_pmax_restart) * 1000); } else @@ -11920,7 +11924,7 @@ bgp_show_peer (struct vty *vty, struct peer *p, u_char use_json, json_object *js else { if (use_json) - json_object_string_add(json_hold, "reducePrefixNumAndClearIpBgp", p->host); + json_object_boolean_true_add(json_hold, "reducePrefixNumAndClearIpBgp"); else vty_out (vty, " Reduce the no. of prefix and clear ip bgp %s to restore peering%s", p->host, VTY_NEWLINE); @@ -12093,10 +12097,6 @@ bgp_show_neighbor (struct vty *vty, struct bgp *bgp, enum show_type type, struct listnode *node, *nnode; struct peer *peer; int find = 0; - json_object *json_neigh = NULL; - - if (use_json) - json_neigh = json_object_new_object(); for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer)) { @@ -12106,7 +12106,7 @@ bgp_show_neighbor (struct vty *vty, struct bgp *bgp, enum show_type type, switch (type) { case show_all: - bgp_show_peer (vty, peer, use_json, json, json_neigh); + bgp_show_peer (vty, peer, use_json, json); break; case show_peer: if (conf_if) @@ -12115,7 +12115,7 @@ bgp_show_neighbor (struct vty *vty, struct bgp *bgp, enum show_type type, (peer->hostname && !strcmp(peer->hostname, conf_if))) { find = 1; - bgp_show_peer (vty, peer, use_json, json, json_neigh); + bgp_show_peer (vty, peer, use_json, json); } } else @@ -12123,7 +12123,7 @@ bgp_show_neighbor (struct vty *vty, struct bgp *bgp, enum show_type type, if (sockunion_same (&peer->su, su)) { find = 1; - bgp_show_peer (vty, peer, use_json, json, json_neigh); + bgp_show_peer (vty, peer, use_json, json); } } break; -- 2.39.5