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