5 #ifndef SRC_BGP_ROUTING_INSTANCE_ROUTING_INSTANCE_H_
6 #define SRC_BGP_ROUTING_INSTANCE_ROUTING_INSTANCE_H_
9 #include <boost/asio/ip/tcp.hpp>
10 #include <boost/dynamic_bitset.hpp>
11 #include <boost/intrusive_ptr.hpp>
12 #include <boost/iterator/iterator_facade.hpp>
13 #include <boost/scoped_ptr.hpp>
14 #include <tbb/mutex.h>
15 #include <tbb/spin_rw_mutex.h>
30 #include "sandesh/sandesh_trace.h"
44 class RoutingInstanceInfo;
45 class RoutingInstanceStatsData;
46 class RoutingTableStats;
47 class BgpNeighborResp;
84 static std::string
GetTableName(std::string instance_name,
219 void AddRouteTarget(
bool import, std::vector<std::string> *change_list,
220 RouteTargetList::const_iterator it);
222 RouteTargetList::iterator it);
236 std::unique_ptr<RouteDistinguisher>
rd_;
292 typedef std::map<std::string, SandeshTraceBufferPtr>
304 typedef std::map<std::string, MvpnManagerNetworks>
395 const std::string &instance_name);
397 const std::string &instance_name);
432 const std::map<std::string, RoutingTableStats> &stats_map,
433 RoutingInstanceStatsData *instance_info)
const;
boost::asio::ip::address_v4 Ip4Address
boost::intrusive_ptr< RoutingPolicy > RoutingPolicyPtr
std::list< RoutingPolicyInfo > RoutingPolicyAttachList
InstanceTargetMap target_map_
RoutingInstanceConfigList neighbor_config_list_
std::set< std::string > MvpnManagerNetworks
int GetVnIndexByExtCommunity(const ExtCommunity *community) const
void EnableNeighborConfigListProcessing()
RoutingInstanceTraceBufferMap trace_buffer_active_
RoutingInstance * CreateRoutingInstance(const BgpInstanceConfig *config)
name_iterator name_begin()
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)
std::map< std::string, MvpnManagerNetworks > MvpnProjectManagerNetworks
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
std::map< std::string, SandeshTraceBufferPtr > RoutingInstanceTraceBufferMap
RoutingInstanceList::iterator RoutingInstanceIterator
LifetimeRef< RoutingInstanceMgr > server_delete_ref_
void InstanceTargetAdd(RoutingInstance *rti)
void InstanceVnIndexRemove(const RoutingInstance *rti)
size_t GetEnvRoutingInstanceDormantTraceBufferCapacity() const
std::list< std::string > RoutingInstanceTraceBufferList
RoutingInstance * GetRoutingInstance(const std::string &name)
boost::dynamic_bitset bmap_
void CreateRoutingInstanceNeighbors(const BgpInstanceConfig *config)
void InsertRoutingInstance(RoutingInstance *rtinstance)
size_t GetRoutingInstanceDormantTraceBufferCapacity() const
const RoutingInstance * GetInstanceByVnIndex(int vn_index) const
RoutingInstanceTraceBufferMap trace_buffer_dormant_
boost::scoped_ptr< DeleteActor > deleter_
void increment_deleted_count()
RoutingInstanceIterator begin()
friend class BgpConfigTest
VirtualNetworksMap virtual_networks_
const_name_iterator name_cend()
std::set< std::string > RoutingInstanceConfigList
RoutingInstance * GetDefaultRoutingInstance()
void EnableInstanceConfigListProcessing()
void InstanceVnIndexAdd(RoutingInstance *rti)
std::map< std::string, RoutingInstance * > RoutingInstanceList
bool DeleteVirtualNetworkMapping(const std::string &virtual_network, const std::string &instance_name)
uint32_t deleted_count() const
void LocateRoutingInstance(const std::string &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)
const BgpServer * server() const
void DisableTraceBuffer(const std::string &name)
bool ProcessInstanceConfigList(int idx)
virtual void DeleteRoutingInstance(const std::string &name)
RoutingInstanceTraceBufferList trace_buffer_dormant_list_
MvpnProjectManagerNetworks & mvpn_project_managers()
size_t GetRoutingInstanceActiveTraceBufSize() const
int GetVnIndexByRouteTarget(const RouteTarget &rtarget) const
const MvpnProjectManagerNetworks & mvpn_project_managers() const
std::multimap< RouteTarget, RoutingInstance * > InstanceTargetMap
tbb::spin_rw_mutex rw_mutex_
const RoutingInstance * GetRoutingInstance(const std::string &name) const
const_name_iterator name_clower_bound(const std::string &name)
void IdentifierUpdateCallback(Ip4Address old_identifier)
const_name_iterator name_cbegin()
RoutingInstanceList::iterator name_iterator
void DisableInstanceConfigListProcessing()
static std::string GetPrimaryRoutingInstanceName(const string &name_in)
friend class RoutingInstanceMgrTest
std::multimap< int, RoutingInstance * > VnIndexMap
size_t trace_buf_threshold_
bool ProcessNeighborConfigList()
RoutingInstanceMgr(BgpServer *server)
RoutingInstanceList instances_
RoutingInstance * default_rtinstance_
int RegisterInstanceOpCallback(RoutingInstanceCb cb)
void DisableNeighborConfigListProcessing()
size_t GetRoutingInstanceDormantTraceBufferThreshold() const
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)
RoutingInstanceList::const_iterator const_name_iterator
std::map< std::string, std::set< std::string > > VirtualNetworksMap
void LocateRoutingInstance(const BgpInstanceConfig *config)
RoutingInstance * GetRoutingInstanceLocked(const std::string &name)
std::vector< RoutingInstanceCb > InstanceOpListenersList
uint32_t SendTableStatsUve()
name_iterator name_lower_bound(const std::string &name)
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
void set_mvpn_project_manager_network(std::string network)
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)
const BgpServer * server() const
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)
std::string mvpn_project_manager_network_
bool virtual_network_allow_transit_
std::unique_ptr< RouteDistinguisher > rd_
IRouteAggregator * route_aggregator(Address::Family family) const
const RouteDistinguisher * GetRD() 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
const std::string & routing_instance_vxlan() const
void AddTable(BgpTable *tbl)
IRouteAggregator * LocateRouteAggregator(Address::Family family)
RouteTableList & GetTables()
bool HasExportTarget(const ExtCommunity *extcomm) const
void AddMvpnRTargetRoute(as_t asn)
BgpTable * RTargetTableCreate()
const std::string & mvpn_project_manager_network() const
PeerManager * peer_manager()
SandeshTraceBufferPtr trace_buffer_
bool virtual_network_allow_transit() const
void set_index(int index)
static std::string GetVrfFromTableName(const std::string table)
void TriggerTableDelete(BgpTable *table)
IStaticRouteMgr * static_route_mgr(Address::Family family)
const PeerManager * peer_manager() const
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
const RoutingPolicyAttachList & routing_policies() const
RoutingInstanceInfo GetDataCollection(const char *operation)
std::string & mvpn_project_manager_network()
void ProcessRouteAggregationConfig()
void FlushRouteAggregationConfig()
std::map< Address::Family, BgpTable * > RouteTableFamilyList
void set_routing_instance_vxlan(const std::string &routing_instance_vxlan)
virtual ~RoutingInstance()
void AddRoutingPolicy(RoutingPolicyPtr policy)
int virtual_network_index() const
void TableDeleteComplete(BgpTable *table)
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_
const RouteTableList & GetTables() const
RouteTableFamilyList vrf_tables_by_family_
bool virtual_network_pbb_evpn_enable_
void FlushStaticRouteConfig()
void FlushAllRTargetRoutes(as_t asn)
void ProcessStaticRouteConfig()
RoutingInstanceMgr * manager()
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_
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr