7 #include <boost/assign/list_of.hpp>
8 #include <boost/foreach.hpp>
9 #include <sandesh/request_pipeline.h>
14 #include "bgp/bgp_peer_internal_types.h"
23 using boost::assign::list_of;
33 const ShowNeighborStatisticsReq *req,
BgpServer *bgp_server);
37 const ShowNeighborStatisticsReq *req,
BgpServer *bgp_server) {
40 if (req->get_bgp_or_xmpp().empty() ||
41 boost::iequals(req->get_bgp_or_xmpp(),
"bgp")) {
43 if (!req->get_domain().empty()) {
51 for (; it != rim->
end(); it++) {
66 const ShowNeighborStatisticsReq *req;
69 req =
static_cast<const ShowNeighborStatisticsReq *
>(ps.
snhRequest_.get());
76 if (req->get_bgp_or_xmpp().empty() ||
77 boost::iequals(req->get_bgp_or_xmpp(),
"xmpp")) {
81 ShowNeighborStatisticsResp *resp =
new ShowNeighborStatisticsResp;
82 resp->set_bgp_or_xmpp(req->get_bgp_or_xmpp());
83 resp->set_up_or_down(req->get_up_or_down());
84 resp->set_domain(req->get_domain());
85 resp->set_count(count);
86 resp->set_context(req->context());
92 void ShowNeighborStatisticsReq::HandleRequest()
const {
102 ps.stages_= list_of(s1)
103 .convert_to_container<vector<RequestPipeline::StageSpec> >();
117 const ClearBgpNeighborReq *req;
120 req =
static_cast<const ClearBgpNeighborReq *
>(ps.
snhRequest_.get());
124 ClearBgpNeighborResp *resp =
new ClearBgpNeighborResp;
126 resp->set_success(
false);
129 resp->set_success(
true);
131 resp->set_success(
false);
133 resp->set_context(req->context());
140 void ClearBgpNeighborReq::HandleRequest()
const {
149 ps.stages_= list_of(s1)
150 .convert_to_container<vector<RequestPipeline::StageSpec> >();
165 ShowMulticastTreeLink *smtl) {
166 smtl->set_address(forwarder->
address().to_string());
167 smtl->set_label(forwarder->
label());
171 ShowMulticastForwarder *smf) {
172 smf->set_address(forwarder->
address().to_string());
173 smf->set_label(forwarder->
label());
175 smf->set_router_id(forwarder->
router_id().to_string());
176 for (McastForwarderList::const_iterator it =
179 ShowMulticastTreeLink smtl;
181 smf->links.push_back(smtl);
186 ShowMulticastTree *smt) {
187 smt->set_group(sg->
group().to_string());
188 smt->set_source(sg->
source().to_string());
193 for (McastSGEntry::ForwarderSet::const_iterator it =
196 ShowMulticastForwarder smf;
199 smt->level0_forwarders.push_back(smf);
201 smt->level1_forwarders.push_back(smf);
211 for (McastManagerPartition::SGList::const_iterator it =
213 it != partition->
sg_list_.end(); it++) {
214 ShowMulticastTree smt;
222 int stage,
int instNum,
224 int inst_id = ps.
stages_[stage].instances_[instNum];
228 const ShowMulticastManagerDetailReq *req =
229 static_cast<const ShowMulticastManagerDetailReq *
>(
236 if (mcast_table && !mcast_table->
IsVpnTable())
244 vector<ShowMulticastTree> *tree_list) {
245 for (
size_t idx = 0; idx < sd->size(); idx++) {
248 tree_list->insert(tree_list->end(),
255 int stage,
int instNum,
257 const ShowMulticastManagerReq *req =
258 static_cast<const ShowMulticastManagerReq *
>(ps.
snhRequest_.get());
260 vector<ShowMulticastTree> tree_list;
263 ShowMulticastManagerDetailResp *resp =
264 new ShowMulticastManagerDetailResp;
265 resp->set_trees(tree_list);
266 resp->set_context(req->context());
273 void ShowMulticastManagerDetailReq::HandleRequest()
const {
293 ps.stages_ = list_of(s1)(s2)
294 .convert_to_container<vector<RequestPipeline::StageSpec> >();
309 ShowMvpnNeighbor *snbr) {
311 snbr->set_originator(nbr->
originator().to_string());
322 BOOST_FOREACH(
const MvpnManager::NeighborMap::value_type &val,
324 ShowMvpnNeighbor snbr;
332 int stage,
int instNum,
334 int inst_id = ps.
stages_[stage].instances_[instNum];
338 const ShowMvpnManagerDetailReq *req =
339 static_cast<const ShowMvpnManagerDetailReq *
>(
349 ShowMvpnManagerDetailResp *resp =
new ShowMvpnManagerDetailResp;
351 resp->set_context(req->context());
358 void ShowMvpnManagerDetailReq::HandleRequest()
const {
367 ps.stages_ = list_of(s1)
368 .convert_to_container<vector<RequestPipeline::StageSpec> >();
385 st->set_source(state->
sg().
source.to_string());
386 st->set_group(state->
sg().
group.to_string());
388 st->set_global_ermvpn_tree_rt(
396 vector<string> spmsi_routes_received;
398 spmsi_routes_received.push_back(rt->
ToString());
400 st->set_spmsi_routes_received(spmsi_routes_received);
402 vector<string> leafad_routes_attr_received;
403 BOOST_FOREACH(
const MvpnState::RoutesMap::value_type &val,
407 leafad_routes_attr_received.push_back(
411 st->set_leafad_routes_attr_received(leafad_routes_attr_received);
412 st->set_total_states(state->
states()->size());
414 st->set_refcount(state->
refcount());
422 BOOST_FOREACH(MvpnState::StatesMap::value_type &val,
426 data->
states.push_back(st);
432 int stage,
int instNum,
434 int inst_id = ps.
stages_[stage].instances_[instNum];
438 const ShowMvpnProjectManagerDetailReq *req =
439 static_cast<const ShowMvpnProjectManagerDetailReq *
>(
446 if (ermvpn_table && !ermvpn_table->
IsVpnTable())
454 vector<ShowMvpnState> *states) {
455 for (
size_t idx = 0; idx < sd->size(); idx++) {
458 states->insert(states->end(),
465 int stage,
int instNum,
467 const ShowMvpnProjectManagerReq *req =
468 static_cast<const ShowMvpnProjectManagerReq *
>(
471 vector<ShowMvpnState> states;
474 ShowMvpnProjectManagerDetailResp *resp =
475 new ShowMvpnProjectManagerDetailResp;
476 resp->set_states(states);
477 resp->set_context(req->context());
484 void ShowMvpnProjectManagerDetailReq::HandleRequest()
const {
504 ps.stages_ = list_of(s1)(s2)
505 .convert_to_container<vector<RequestPipeline::StageSpec> >();
521 int stage,
int instNum,
524 const ShowRouteVrfReq *req =
525 static_cast<const ShowRouteVrfReq *
>(ps.
snhRequest_.get());
530 if (!ri)
return true;
532 if (!table)
return true;
538 if (!route)
return true;
539 ShowRoute show_route;
540 show_route.set_prefix(route->
ToString());
543 vector<ShowRoutePath> show_route_paths;
544 for (Route::PathList::const_iterator it = route->
GetPathList().begin();
546 const BgpPath *path =
static_cast<const BgpPath *
>(it.operator->());
548 srp.set_protocol(
"BGP");
556 srp.set_next_hop(attr->
nexthop().to_string());
558 show_route_paths.push_back(srp);
560 show_route.set_paths(show_route_paths);
561 sdata->
routes.push_back(show_route);
567 int stage,
int instNum,
571 for (
size_t i = 0; i < sd->size(); i++) {
575 route = data.
routes.front();
580 ShowRouteVrfResp *resp =
new ShowRouteVrfResp;
581 resp->set_route(route);
582 const ShowRouteVrfReq *req =
583 static_cast<const ShowRouteVrfReq *
>(ps.
snhRequest_.get());
584 resp->set_context(req->context());
590 void ShowRouteVrfReq::HandleRequest()
const {
611 ps.stages_ = list_of(s1)(s2)
612 .convert_to_container<vector<RequestPipeline::StageSpec> >();
621 const ShowBgpServerReq *req =
622 static_cast<const ShowBgpServerReq *
>(ps.
snhRequest_.get());
626 ShowBgpServerResp *resp =
new ShowBgpServerResp;
627 SocketIOStats peer_socket_stats;
629 resp->set_rx_socket_stats(peer_socket_stats);
632 resp->set_tx_socket_stats(peer_socket_stats);
634 resp->set_context(req->context());
640 void ShowBgpServerReq::HandleRequest()
const {
650 ps.stages_ = list_of(s1)
651 .convert_to_container<vector<RequestPipeline::StageSpec> >();
657 xmpp_peer_manager(NULL),
671 bool summary, uint32_t page_limit, uint32_t iter_limit,
672 const string &start_neighbor,
const string &search_string,
673 vector<BgpNeighborResp> *list,
string *next_neighbor)
const {
677 start_neighbor, search_string, list, next_neighbor);
682 size_t *count,
const ShowNeighborStatisticsReq *req)
const {
696 const ShowBgpPeeringConfigReq *req) {
700 ShowBgpPeeringConfigResp *resp =
new ShowBgpPeeringConfigResp;
706 const ShowBgpPeeringConfigReqIterate *req_iterate) {
710 ShowBgpPeeringConfigResp *resp =
new ShowBgpPeeringConfigResp;
const AsPathSpec & path() const
uint32_t local_pref() const
const AsPath * as_path() const
void set_as_path(AsPathPtr aspath)
const IpAddress & nexthop() const
uint32_t GetLabel() const
const BgpAttr * GetAttr() const
RoutingInstanceMgr * routing_instance_mgr()
BgpPeer * FindPeer(const std::string &name)
BgpSessionManager * session_manager()
static bool CallbackS1(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
const uint64_t last_change_at() const
const std::string & name() const
DBEntry * Find(const DBEntry *entry)
DBTableBase * FindTable(const std::string &name)
virtual std::string ToString() const
virtual bool IsVpnTable() const
MvpnProjectManager * mvpn_project_manager()
static const int kPartitionCount
McastTreeManager * GetTreeManager()
virtual const std::string & ToString() const =0
virtual std::string ToString() const
static Ip4Prefix FromString(const std::string &str, boost::system::error_code *errorp=NULL)
std::string ToString() const
const LabelBlock * label_block() const
Ip4Address router_id() const
Ip4Address address() const
McastForwarderList tree_links_
std::vector< ForwarderSet * > forwarder_sets_
Ip4Address source() const
bool IsTreeBuilder(uint8_t level) const
McastManagerPartition * GetPartition(int part_id)
std::shared_mutex & neighbors_mutex()
const NeighborMap & neighbors() const
const MvpnState::StatesMap & states() const
MvpnProjectManagerPartition * GetPartition(int part_id)
virtual std::string ToString() const
const StatesMap * states() const
RoutesMap & leafad_routes_attr_received()
ErmVpnRoute * global_ermvpn_tree_rt()
RoutesSet & spmsi_routes_received()
MvpnRoute * source_active_rt()
MvpnProjectManager * project_manager()
const MvpnManager * manager() const
virtual bool IsVpnTable() const
const uint64_t time_stamp_usecs() const
size_t GetNeighborCount(std::string up_or_down)
const PmsiTunnelSpec & pmsi_tunnel() const
boost::ptr_vector< InstData > StageData
std::string ToString() const
const PathList & GetPathList() const
RoutingInstanceIterator end()
RoutingInstanceList::iterator RoutingInstanceIterator
RoutingInstance * GetRoutingInstance(const std::string &name)
RoutingInstanceIterator begin()
PeerManager * peer_manager()
BgpTable * GetTable(Address::Family fmly)
static bool CallbackS1(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static void FillMulticastLinkInfo(const McastForwarder *forwarder, ShowMulticastTreeLink *smtl)
static void FillMulticastForwarderInfo(const McastForwarder *forwarder, ShowMulticastForwarder *smf)
static RequestPipeline::InstData * CreateData(int stage)
static void FillMulticastPartitionInfo(MulticastManagerDetailData *data, ErmVpnTable *table, int inst_id)
static void CombineMulticastPartitionInfo(const RequestPipeline::StageData *sd, vector< ShowMulticastTree > *tree_list)
static bool CallbackS2(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static bool CallbackS1(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static void FillMulticastTreeInfo(const McastSGEntry *sg, ShowMulticastTree *smt)
static void FillMvpnNeighborInfo(const MvpnNeighbor *nbr, ShowMvpnNeighbor *snbr)
static bool CallbackS1(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static RequestPipeline::InstData * CreateData(int stage)
static void FillMvpnNeighborsInfo(MvpnManagerDetailData *data, MvpnTable *table, int inst_id)
static void CombineMvpnProjectPartitionInfo(const RequestPipeline::StageData *sd, vector< ShowMvpnState > *states)
static bool CallbackS2(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static bool CallbackS1(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static void FillMvpnProjectPartitionInfo(MvpnProjectManagerDetailData *data, ErmVpnTable *table, int inst_id)
static void FillMvpnProjectStateInfo(const MvpnState *state, ShowMvpnState *st)
static RequestPipeline::InstData * CreateData(int stage)
static bool CallbackS1(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static size_t FillBgpNeighborStatistics(const ShowNeighborStatisticsReq *req, BgpServer *bgp_server)
static RequestPipeline::InstData * CreateData(int stage)
static bool CallbackS2(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
static bool CallbackS1(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
int GetTaskId(const std::string &name)
static TaskScheduler * GetInstance()
void GetRxSocketStats(SocketIOStats *socket_stats) const
void GetTxSocketStats(SocketIOStats *socket_stats) const
virtual std::string ToString() const
void SetPeeringShowHandlers(const PeeringReqHandler &show_peering_req_handler, const PeeringReqIterateHandler &show_peering_req_iterate_handler)
void SetNeighborShowExtensions(const NeighborListExtension &show_neighbor, const NeighborStatisticsExtension &show_neighbor_statistics)
NeighborStatisticsExtension show_neighbor_statistics_ext_
void ShowNeighborStatisticsExtension(size_t *count, const ShowNeighborStatisticsReq *req) const
bool ShowNeighborExtension(const BgpSandeshContext *bsc, bool summary, uint32_t page_limit, uint32_t iter_limit, const std::string &start_neighbor, const std::string &search_string, std::vector< BgpNeighborResp > *list, std::string *next_neighbor) const
PeeringReqIterateHandler show_peering_req_iterate_handler_
uint32_t iter_limit() const
boost::function< bool(const BgpSandeshContext *, bool, uint32_t, uint32_t, const std::string &, const std::string &, std::vector< BgpNeighborResp > *, std::string *)> NeighborListExtension
boost::function< void(size_t *, const BgpSandeshContext *, const ShowNeighborStatisticsReq *)> NeighborStatisticsExtension
boost::function< void(const BgpSandeshContext *, const ShowBgpPeeringConfigReq *)> PeeringReqHandler
uint32_t page_limit() const
boost::function< void(const BgpSandeshContext *, const ShowBgpPeeringConfigReqIterate *)> PeeringReqIterateHandler
PeeringReqHandler show_peering_req_handler_
void PeeringShowReqHandler(const ShowBgpPeeringConfigReq *req)
NeighborListExtension show_neighbor_ext_
void PeeringShowReqIterateHandler(const ShowBgpPeeringConfigReqIterate *req_iterate)
const IpAddress & originator() const
uint32_t source_as() const
const RouteDistinguisher & rd() const
virtual std::string ToString() const
boost::shared_ptr< const SandeshRequest > snhRequest_
const StageData * GetStageData(int stage) const
std::vector< StageSpec > stages_
std::vector< int > instances_
vector< ShowMulticastTree > tree_list
vector< ShowMvpnNeighbor > neighbors
vector< ShowMvpnState > states
vector< ShowRoute > routes
static const std::string duration_usecs_to_string(const uint64_t usecs)
static uint64_t UTCTimestampUsec()