8 #include <boost/foreach.hpp>
9 #include <boost/assign/list_of.hpp>
10 #include <boost/functional/hash.hpp>
28 #include "bgp/routing-instance/routing_table_types.h"
33 using boost::assign::list_of;
34 using boost::system::error_code;
37 using std::ostringstream;
67 instance_config_lists_(
69 default_rtinstance_(NULL),
71 asn_listener_id_(server->RegisterASNUpdateCallback(
73 identifier_listener_id_(server->RegisterIdentifierUpdateCallback(
76 dormant_trace_buf_size_(
77 GetEnvRoutingInstanceDormantTraceBufferCapacity()),
79 GetEnvRoutingInstanceDormantTraceBufferThreshold()),
81 server_delete_ref_(this, server->
deleter()) {
84 for (
int idx = 0; idx < hw_thread_count; ++idx) {
104 const string &network)
const {
105 std::scoped_lock lock(
mutex_);
107 MvpnProjectManagerNetworks::const_iterator iter =
111 return iter->second.size();
152 std::scoped_lock lock(
mutex_);
153 for (RoutingInstance::RouteTargetList::const_iterator it =
171 std::scoped_lock lock(
mutex_);
172 for (RoutingInstance::RouteTargetList::const_iterator it =
176 for (InstanceTargetMap::iterator loc =
target_map_.find(*it);
177 loc !=
target_map_.end() && loc->first == *it; ++loc) {
178 if (loc->second == rti) {
191 InstanceTargetMap::const_iterator loc =
target_map_.find(rtarget);
202 std::scoped_lock lock(
mutex_);
213 std::scoped_lock lock(
mutex_);
218 for (VnIndexMap::iterator loc =
vn_index_map_.find(vn_index);
219 loc !=
vn_index_map_.end() && loc->first == vn_index; ++loc) {
220 if (loc->second == rti) {
231 int vn_index)
const {
232 VnIndexMap::const_iterator loc =
vn_index_map_.find(vn_index);
242 int vn_index)
const {
257 for (InstanceTargetMap::const_iterator loc =
target_map_.find(rtarget);
258 loc !=
target_map_.end() && loc->first == rtarget; ++loc) {
259 int ri_vn_index = loc->second->virtual_network_index();
260 if (vn_index && ri_vn_index && ri_vn_index != vn_index)
262 vn_index = ri_vn_index;
285 if (rtgt_vn_index < 0 ||
286 (vn_index && rtgt_vn_index && rtgt_vn_index != vn_index)) {
289 }
else if (rtgt_vn_index) {
290 vn_index = rtgt_vn_index;
299 std::scoped_lock lock(
mutex_);
300 size_t i =
bmap_.find_first();
301 if (i ==
bmap_.npos) {
315 std::scoped_lock lock(
mutex_);
317 if ((
size_t) listener ==
callbacks_.size() - 1) {
325 if ((
size_t) listener >=
bmap_.size()) {
326 bmap_.resize(listener + 1);
333 std::scoped_lock lock(
mutex_);
334 for (InstanceOpListenersList::iterator iter =
callbacks_.begin();
369 RoutingInstanceList::iterator iter =
instances_.find(name);
376 const string &name)
const {
377 RoutingInstanceList::const_iterator iter =
instances_.find(name);
384 const string &name) {
385 std::scoped_lock lock(
mutex_);
386 RoutingInstanceList::iterator iter =
instances_.find(name);
393 std::scoped_lock lock(
mutex_);
406 "Instance recreated before pending deletion is complete");
416 static boost::hash<string> string_hash;
432 const string &virtual_network,
const string &instance_name) {
433 std::scoped_lock lock(
mutex_);
435 VirtualNetworksMap::iterator iter;
439 assert(iter->second.insert(instance_name).second);
444 const string &virtual_network,
const string &instance_name) {
445 std::scoped_lock lock(
mutex_);
451 assert(iter->second.erase(instance_name) == 1);
453 RoutingInstanceStatsData instance_info;
454 bool mapping_deleted = iter->second.empty();
457 if (mapping_deleted) {
461 instance_info.set_deleted(
true);
465 map<string, RoutingTableStats> stats_map;
466 stats_map.insert(make_pair(instance_name, RoutingTableStats()));
467 stats_map[instance_name].set_deleted(
true);
477 instance_info.set_name(virtual_network);
478 assert(!instance_info.get_name().empty());
481 return mapping_deleted;
485 const map<string, RoutingTableStats> &stats_map,
486 RoutingInstanceStatsData *instance_info)
const {
494 instance_info->set_raw_ipv4_stats(stats_map);
497 instance_info->set_raw_ipv6_stats(stats_map);
500 instance_info->set_raw_inetvpn_stats(stats_map);
503 instance_info->set_raw_inet6vpn_stats(stats_map);
506 instance_info->set_raw_rtarget_stats(stats_map);
509 instance_info->set_raw_evpn_stats(stats_map);
512 instance_info->set_raw_ermvpn_stats(stats_map);
515 instance_info->set_raw_mvpn_stats(stats_map);
523 uint32_t out_q_depth = 0;
526 RoutingInstanceStatsData instance_info;
527 map<string, RoutingTableStats> stats_map;
529 stats_map.insert(make_pair(rit->second->name(), RoutingTableStats()));
531 rit->second->GetTables();
534 for (RoutingInstance::RouteTableList::const_iterator it =
535 rt_list.begin(); it != rt_list.end(); ++it) {
541 stats_map[rit->second->name()].set_prefixes(table->
Size());
542 stats_map[rit->second->name()].set_primary_paths(
544 stats_map[rit->second->name()].set_secondary_paths(
546 stats_map[rit->second->name()].set_infeasible_paths(
552 stats_map[rit->second->name()].set_total_paths(total_paths);
557 instance_info.set_name(rit->second->GetVirtualNetworkName());
558 assert(!instance_info.get_name().empty());
567 RoutingInstance *rtinstance = BgpStaticObjectFactory::Create<RoutingInstance>(
569 uint32_t ri_index = config->
index();
586 vector<string> import_rt(config->
import_list().begin(),
588 vector<string> export_rt(config->
export_list().begin(),
628 vector<string> import_rt(config->
import_list().begin(),
630 vector<string> export_rt(config->
export_list().begin(),
651 if (rtinstance && rtinstance->
deleted()) {
654 "Duplicate instance delete while pending deletion");
656 }
else if (!rtinstance) {
658 name, name,
"Instance not found during delete");
692 const string name = rtinstance->
name();
693 RoutingInstanceList::iterator loc =
instances_.find(rtinstance->
name());
696 int index = rtinstance->
index();
721 const std::string &name) {
725 if (trace_buf == NULL) {
733 const std::string &name) {
734 tbb::spin_rw_mutex::scoped_lock write_lock(
rw_mutex_,
true);
736 RoutingInstanceTraceBufferMap::iterator iter;
747 trace_buf = iter->second;
763 tbb::spin_rw_mutex::scoped_lock write_lock(
rw_mutex_,
true);
766 RoutingInstanceTraceBufferMap::iterator iter;
767 std::pair<RoutingInstanceTraceBufferMap::iterator, bool> ret;
773 trace_buf = iter->second;
787 for (
size_t i = 0; i < del_count; i++) {
791 trace_buf_delete = iter->second;
794 trace_buf_delete.reset();
798 assert(ret.second ==
true);
808 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
809 RoutingInstanceTraceBufferMap::const_iterator iter =
821 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
822 RoutingInstanceTraceBufferMap::const_iterator iter =
834 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
835 RoutingInstanceTraceBufferMap::const_iterator iter =
843 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
844 RoutingInstanceTraceBufferMap::const_iterator iter =
851 char *buffer_capacity_str = getenv(
852 "CONTRAIL_ROUTING_INSTANCE_DORMANT_TRACE_BUFFER_SIZE");
854 if (buffer_capacity_str) {
855 size_t env_buffer_capacity = strtoul(buffer_capacity_str, NULL, 0);
856 return env_buffer_capacity;
863 char *buffer_threshold_str = getenv(
864 "CONTRAIL_ROUTING_INSTANCE_DORMANT_TRACE_BUFFER_THRESHOLD");
865 if (buffer_threshold_str) {
866 size_t env_buffer_threshold = strtoul(buffer_threshold_str, NULL, 0);
867 return env_buffer_threshold;
873 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
878 tbb::spin_rw_mutex::scoped_lock read_lock(
rw_mutex_,
false);
886 std::scoped_lock lock(
mutex_);
897 if (!rtinstance || rtinstance->
deleted())
911 it->second->FlushAllRTargetRoutes(old_local_asn);
993 : name_(name), index_(-1), server_(server), mgr_(mgr), config_(config),
994 is_master_(false), always_subscribe_(false), virtual_network_index_(0),
995 virtual_network_allow_transit_(false),
996 virtual_network_pbb_evpn_enable_(false),
999 manager_delete_ref_(this, NULL),
1002 std::scoped_lock lock(mgr->
mutex());
1074 vector<SCAddress::Family> families = list_of
1083 manager->LocateServiceChain(
this, *sc_config);
1085 manager->StopServiceChain(
this);
1100 manager->ProcessStaticRouteConfig();
1114 manager->UpdateStaticRouteConfig();
1126 manager->FlushStaticRouteConfig();
1185 string id_str =
"target:" + old_ip.to_string() +
":0";
1194 string id_str =
"target:" + server_ip.to_string() +
":0";
1214 vector<string> import_rt, export_rt;
1220 import_rt.push_back(irt);
1228 export_rt.push_back(ert);
1235 if (import_rt.size())
1236 info.set_add_import_rt(import_rt);
1237 if (export_rt.size())
1238 info.set_add_export_rt(export_rt);
1239 if (import_rt.size() || export_rt.size())
1262 assert(table_inetmpls);
1267 assert(table_inet6);
1309 bool notify_routes =
false;
1311 notify_routes =
true;
1314 notify_routes =
true;
1316 notify_routes =
true;
1318 notify_routes =
true;
1321 if (notify_routes) {
1355 vector<string> add_import_rt, remove_import_rt;
1356 BOOST_FOREACH(
const string &rtarget_str, cfg->
import_list()) {
1360 future_import.insert(rt);
1364 &add_import_rt, _1),
1366 &remove_import_rt, _1));
1369 vector<string> add_export_rt, remove_export_rt;
1370 BOOST_FOREACH(
const string &rtarget_str, cfg->
export_list()) {
1374 future_export.insert(rt);
1378 &add_export_rt, _1),
1380 &remove_export_rt, _1));
1383 if (add_import_rt.size())
1384 info.set_add_import_rt(add_import_rt);
1385 if (remove_import_rt.size())
1386 info.set_remove_import_rt(remove_import_rt);
1387 if (add_export_rt.size())
1388 info.set_add_export_rt(add_export_rt);
1389 if (remove_export_rt.size())
1390 info.set_remove_export_rt(remove_export_rt);
1391 if (add_import_rt.size() || remove_import_rt.size() ||
1392 add_export_rt.size() || remove_export_rt.size())
1454 size_t pos =
name_.rfind(
':');
1455 if (pos == string::npos) {
1458 return name_.substr(0, pos);
1484 replicator->
Leave(table, rt,
true);
1487 replicator->
Leave(table, rt,
false);
1509 tbl_partition->
Add(route);
1519 attr_spec.push_back(&nexthop);
1521 attr_spec.push_back(&origin);
1526 tbl_partition->
Notify(route);
1528 route,
"Insert Local path with path id " <<
index_);
1553 route,
"Delete Local path with path id " <<
index_);
1555 tbl_partition->
Delete(route);
1557 tbl_partition->
Notify(route);
1589 vector<string> *change_list, RouteTargetList::const_iterator it) {
1606 change_list->push_back(it->ToString());
1615 ermvpn_replicator->
Join(ermvpn_table, *it,
import);
1616 mvpn_replicator->
Join(mvpn_table, *it,
import);
1617 evpn_replicator->
Join(evpn_table, *it,
import);
1618 inetvpn_replicator->
Join(inet_table, *it,
import);
1619 inet6vpn_replicator->
Join(inet6_table, *it,
import);
1623 vector<string> *change_list, RouteTargetList::iterator it) {
1640 ermvpn_replicator->
Leave(ermvpn_table, *it,
import);
1641 mvpn_replicator->
Leave(mvpn_table, *it,
import);
1642 evpn_replicator->
Leave(evpn_table, *it,
import);
1643 inetvpn_replicator->
Leave(inet_table, *it,
import);
1644 inet6vpn_replicator->
Leave(inet6_table, *it,
import);
1646 change_list->push_back(it->ToString());
1707 replicator->
Join(table, rt,
true);
1710 replicator->
Join(table, rt,
false);
1750 assert(table->
Size() == 0);
1784 static set<string> master_tables = list_of(
"inet.0")(
"inet.3")(
"inet6.0");
1785 static set<string> vpn_tables =
1786 list_of(
"bgp.l3vpn.0")(
"bgp.ermvpn.0")(
"bgp.evpn.0")(
"bgp.rtarget.0")
1787 (
"bgp.l3vpn-inet6.0")(
"bgp.mvpn.0");
1789 if (master_tables.find(table) != master_tables.end())
1791 if (vpn_tables.find(table) != vpn_tables.end())
1794 size_t pos1 = table.rfind(
'.');
1795 if (pos1 == string::npos)
1796 return "__unknown__";
1797 size_t pos2 = table.rfind(
'.', pos1 - 1);
1798 if (pos2 == string::npos)
1799 return "__unknown__";
1801 return table.substr(0, pos2);
1813 RoutingInstanceInfo info;
1815 info.set_instance_name(
name_);
1817 if (
rd_.get()) info.set_route_distinguisher(
rd_->ToString());
1818 if (operation) info.set_operation(operation);
1873 ext_community && ext_community->GetSubClusterId()) {
1876 if (route->
SubClusterId() == ext_community->GetSubClusterId()) {
1878 route,
"Not applying policy since sub-cluster associated "
1879 "with path is same as that with route");
1886 route,
"Not applying policy for service-chain secondary "
1903 if (!result.second) {
1922 return result.second;
1946 BgpStaticObjectFactory::Create<IStaticRouteMgr, Address::INET>(
this));
1950 BgpStaticObjectFactory::Create<IStaticRouteMgr, Address::INET6>(
this));
1964 BgpStaticObjectFactory::Create<IRouteAggregator, Address::INET>(
this));
1970 BgpStaticObjectFactory::Create<IRouteAggregator, Address::INET6>(
this));
2019 peer_manager_.reset(BgpStaticObjectFactory::Create<PeerManager>(
this));
2030 vector<string> tokens;
2031 boost::split(tokens, n, boost::is_any_of(
":"));
2032 if (tokens.size() < 3)
2035 os << tokens[0] <<
":" << tokens[1] <<
":" << tokens[2] <<
":" << tokens[2];
boost::asio::ip::address_v4 Ip4Address
std::vector< BgpAttribute * > BgpAttrSpec
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
std::pair< RoutingPolicyPtr, uint32_t > RoutingPolicyInfo
boost::intrusive_ptr< RoutingPolicy > RoutingPolicyPtr
#define BGP_UVE_SEND(type, object)
#define BGP_LOG_ROUTE(table, peer, route, arg)
static std::string FamilyToTableString(Family family)
static std::string FamilyToString(Family fmly)
const ExtCommunity * ext_community() const
virtual void ResetRoutingInstanceIndexBit(int index)=0
static const char * kMasterInstance
virtual const BgpInstanceConfig * FindInstance(const std::string &name) const =0
const RoutingPolicyConfigList & routing_policy_list() const
const std::string & virtual_network() const
int virtual_network_index() const
const RouteTargetList & export_list() const
const RouteTargetList & import_list() const
const AggregateRouteList & aggregate_routes(Address::Family family) const
const std::string & name() const
bool virtual_network_allow_transit() const
const std::string & routing_instance_vxlan() const
const ServiceChainConfig * service_chain_info(SCAddress::Family family) const
bool virtual_network_pbb_evpn_enable() const
const NeighborList & neighbor_list() const
const StaticRouteList & static_routes(Address::Family family) const
TypePtr Locate(Type *attr)
bool IsPolicyReject() const
void SetAttr(const BgpAttrPtr attr, const BgpAttrPtr original_attr)
virtual bool IsReplicated() const
const BgpAttr * GetOriginalAttr() const
const BgpPath * FindPath(BgpPath::PathSource src) const
bool RemovePath(BgpPath::PathSource src, const IPeer *peer=NULL, uint32_t path_id=0)
uint32_t SubClusterId() const
void InsertPath(BgpPath *path)
RTargetGroupMgr * rtarget_group_mgr()
ExtCommunityDB * extcomm_db()
IServiceChainMgr * service_chain_mgr(SCAddress::Family family)
uint32_t bgp_identifier() const
BgpConfigManager * config_manager()
void UnregisterASNUpdateCallback(int listener)
RoutePathReplicator * replicator(Address::Family family)
as_t local_autonomous_system() const
void UnregisterIdentifierUpdateCallback(int listener)
const std::string & localname() const
RoutingPolicyMgr * routing_policy_mgr()
const uint64_t GetSecondaryPathCount() const
virtual void set_routing_instance(RoutingInstance *rtinstance)
size_t GetPendingRiboutsCount(size_t *markers) const
void LocatePathResolver()
const uint64_t GetPrimaryPathCount() const
const uint64_t GetInfeasiblePathCount() const
virtual Address::Family family() const =0
const std::string & name() const
void Notify(DBEntryBase *entry)
void Delete(DBEntryBase *)
virtual void Add(DBEntry *entry)
DBEntry * Find(const DBEntry *entry)
virtual size_t Size() const
virtual DBTablePartBase * GetTablePartition(const DBRequestKey *key)
void RemoveTable(DBTableBase *tbl_base)
DBTableBase * CreateTable(const std::string &name)
virtual void ProcessPathTunnelEncapsulation(const BgpPath *path, BgpAttr *attr, ExtCommunityDB *extcomm_db, const BgpTable *table) const =0
virtual void ProcessAggregateRouteConfig()=0
virtual void FlushAggregateRouteConfig()=0
virtual bool IsContributingRoute(const BgpRoute *route) const =0
virtual bool IsAggregateRoute(const BgpRoute *route) const =0
virtual void UpdateAggregateRouteConfig()=0
void Reset(LifetimeActor *actor)
void CreateMvpnManagers()
void PeerResurrect(std::string name)
virtual BgpPeer * PeerLookup(std::string name) const
void Join(BgpTable *table, const RouteTarget &rt, bool import)
void Leave(BgpTable *table, const RouteTarget &rt, bool import)
static RouteTarget FromString(const std::string &str, boost::system::error_code *error=NULL)
RoutingInstanceMgr * manager_
virtual bool MayDelete() const
DeleteActor(RoutingInstanceMgr *manager)
InstanceTargetMap target_map_
RoutingInstanceConfigList neighbor_config_list_
int GetVnIndexByExtCommunity(const ExtCommunity *community) const
void EnableNeighborConfigListProcessing()
RoutingInstanceTraceBufferMap trace_buffer_active_
RoutingInstance * CreateRoutingInstance(const BgpInstanceConfig *config)
void UpdateRoutingInstance(RoutingInstance *rtinstance, const BgpInstanceConfig *config)
std::vector< TaskTrigger * > instance_config_triggers_
RoutingInstanceIterator end()
void ASNUpdateCallback(as_t old_asn, as_t old_local_asn)
bool CreateVirtualNetworkMapping(const std::string &virtual_network, const std::string &instance_name)
void DestroyRoutingInstance(RoutingInstance *rtinstance)
void NotifyInstanceOp(std::string name, Operation deleted)
std::vector< RoutingInstanceConfigList > instance_config_lists_
MvpnProjectManagerNetworks mvpn_project_managers_
LifetimeActor * deleter()
boost::scoped_ptr< TaskTrigger > neighbor_config_trigger_
bool HasRoutingInstanceDormantTraceBuf(const std::string &name) const
void InstanceTargetRemove(const RoutingInstance *rti)
size_t GetMvpnProjectManagerCount(const std::string &network) const
RoutingInstanceList::iterator RoutingInstanceIterator
LifetimeRef< RoutingInstanceMgr > server_delete_ref_
void InstanceTargetAdd(RoutingInstance *rti)
void InstanceVnIndexRemove(const RoutingInstance *rti)
size_t GetEnvRoutingInstanceDormantTraceBufferCapacity() const
RoutingInstance * GetRoutingInstance(const std::string &name)
boost::dynamic_bitset bmap_
void CreateRoutingInstanceNeighbors(const BgpInstanceConfig *config)
void InsertRoutingInstance(RoutingInstance *rtinstance)
const RoutingInstance * GetInstanceByVnIndex(int vn_index) const
RoutingInstanceTraceBufferMap trace_buffer_dormant_
boost::scoped_ptr< DeleteActor > deleter_
void increment_deleted_count()
RoutingInstanceIterator begin()
VirtualNetworksMap virtual_networks_
RoutingInstance * GetDefaultRoutingInstance()
void EnableInstanceConfigListProcessing()
void InstanceVnIndexAdd(RoutingInstance *rti)
bool DeleteVirtualNetworkMapping(const std::string &virtual_network, const std::string &instance_name)
SandeshTraceBufferPtr GetDormantTraceBuffer(const std::string &name) const
boost::function< void(std::string, int)> RoutingInstanceCb
std::string GetVirtualNetworkByVnIndex(int vn_index) const
void UnregisterInstanceOpCallback(int id)
void DisableTraceBuffer(const std::string &name)
bool ProcessInstanceConfigList(int idx)
virtual void DeleteRoutingInstance(const std::string &name)
RoutingInstanceTraceBufferList trace_buffer_dormant_list_
size_t GetRoutingInstanceActiveTraceBufSize() const
int GetVnIndexByRouteTarget(const RouteTarget &rtarget) const
tbb::spin_rw_mutex rw_mutex_
void IdentifierUpdateCallback(Ip4Address old_identifier)
void DisableInstanceConfigListProcessing()
static std::string GetPrimaryRoutingInstanceName(const string &name_in)
size_t trace_buf_threshold_
bool ProcessNeighborConfigList()
RoutingInstanceMgr(BgpServer *server)
RoutingInstanceList instances_
RoutingInstance * default_rtinstance_
int RegisterInstanceOpCallback(RoutingInstanceCb cb)
void DisableNeighborConfigListProcessing()
size_t dormant_trace_buf_size_
SandeshTraceBufferPtr GetActiveTraceBuffer(const std::string &name) const
const RoutingInstance * GetInstanceByTarget(const RouteTarget &target) const
SandeshTraceBufferPtr LocateTraceBuffer(const std::string &name)
InstanceOpListenersList callbacks_
SandeshTraceBufferPtr GetTraceBuffer(const std::string &name)
void LocateRoutingInstance(const BgpInstanceConfig *config)
RoutingInstance * GetRoutingInstanceLocked(const std::string &name)
uint32_t SendTableStatsUve()
void decrement_deleted_count()
int identifier_listener_id_
size_t GetRoutingInstanceDormantTraceBufSize() const
void SetTableStatsUve(Address::Family family, const std::map< std::string, RoutingTableStats > &stats_map, RoutingInstanceStatsData *instance_info) const
virtual ~RoutingInstanceMgr()
bool HasRoutingInstanceActiveTraceBuf(const std::string &name) const
size_t GetEnvRoutingInstanceDormantTraceBufferThreshold() const
DeleteActor(BgpServer *server, RoutingInstance *parent)
virtual bool MayDelete() const
RoutingInstance * parent_
const std::string & name() const
BgpTable * VrfTableCreate(Address::Family vrf_family, Address::Family vpn_family)
boost::scoped_ptr< IStaticRouteMgr > inet_static_route_mgr_
void ProcessServiceChainConfig()
void InitAllRTargetRoutes(as_t asn)
const RoutingInstanceMgr * manager() const
LifetimeRef< RoutingInstance > manager_delete_ref_
void UpdateConfig(const BgpInstanceConfig *config)
bool ProcessRoutingPolicy(const BgpRoute *route, BgpPath *path) const
void AddRouteTarget(bool import, std::vector< std::string > *change_list, RouteTargetList::const_iterator it)
static std::string GetTableName(std::string instance_name, Address::Family fmly)
bool virtual_network_allow_transit_
std::unique_ptr< RouteDistinguisher > rd_
IRouteAggregator * route_aggregator(Address::Family family) const
void DeleteRouteTarget(bool import, std::vector< std::string > *change_list, RouteTargetList::iterator it)
void RemoveTable(BgpTable *tbl)
bool virtual_network_pbb_evpn_enable() const
RoutingPolicyAttachList * routing_policies()
RoutingInstance(std::string name, BgpServer *server, RoutingInstanceMgr *mgr, const BgpInstanceConfig *config)
void UpdateStaticRouteConfig()
boost::scoped_ptr< IRouteAggregator > inet6_route_aggregator_
RoutingPolicyAttachList routing_policies_
int GetOriginVnForAggregateRoute(Address::Family family) const
boost::scoped_ptr< DeleteActor > deleter_
std::map< std::string, BgpTable * > RouteTableList
void AddTable(BgpTable *tbl)
IRouteAggregator * LocateRouteAggregator(Address::Family family)
bool HasExportTarget(const ExtCommunity *extcomm) const
void AddMvpnRTargetRoute(as_t asn)
BgpTable * RTargetTableCreate()
PeerManager * peer_manager()
bool virtual_network_allow_transit() const
void set_index(int index)
static std::string GetVrfFromTableName(const std::string table)
IStaticRouteMgr * static_route_mgr(Address::Family family)
IStaticRouteMgr * LocateStaticRouteMgr(Address::Family family)
void UpdateAllStaticRoutes()
void DeleteRTargetRoute(as_t asn, const RouteTarget &rtarget)
void DeleteMvpnRTargetRoute(as_t old_asn, Ip4Address old_ip)
void AddRTargetRoute(as_t asn, const RouteTarget &rtarget)
void DestroyDBTable(DBTable *table)
void ProcessRoutingPolicyConfig()
bool IsContributingRoute(const BgpTable *table, const BgpRoute *route) const
const RouteTargetList & GetImportList() const
RoutingInstanceInfo GetDataCollection(const char *operation)
void ProcessRouteAggregationConfig()
void FlushRouteAggregationConfig()
virtual ~RoutingInstance()
int virtual_network_index() const
boost::scoped_ptr< PeerManager > peer_manager_
BgpTable * VpnTableCreate(Address::Family vpn_family)
bool IsServiceChainRoute(const BgpRoute *route) const
int virtual_network_index_
const BgpInstanceConfig * config() const
void UpdateRouteAggregationConfig()
boost::scoped_ptr< IRouteAggregator > inet_route_aggregator_
SandeshTraceBufferPtr trace_buffer() const
const BgpInstanceConfig * config_
PeerManager * LocatePeerManager()
void DestroyRouteAggregator(Address::Family family)
const RouteTargetList & GetExportList() const
bool always_subscribe() const
void ProcessIdentifierUpdate(as_t asn)
std::set< RouteTarget > RouteTargetList
LifetimeActor * deleter()
BgpTable * GetTable(Address::Family fmly)
RoutingInstanceMgr * mgr_
void ClearFamilyRouteTarget(Address::Family vrf_family, Address::Family vpn_family)
std::string virtual_network_
RouteTableList vrf_tables_by_name_
boost::scoped_ptr< IStaticRouteMgr > inet6_static_route_mgr_
RouteTableFamilyList vrf_tables_by_family_
bool virtual_network_pbb_evpn_enable_
void FlushStaticRouteConfig()
void FlushAllRTargetRoutes(as_t asn)
void ProcessStaticRouteConfig()
size_t peer_manager_size() const
bool IsMasterRoutingInstance() const
void UpdateRoutingPolicyConfig()
bool IsAggregateRoute(const BgpTable *table, const BgpRoute *route) const
const std::string GetVirtualNetworkName() const
std::string routing_instance_vxlan_
bool UpdateRoutingPolicyList(const RoutingPolicyConfigList &cfg_list, RoutingPolicyAttachList *oper_list)
void ApplyRoutingPolicy(RoutingInstance *instance)
RoutingPolicy::PolicyResult ExecuteRoutingPolicy(const RoutingPolicy *policy, const BgpRoute *route, const BgpPath *path, BgpAttr *attr) const
RoutingPolicy * GetRoutingPolicy(const std::string &name)
uint32_t generation() const
std::pair< bool, bool > PolicyResult
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()
int HardwareThreadCount()
SandeshTraceBufferPtr RoutingInstanceTraceBuf(SandeshTraceBufferCreate(RTINSTANCE_TRACE_BUF, 1000))
#define RTINSTANCE_LOG_TABLE(type, rtinstance, table, level, flags,...)
#define RTINSTANCE_LOG_FLAG_ALL
#define RTINSTANCE_TRACE_BUF
#define ROUTING_INSTANCE_DORMANT_TRACE_BUFFER_THRESHOLD_1K
#define ROUTING_INSTANCE_COLLECTOR_INFO(info)
#define RTINSTANCE_LOG(type, rtinstance, level, flags,...)
#define RTINSTANCE_LOG_WARNING_MESSAGE(server, flags,...)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
SandeshTraceBufferPtr SandeshTraceBufferCreate(const std::string &buf_name, size_t buf_size, bool trace_enable=true)
bool set_synchronize(const SetType *set1, const SetType *set2, AddFunctor add_fn, DelFunctor del_fn)
std::string routing_policy_
static Family AddressFamilyToSCFamily(Address::Family family)
std::string routing_instance
#define CHECK_CONCURRENCY(...)
void STLDeleteValues(Container *container)