From 06d16f3dd1fb194c0970cb56eda4cc9cf900bbd7 Mon Sep 17 00:00:00 2001 From: Nischal Sheth Date: Wed, 1 Mar 2017 09:29:40 -0800 Subject: [PATCH] Add neighbor info to routing instance introspect Change-Id: Ic6d9738707346c9290de0336cb34d52fd4efe1ea Closes-Bug: 1668728 --- src/bgp/bgp_peer.sandesh | 1 + src/bgp/bgp_show_routing_instance.cc | 54 +++++++++++++++++----------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/bgp/bgp_peer.sandesh b/src/bgp/bgp_peer.sandesh index f6c3e2a7cbe..3dc58bdf500 100644 --- a/src/bgp/bgp_peer.sandesh +++ b/src/bgp/bgp_peer.sandesh @@ -305,6 +305,7 @@ struct ShowRoutingInstance { 9: string deleted_at; // Delete timestamp 2: optional list tables; 11: optional list routing_policies; + 14: optional list neighbors; } response sandesh ShowRoutingInstanceResp { diff --git a/src/bgp/bgp_show_routing_instance.cc b/src/bgp/bgp_show_routing_instance.cc index 55473aaed17..207ce1345a8 100644 --- a/src/bgp/bgp_show_routing_instance.cc +++ b/src/bgp/bgp_show_routing_instance.cc @@ -7,9 +7,11 @@ #include #include "bgp/bgp_membership.h" +#include "bgp/bgp_peer.h" #include "bgp/bgp_peer_internal_types.h" #include "bgp/bgp_server.h" #include "bgp/bgp_table.h" +#include "bgp/routing-instance/peer_manager.h" #include "bgp/routing-instance/routing_instance.h" #include "bgp/routing-policy/routing_policy.h" @@ -63,27 +65,39 @@ static void FillRoutingInstanceInfo(ShowRoutingInstance *sri, sri->set_export_target(export_rt); sri->set_always_subscribe(rtinstance->always_subscribe()); - if (!summary) { - const BgpMembershipManager *bmm = bsc->bgp_server->membership_mgr(); - vector srit_list; - const RoutingInstance::RouteTableList &tables = rtinstance->GetTables(); - for (RoutingInstance::RouteTableList::const_iterator it = - tables.begin(); it != tables.end(); ++it) { - ShowRoutingInstanceTable srit; - FillRoutingInstanceTableInfo(&srit, bsc, it->second); - bmm->FillRoutingInstanceTableInfo(&srit, it->second); - srit_list.push_back(srit); - } - sri->set_tables(srit_list); - vector policy_list; - BOOST_FOREACH(RoutingPolicyInfo info, rtinstance->routing_policies()) { - ShowInstanceRoutingPolicyInfo show_policy_info; - RoutingPolicyPtr policy = info.first; - show_policy_info.set_policy_name(policy->name()); - show_policy_info.set_generation(info.second); - policy_list.push_back(show_policy_info); + if (summary) + return; + + const BgpMembershipManager *bmm = bsc->bgp_server->membership_mgr(); + vector srit_list; + const RoutingInstance::RouteTableList &tables = rtinstance->GetTables(); + for (RoutingInstance::RouteTableList::const_iterator it = + tables.begin(); it != tables.end(); ++it) { + ShowRoutingInstanceTable srit; + FillRoutingInstanceTableInfo(&srit, bsc, it->second); + bmm->FillRoutingInstanceTableInfo(&srit, it->second); + srit_list.push_back(srit); + } + sri->set_tables(srit_list); + + vector policy_list; + BOOST_FOREACH(RoutingPolicyInfo info, rtinstance->routing_policies()) { + ShowInstanceRoutingPolicyInfo show_policy_info; + RoutingPolicyPtr policy = info.first; + show_policy_info.set_policy_name(policy->name()); + show_policy_info.set_generation(info.second); + policy_list.push_back(show_policy_info); + } + sri->set_routing_policies(policy_list); + + const PeerManager *peer_manager = rtinstance->peer_manager(); + if (peer_manager) { + vector neighbors; + for (const BgpPeer *peer = peer_manager->NextPeer(BgpPeerKey()); + peer != NULL; peer = peer_manager->NextPeer(peer->peer_key())) { + neighbors.push_back(peer->peer_name()); } - sri->set_routing_policies(policy_list); + sri->set_neighbors(neighbors); } }