18 using std::unique_ptr;
40 :
BgpTable(db, name), evpn_manager_(NULL) {
54 const string &key_str)
const {
56 return unique_ptr<DBEntry> (
new EvpnRoute(prefix));
64 switch (evpn_prefix.
type()) {
168 dynamic_cast<const EvpnTable *
>(src_table);
222 if (new_attr->sub_protocol() ==
"bgpaas") {
223 boost::system::error_code ec;
226 if ((ec.value() != 0)) {
250 if (dest_route == NULL) {
252 rtp->
Add(dest_route);
263 if (dest_path != NULL) {
298 replicated_path, table);
318 uinfo_slist->push_front(*uinfo);
334 uinfo_slist->push_front(*uinfo);
346 if (!peerset.
test(peerbit))
354 uinfo_slist->push_front(*uinfo);
362 evpn_manager_ = BgpStaticObjectFactory::Create<EvpnManager>(
this);
boost::asio::ip::address_v4 Ip4Address
std::size_t hash_value(BgpAttr const &attr)
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
#define EVPN_ES_IMPORT_ROUTE_TARGET_AS2
#define EVPN_ES_IMPORT_ROUTE_TARGET_AS4
BgpAttrPtr ReplaceExtCommunityAndLocate(const BgpAttr *attr, ExtCommunityPtr extcomm)
Address::Family nexthop_family() const
uint32_t GetLabel() const
uint32_t GetFlags() const
const uint32_t GetPathId() const
bool NeedsResolution() const
const BgpAttr * GetAttr() const
uint32_t GetL3Label() const
PathSource GetSource() const
const BgpAttr * GetOriginalAttr() const
const BgpPath * BestPath() const
bool RemoveSecondaryPath(const BgpRoute *src_rt, BgpPath::PathSource src, const IPeer *peer, uint32_t path_id)
BgpPath * FindSecondaryPath(BgpRoute *src_rt, BgpPath::PathSource src, const IPeer *peer, uint32_t path_id)
void InsertPath(BgpPath *path)
void SetReplicateInfo(const BgpTable *table, const BgpRoute *rt)
ExtCommunityDB * extcomm_db()
RoutingInstanceMgr * routing_instance_mgr()
as_t autonomous_system() const
bool IsNextHopCheckEnabled() const
virtual void set_routing_instance(RoutingInstance *rtinstance)
RoutingInstance * routing_instance()
UpdateInfo * GetUpdateInfo(RibOut *ribout, BgpRoute *route, const RibPeerSet &peerset)
PathResolver * path_resolver()
virtual Address::Family family() const =0
bool test(size_t pos) const
const std::string & name() const
void Notify(DBEntryBase *entry)
virtual void Add(DBEntry *entry)
DBEntry * Find(const DBEntry *entry)
virtual DBTablePartBase * GetTablePartition(const DBRequestKey *key)
static void RegisterFactory(const std::string &prefix, CreateFunction create_fn)
static int PartitionCount()
This class represents the EVPN manager for an EvpnTable in a VRF.
LifetimeActor * deleter()
Return the LifetimeActor for the EvpnManager.
virtual UpdateInfo * GetUpdateInfo(EvpnRoute *route)
Construct export state for the given EvpnRoute. Note that the route only needs to be exported to the ...
virtual void Initialize()
Initialize the EvpnManager. We allocate the EvpnManagerPartitions and register a DBListener for the E...
virtual void Terminate()
Terminate the EvpnManager. We free the EvpnManagerPartitions and unregister from the EvpnTable.
Ip4Prefix inet_prefix() const
IpAddress ip_address() const
const RouteDistinguisher & route_distinguisher() const
static const uint32_t kMaxTag
const MacAddress & mac_addr() const
void set_route_distinguisher(const RouteDistinguisher &rd)
@ InclusiveMulticastRoute
@ SelectiveMulticastRoute
static EvpnPrefix FromString(const std::string &str, boost::system::error_code *errorp=NULL)
Address::Family family() const
Inet6Prefix inet6_prefix() const
const EvpnPrefix & GetPrefix() const
virtual BgpRoute * TableFind(DBTablePartition *rtp, const DBRequestKey *prefix)
EvpnManager * GetEvpnManager()
tbb::atomic< uint64_t > im_route_count_
virtual Address::Family family() const
virtual void set_routing_instance(RoutingInstance *rtinstance)
virtual BgpRoute * RouteReplicate(BgpServer *server, BgpTable *src_table, BgpRoute *src_rt, const BgpPath *path, ExtCommunityPtr ptr)
EvpnManager * evpn_manager_
tbb::atomic< uint64_t > ip_route_count_
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *key) const
static size_t HashFunction(const EvpnPrefix &prefix)
EvpnRoute * FindRoute(const EvpnPrefix &prefix)
tbb::atomic< uint64_t > unique_mac_route_count_
virtual bool Export(RibOut *ribout, Route *route, const RibPeerSet &peerset, UpdateInfoSList &info_slist)
void DestroyEvpnManager()
virtual bool IsVpnTable() const
virtual PathResolver * CreatePathResolver()
bool ShouldReplicate(const BgpServer *server, const BgpTable *src_table, const ExtCommunityPtr community, const EvpnPrefix &evpn_prefix) const
tbb::atomic< uint64_t > mac_route_count_
virtual void AddRemoveCallback(const DBEntryBase *entry, bool add) const
static DBTableBase * CreateTable(DB *db, const std::string &name)
virtual std::unique_ptr< DBEntry > AllocEntryStr(const std::string &key) const
EvpnTable(DB *db, const std::string &name)
virtual size_t Hash(const DBEntry *entry) const
virtual const std::string & ToString() const =0
static size_t HashFunction(const Inet6Prefix &addr)
static size_t HashFunction(const Ip4Prefix &addr)
const uint8_t * GetData() const
void StopPathResolution(int part_id, const BgpPath *path)
void StartPathResolution(BgpRoute *route, const BgpPath *path, BgpTable *nh_table=NULL)
bool IsEncodingBgp() const
int GetPeerIndex(IPeerUpdate *peer) const
bool IsRegistered(IPeerUpdate *peer)
static RouteDistinguisher kZeroRd
static RouteTarget FromString(const std::string &str, boost::system::error_code *error=NULL)
const bytes_type & GetExtCommunity() const
RoutingInstance * GetDefaultRoutingInstance()
BgpTable * GetTable(Address::Family fmly)
bool IsMasterRoutingInstance() const
MODULE_INITIALIZER(RegisterFactory)
static void RegisterFactory()
static uint64_t get_value(const uint8_t *data, int size)
static const std::string integerToString(const NumberType &num)