diff --git a/src/bgp/bgp_peer.sandesh b/src/bgp/bgp_peer.sandesh index dadda600d38..08abd82d983 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); } }