Skip to content

Commit

Permalink
Add neighbor info to routing instance introspect
Browse files Browse the repository at this point in the history
Change-Id: Ic6d9738707346c9290de0336cb34d52fd4efe1ea
Closes-Bug: 1668728
  • Loading branch information
Nischal Sheth committed Mar 2, 2017
1 parent 127c2f1 commit 9d26289
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 20 deletions.
1 change: 1 addition & 0 deletions src/bgp/bgp_peer.sandesh
Expand Up @@ -265,6 +265,7 @@ struct ShowRoutingInstance {
9: string deleted_at; // Delete timestamp
2: optional list<ShowRoutingInstanceTable> tables;
11: optional list<ShowInstanceRoutingPolicyInfo> routing_policies;
14: optional list<string> neighbors;
}

response sandesh ShowRoutingInstanceResp {
Expand Down
55 changes: 35 additions & 20 deletions src/bgp/bgp_show_routing_instance.cc
Expand Up @@ -6,8 +6,10 @@

#include <boost/foreach.hpp>

#include "bgp/bgp_peer.h"
#include "bgp/bgp_peer_internal_types.h"
#include "bgp/bgp_peer_membership.h"
#include "bgp/routing-instance/peer_manager.h"
#include "bgp/routing-instance/routing_instance.h"
#include "bgp/routing-policy/routing_policy.h"

Expand Down Expand Up @@ -61,27 +63,40 @@ static void FillRoutingInstanceInfo(ShowRoutingInstance *sri,
sri->set_export_target(export_rt);
sri->set_always_subscribe(rtinstance->always_subscribe());

if (!summary) {
const PeerRibMembershipManager *pmm = bsc->bgp_server->membership_mgr();
vector<ShowRoutingInstanceTable> 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);
pmm->FillRoutingInstanceTableInfo(&srit, it->second);
srit_list.push_back(srit);
}
sri->set_tables(srit_list);
vector<ShowInstanceRoutingPolicyInfo> 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 PeerRibMembershipManager *pmm = bsc->bgp_server->membership_mgr();
vector<ShowRoutingInstanceTable> 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);
pmm->FillRoutingInstanceTableInfo(&srit, it->second);
srit_list.push_back(srit);
}
sri->set_tables(srit_list);

vector<ShowInstanceRoutingPolicyInfo> 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<string> neighbors;
BgpPeerKey key;
for (const BgpPeer *peer = peer_manager->NextPeer(key); peer != NULL;
key = peer->peer_key(), peer = peer_manager->NextPeer(key)) {
neighbors.push_back(peer->peer_name());
}
sri->set_routing_policies(policy_list);
sri->set_neighbors(neighbors);
}
}

Expand Down

0 comments on commit 9d26289

Please sign in to comment.