23 #include <ovsdb_types.h>
25 using namespace OVSDB;
29 const std::string &mac) :
OvsdbDBEntry(table), mac_(mac),
30 path_preference_(0), vxlan_id_(0), time_stamp_(0), sip_(), dip_(),
31 is_multicast_(false) {
45 "not available vrf " + table->
vrf_->GetName() +
69 table->
vrf_->GetName() +
", VxlanId " +
94 table->
vrf_->GetName() +
", VxlanId " +
194 dev_vn_(dev_vn), state_(dev_vn->state()),
195 dev_ip_(dev_vn->dev_ip().to_v4()), vxlan_id_(dev_vn->vxlan_id()),
196 vrf_(table->vrf_entry(), this), vn_name_(dev_vn->vn_name()) {
296 return vrf_->GetName();
334 if (
false == args.
Get(
"mac", &
mac_)) {
340 const std::string &dev,
341 const std::string &vn_uuid,
342 const std::string &mac) :
343 OvsdbSandeshTask(resp_ctx,
"0.0.0.0", 0), dev_name_(dev), vn_uuid_(vn_uuid),
366 if (entry->
mac().find(
mac_) != std::string::npos) {
379 OvsdbHaStaleL2RouteExport lentry;
381 lentry.set_dev_ip(table->
dev_ip().to_string());
382 lentry.set_vn_name(table->
vn_name());
383 lentry.set_vrf_name(table->
vrf_name());
384 lentry.set_mac(entry->
mac());
385 lentry.set_vxlan_id(entry->
vxlan_id());
387 lentry.set_status(
"stale");
389 lentry.set_status(
"active");
392 OvsdbHaStaleL2RouteExportResp *l_resp =
393 static_cast<OvsdbHaStaleL2RouteExportResp *
>(resp);
394 std::vector<OvsdbHaStaleL2RouteExport> &l2_route =
395 const_cast<std::vector<OvsdbHaStaleL2RouteExport>&
>(
396 l_resp->get_l2_route());
397 l2_route.push_back(lentry);
401 return static_cast<SandeshResponse *
>(
new OvsdbHaStaleL2RouteExportResp());
408 if (con_entry == NULL) {
415 if (dev_vn_entry == NULL) {
421 void OvsdbHaStaleL2RouteExportReq::HandleRequest()
const {
424 get_vn_uuid(), get_mac());
HaStaleL2RouteSandeshTask(std::string resp_ctx, AgentSandeshArguments &args)
FilterResp Filter(KSyncEntry *entry)
OVSDB::OvsdbClient * ovsdb_client() const
#define OVSDB_TRACE(obj,...)
SandeshResponse * Alloc()
OvsPeer * route_peer() const
static Agent * GetInstance()
static boost::uuids::uuid StringToUuid(const std::string &str)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
HaStaleL2RouteTable * l2_table() const
uint32_t vxlan_id() const
void OvsdbStartResyncWalk()
virtual void EmptyTable(void)
KSyncEntry * UnresolvedReference()
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge, EVPN (Type2/Type5). This base class contains common code for all types of route tables.
friend class HaStaleL2RouteEntry
DBFilterResp OvsdbDBEntryFilter(const DBEntry *entry, const OvsdbDBEntry *ovsdb_entry)
std::string StateString() const
virtual ~HaStaleL2RouteSandeshTask()
void StaleClearAddEntry(uint64_t time_stamp, HaStaleL2RouteEntry *entry, StaleClearL2EntryCb cb)
bool is_multicast() const
void Delete(KSyncEntry *entry)
virtual void OvsdbRegisterDBTable(DBTable *tbl)
const Ip4Address * GetDip() const
HaStaleL2RouteTable(HaStaleDevVnEntry *dev_vn, AgentRouteTable *table)
static void Unregister(KSyncObject *)
uint32_t vxlan_id() const
void EncodeArgs(AgentSandeshArguments &args)
std::string ToString() const
const std::string & vn_name() const
const AgentPath * GetActivePath() const
HaStaleDevVnTable * ha_stale_dev_vn_table() const
NextHop * nexthop() const
static const std::string integerToString(const NumberType &num)
bool Get(const std::string &key, std::string *val) const
static TaskScheduler * GetInstance()
void Enqueue(Task *task)
Enqueues a task for running. Starts task if all policy rules are met else puts task in waitq...
const NextHop * GetActiveNextHop() const
ConnectionStateEntry * state_
bool AddOvsRoute(const VrfEntry *vrf, uint32_t vxlan_id, const std::string &dest_vn, const MacAddress &mac, Ip4Address &tor_ip)
void TriggerAck(HaStaleL2RouteTable *table)
const Ip4Address * GetSip() const
KSyncEntry * Find(const KSyncEntry *key)
LifetimeRef< HaStaleL2RouteTable > table_delete_ref_
bool Add(const std::string &key, const std::string &val)
KSyncObject * GetObject(OvsdbClientSession *session)
KSyncEntry * Alloc(const KSyncEntry *key, uint32_t index)
HaStaleL2RouteEntry(HaStaleL2RouteTable *table, const std::string &mac)
virtual const PrefixType & prefix_address() const
Returns the value of a stored prefix address (IPv4, IPv6 or MAC address)
boost::asio::ip::address_v4 Ip4Address
ConnectionStateEntry * Find(const std::string &device_name)
uint32_t vxlan_id() const
void AddOvsPeerMulticastRoute(const VrfEntry *vrf, uint32_t vxlan_id, const std::string &vn_name_, const Ip4Address &tsn_ip, const Ip4Address &tor_ip)
ConnectionStateTable * connection_table()
uint64_t time_stamp() const
virtual void EmptyTable()
void StaleClearDelEntry(uint64_t time_stamp, HaStaleL2RouteEntry *entry)
uint32_t path_preference_
std::string empty_string("")
void DeleteOvsRoute(VrfEntry *vrf, uint32_t vxlan, const MacAddress &mac)
const std::string & mac() const
void StopStaleClearTimer()
Ip4Address dev_ip() const
KSyncEntry * DBToKSyncEntry(const DBEntry *)
void UpdateResp(KSyncEntry *kentry, SandeshResponse *resp)
virtual ~HaStaleL2RouteTable()
bool IsConnectionActive()
uint32_t preference() const
const std::string & vn_name() const
void DeleteOvsPeerMulticastRoute(const VrfEntry *vrf, uint32_t vxlan_id, const Ip4Address &tor_ip)
const std::string & vrf_name() const
HaStaleDevVnEntry * dev_vn_
void UpdateParams(HaStaleDevVnEntry *dev_vn)
bool IsLess(const KSyncEntry &) const