Skip to content

Commit

Permalink
Merge "Further improvements to BGPRouterInfo UVE" into R2.20
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Jul 10, 2015
2 parents 926b349 + 463cfee commit 0045dcb
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 23 deletions.
33 changes: 27 additions & 6 deletions src/bgp/bgp_server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -368,12 +368,22 @@ uint32_t BgpServer::get_output_queue_depth() const {
return out_q_depth;
}

uint32_t BgpServer::num_pending_service_chains() const {
return service_chain_mgr_->PendingQueueSize();
uint32_t BgpServer::num_service_chains() const {
return service_chain_mgr_->PendingQueueSize() +
service_chain_mgr_->ResolvedQueueSize();
}

uint32_t BgpServer::num_pending_static_routes() const {
return GetPendingStaticRouteCount();
uint32_t BgpServer::num_down_service_chains() const {
return service_chain_mgr_->PendingQueueSize() +
service_chain_mgr_->GetDownServiceChainCount();
}

uint32_t BgpServer::num_static_routes() const {
return GetStaticRouteCount();
}

uint32_t BgpServer::num_down_static_routes() const {
return GetDownStaticRouteCount();
}

void BgpServer::VisitBgpPeers(BgpServer::VisitorFn fn) const {
Expand Down Expand Up @@ -495,13 +505,24 @@ void BgpServer::NotifyAllStaticRoutes() {
}
}

uint32_t BgpServer::GetPendingStaticRouteCount() const {
uint32_t BgpServer::GetStaticRouteCount() const {
CHECK_CONCURRENCY("bgp::Config");
uint32_t count = 0;
for (StaticRouteMgrList::iterator it = srt_manager_list_.begin();
it != srt_manager_list_.end(); ++it) {
StaticRouteMgr *srt_manager = *it;
count += srt_manager->GetRouteCount();
}
return count;
}

uint32_t BgpServer::GetDownStaticRouteCount() const {
CHECK_CONCURRENCY("bgp::Config");
uint32_t count = 0;
for (StaticRouteMgrList::iterator it = srt_manager_list_.begin();
it != srt_manager_list_.end(); ++it) {
StaticRouteMgr *srt_manager = *it;
count += srt_manager->GetPendingRouteCount();
count += srt_manager->GetDownRouteCount();
}
return count;
}
12 changes: 9 additions & 3 deletions src/bgp/bgp_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ class BgpServer {
as_t autonomous_system() const { return autonomous_system_; }
as_t local_autonomous_system() const { return local_autonomous_system_; }
uint32_t bgp_identifier() const { return bgp_identifier_.to_ulong(); }
std::string bgp_identifier_string() const {
return bgp_identifier_.to_string();
}
uint16_t hold_time() const { return hold_time_; }

// Status
Expand All @@ -141,8 +144,10 @@ class BgpServer {

uint32_t get_output_queue_depth() const;

uint32_t num_pending_service_chains() const;
uint32_t num_pending_static_routes() const;
uint32_t num_service_chains() const;
uint32_t num_down_service_chains() const;
uint32_t num_static_routes() const;
uint32_t num_down_static_routes() const;

void IncUpPeerCount() {
num_up_peer_++;
Expand Down Expand Up @@ -170,7 +175,8 @@ class BgpServer {
void InsertStaticRouteMgr(StaticRouteMgr *srt_manager);
void RemoveStaticRouteMgr(StaticRouteMgr *srt_manager);
void NotifyAllStaticRoutes();
uint32_t GetPendingStaticRouteCount() const;
uint32_t GetStaticRouteCount() const;
uint32_t GetDownStaticRouteCount() const;

private:
class ConfigUpdater;
Expand Down
12 changes: 12 additions & 0 deletions src/bgp/routing-instance/service_chaining.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1020,6 +1020,18 @@ void ServiceChainMgr::PeerRegistrationCallback(IPeer *peer, BgpTable *table,
Enqueue(req);
}

uint32_t ServiceChainMgr::GetDownServiceChainCount() const {
uint32_t count = 0;
for (ServiceChainMap::const_iterator it = chain_set_.begin();
it != chain_set_.end(); ++it) {
const ServiceChain *chain =
static_cast<const ServiceChain *>(it->second.get());
if (!chain->connected_route_valid())
count++;
}
return count;
}

void ServiceChain::FillServiceChainInfo(ShowServicechainInfo *info) const {
info->set_src_rt_instance(src_routing_instance()->name());
info->set_connected_rt_instance(connected_routing_instance()->name());
Expand Down
2 changes: 2 additions & 0 deletions src/bgp/routing-instance/service_chaining.h
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,8 @@ class ServiceChainMgr {
void StartResolve();
bool ResolvePendingServiceChain();
size_t PendingQueueSize() const { return pending_chain_.size(); }
size_t ResolvedQueueSize() const { return chain_set_.size(); }
uint32_t GetDownServiceChainCount() const;

void Enqueue(ServiceChainRequest *req);

Expand Down
7 changes: 6 additions & 1 deletion src/bgp/routing-instance/static_route.cc
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,12 @@ void StaticRouteMgr::NotifyAllRoutes() {
}
}

uint32_t StaticRouteMgr::GetPendingRouteCount() const {
uint32_t StaticRouteMgr::GetRouteCount() const {
CHECK_CONCURRENCY("bgp::Config");
return static_route_map_.size();
}

uint32_t StaticRouteMgr::GetDownRouteCount() const {
CHECK_CONCURRENCY("bgp::Config");
uint32_t count = 0;
for (StaticRouteMap::const_iterator it = static_route_map_.begin();
Expand Down
3 changes: 2 additions & 1 deletion src/bgp/routing-instance/static_route.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ class StaticRouteMgr {

bool ResolvePendingStaticRouteConfig();
void NotifyAllRoutes();
uint32_t GetPendingRouteCount() const;
uint32_t GetRouteCount() const;
uint32_t GetDownRouteCount() const;

RoutingInstance *routing_instance() { return instance_; }

Expand Down
54 changes: 44 additions & 10 deletions src/control-node/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,25 @@ bool ControlNodeInfoLogger(BgpServer *server,
CpuLoadInfo cpu_load_info;
CpuLoadData::FillCpuInfo(cpu_load_info, false);
state.set_name(server->localname());

string router_id = server->bgp_identifier_string();
if (router_id != prev_state.get_router_id() || first) {
state.set_router_id(router_id);
prev_state.set_router_id(router_id);
}

uint32_t local_asn = server->local_autonomous_system();
if (local_asn != prev_state.get_local_asn() || first) {
state.set_local_asn(local_asn);
prev_state.set_local_asn(local_asn);
}

uint32_t global_asn = server->autonomous_system();
if (global_asn != prev_state.get_global_asn() || first) {
state.set_global_asn(global_asn);
prev_state.set_global_asn(global_asn);
}

if (first) {
state.set_uptime(start_time);
vector<string> ip_list;
Expand Down Expand Up @@ -379,19 +398,35 @@ bool ControlNodeInfoLogger(BgpServer *server,
change = true;
}

uint32_t num_pending_chains = server->num_pending_service_chains();
if (num_pending_chains != prev_state.get_num_pending_service_chains() ||
uint32_t num_service_chains = server->num_service_chains();
if (num_service_chains != prev_state.get_num_service_chains() ||
first) {
state.set_num_service_chains(num_service_chains);
prev_state.set_num_service_chains(num_service_chains);
change = true;
}

uint32_t num_down_service_chains = server->num_down_service_chains();
if (num_down_service_chains != prev_state.get_num_down_service_chains() ||
first) {
state.set_num_down_service_chains(num_down_service_chains);
prev_state.set_num_down_service_chains(num_down_service_chains);
change = true;
}

uint32_t num_static_routes = server->num_static_routes();
if (num_static_routes != prev_state.get_num_static_routes() ||
first) {
state.set_num_pending_service_chains(num_pending_chains);
prev_state.set_num_pending_service_chains(num_pending_chains);
state.set_num_static_routes(num_static_routes);
prev_state.set_num_static_routes(num_static_routes);
change = true;
}

uint32_t num_pending_statics = server->num_pending_static_routes();
if (num_pending_statics != prev_state.get_num_pending_static_routes() ||
uint32_t num_down_static_routes = server->num_down_static_routes();
if (num_down_static_routes != prev_state.get_num_down_static_routes() ||
first) {
state.set_num_pending_static_routes(num_pending_statics);
prev_state.set_num_pending_static_routes(num_pending_statics);
state.set_num_down_static_routes(num_down_static_routes);
prev_state.set_num_down_static_routes(num_down_static_routes);
change = true;
}

Expand Down Expand Up @@ -421,8 +456,7 @@ bool ControlNodeInfoLogger(BgpServer *server,
if (change)
BGPRouterInfo::Send(state);

if (first) first = false;

first = false;
return true;
}

Expand Down
9 changes: 7 additions & 2 deletions src/control-node/sandesh/control_node.sandesh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ include "ifmap/ifmap_server_show.sandesh"

struct BgpRouterState {
1: string name (key="ObjectBgpRouter")
27: optional string router_id;
28: optional u32 local_asn;
29: optional u32 global_asn;
2: optional bool deleted
3: optional u64 uptime;
4: optional cpuinfo.CpuLoadInfo cpu_info;
Expand All @@ -23,8 +26,10 @@ struct BgpRouterState {
21: optional u32 num_closing_xmpp_peer;
12: optional u32 num_routing_instance;
22: optional u32 num_deleted_routing_instance;
23: optional u32 num_pending_service_chains;
24: optional u32 num_pending_static_routes;
23: optional u32 num_service_chains;
24: optional u32 num_down_service_chains;
25: optional u32 num_static_routes;
26: optional u32 num_down_static_routes;
13: optional string build_info;
14: optional string collector_ip;
15: optional list<string> bgp_router_ip_list;
Expand Down

0 comments on commit 0045dcb

Please sign in to comment.