OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ha_stale_dev_vn.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_VNSW_AGENT_OVS_TOR_AGENT_OVSDB_CLIENT_HA_STALE_DEV_VN_H_
6 #define SRC_VNSW_AGENT_OVS_TOR_AGENT_OVSDB_CLIENT_HA_STALE_DEV_VN_H_
7 
8 #include <base/lifetime.h>
9 #include <ovsdb_entry.h>
10 #include <ovsdb_object.h>
12 
13 namespace OVSDB {
14 class HaStaleL2RouteTable;
15 class HaStaleL2RouteEntry;
16 class HaStaleVnTable;
17 class ConnectionStateEntry;
18 
20 public:
21  static const uint32_t kStaleTimerJobInterval = 100; // in millisecond
22  static const uint32_t kNumEntriesPerIteration = 100; // in millisecond
23 
24  typedef boost::function<void(void)> StaleClearL2EntryCb;
25  struct StaleL2Entry {
27  : time_stamp(t), entry(e) {
28  }
29 
30  uint64_t time_stamp;
32 
33  bool operator <(const StaleL2Entry &rhs) const {
34  if (time_stamp != rhs.time_stamp) {
35  return time_stamp < rhs.time_stamp;
36  }
37 
38  return entry < rhs.entry;
39  }
40  };
41  typedef std::map<StaleL2Entry, StaleClearL2EntryCb> CbMap;
44  std::string &dev_name);
45  virtual ~HaStaleDevVnTable();
46 
47  KSyncEntry *Alloc(const KSyncEntry *key, uint32_t index);
50  const OvsdbDBEntry *ovsdb_entry);
51 
52  Agent *agent() const;
53  void DeleteTableDone();
54  virtual void EmptyTable();
55 
56  void VnReEvalEnqueue(const boost::uuids::uuid &vn_uuid);
57  bool VnReEval(const boost::uuids::uuid &vn_uuid);
58 
59  OvsPeer *route_peer() const;
60  const std::string &dev_name() const;
61  ConnectionStateEntry *state() const;
62  uint64_t time_stamp() const { return time_stamp_;}
63 
66  void StaleClearDelEntry(uint64_t time_stamp, HaStaleL2RouteEntry *entry);
67 
68 private:
69  friend class HaStaleDevVnEntry;
70 
71  bool StaleClearTimerCb();
72 
75  std::unique_ptr<OvsPeer> route_peer_;
76  std::string dev_name_;
78  // Additionaly listen to VN table for VN-VRF link updates
80  // entries for which the timer is running to clear stale entries
82  // time stamp represented by iteration count of interval
83  // kStaleTimerJobInterval should always be non-zero and start with 1
84  uint64_t time_stamp_;
86  // reeval queue used to trigger updates on change in VN-VRF link
87  // this is required VN object cannot trigger a re-eval on dev-vn
88  // object in line as dev-vn object needs to check for resolution
89  // of vn object.
92 };
93 
95 public:
98 
99  bool Add();
100  bool Change();
101  bool Delete();
102 
103  bool Sync(DBEntry*);
104  bool IsLess(const KSyncEntry&) const;
105  std::string ToString() const {return "Ha Stale Dev VN Entry";}
107 
108  void TriggerAck(HaStaleL2RouteTable *table);
109 
111  const boost::uuids::uuid &vn_uuid() const { return vn_uuid_; }
112 
113  Agent *agent() const;
114  OvsPeer *route_peer() const;
115  const std::string &dev_name() const;
116  ConnectionStateEntry *state() const;
117  IpAddress dev_ip() const;
118  const std::string &vn_name() const;
119  uint32_t vxlan_id() const;
120 
121 private:
122  friend class HaStaleDevVnTable;
125  // hold pointer to old l2_table which is already
126  // scheduled for deletion, this delete can be
127  // triggered due to delete or change of entry
128  // so we hold the ksync state to wait for an Ack
129  // on table cleanup and move the ksync state
130  // machine when HaStaleL2RouteTable triggerack
131  // at the time of table delete complete
135  std::string vn_name_;
136  uint32_t vxlan_id_;
138 };
139 
140 };
141 
142 #endif //SRC_VNSW_AGENT_OVS_TOR_AGENT_OVSDB_CLIENT_HA_STALE_DEV_VN_H_
143 
boost::function< void(void)> StaleClearL2EntryCb
DBFilterResp OvsdbDBEntryFilter(const DBEntry *entry, const OvsdbDBEntry *ovsdb_entry)
OvsdbDBObject * table()
Definition: ovsdb_entry.h:96
OvsPeer * route_peer() const
HaStaleL2RouteTable * l2_table() const
HaStaleL2RouteTable * old_l2_table_
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.
Definition: agent_route.h:109
boost::uuids::uuid vn_uuid_
const boost::uuids::uuid & vn_uuid() const
boost::asio::ip::address IpAddress
Definition: address.h:13
std::string ToString() const
bool operator<(const StaleL2Entry &rhs) const
void StaleClearAddEntry(uint64_t time_stamp, HaStaleL2RouteEntry *entry, StaleClearL2EntryCb cb)
boost::uuids::uuid uuid
std::unique_ptr< OvsPeer > route_peer_
HaStaleDevVnEntry(OvsdbDBObject *table, const boost::uuids::uuid &vn_uuid)
ConnectionStateEntry * state() const
OvsPeer * route_peer() const
Definition: agent.h:358
ConnectionStateEntryPtr state_
boost::intrusive_ptr< ConnectionStateEntry > ConnectionStateEntryPtr
ConnectionStateEntry * state() const
StaleL2Entry(uint64_t t, HaStaleL2RouteEntry *e)
DISALLOW_COPY_AND_ASSIGN(HaStaleDevVnTable)
void TriggerAck(HaStaleL2RouteTable *table)
void VnReEvalEnqueue(const boost::uuids::uuid &vn_uuid)
AgentRouteTable * oper_bridge_table_
bool IsLess(const KSyncEntry &) const
bool VnReEval(const boost::uuids::uuid &vn_uuid)
WorkQueue< boost::uuids::uuid > * vn_reeval_queue_
static const uint32_t kStaleTimerJobInterval
uint32_t vxlan_id() const
DISALLOW_COPY_AND_ASSIGN(HaStaleDevVnEntry)
const std::string & dev_name() const
KSyncEntry * DBToKSyncEntry(const DBEntry *)
uint64_t time_stamp() const
void StaleClearDelEntry(uint64_t time_stamp, HaStaleL2RouteEntry *entry)
static const uint32_t kNumEntriesPerIteration
OvsPeerManager * manager_
KSyncEntry * UnresolvedReference()
HaStaleL2RouteTable * l2_table_
const std::string & dev_name() const
IpAddress dev_ip() const
Definition: timer.h:54
std::map< StaleL2Entry, StaleClearL2EntryCb > CbMap
const std::string & vn_name() const
KSyncEntry * Alloc(const KSyncEntry *key, uint32_t index)
HaStaleDevVnTable(Agent *agent, OvsPeerManager *manager, ConnectionStateEntry *state, std::string &dev_name)
HaStaleVnTable * vn_table_