OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mac_learning_mgmt.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_VNSW_AGENT_MAC_LEARNING_MAC_LEARNING_MGMT_H_
6 #define SRC_VNSW_AGENT_MAC_LEARNING_MAC_LEARNING_MGMT_H_
7 #include "mac_learning_key.h"
8 #include "mac_ip_learning_key.h"
9 
14 public:
16  virtual ~MacLearningMgmtNode();
17 
19  intf_.reset(intf);
20  }
21 
23  vrf_.reset(vrf);
24  }
25 
27  rt_.reset(rt);
28  }
29 
31  vn_.reset(vn);
32  }
33 
35  hc_service_.reset(hc);
36  }
37 
39 
41  return mac_entry_;
42  }
43 
45  mac_entry_ = mac_entry;
46  }
47 private:
55 };
56 typedef boost::shared_ptr<MacLearningMgmtNode> MacLearningMgmtNodePtr;
57 
59 public:
62  enum Type {
65  VRF,
68  VN,
71  };
72 
75 
76  const DBEntry *db_entry() const {
77  return db_entry_;
78  }
79 
80  virtual bool UseDBEntry() const {
81  return true;
82  }
83  void Change();
84  void Delete(bool set_delete, bool notify_event = true);
85  virtual bool TryDelete();
86 
88  tree_ = tree;
89  }
90 
91  void set_db_entry(const DBEntry *entry) {
92  db_entry_ = entry;
93  }
94 
95  virtual bool Compare(const MacLearningMgmtDBEntry *rhs) const {
96  return false;
97  }
98 
99  virtual bool IsLess(const MacLearningMgmtDBEntry *rhs) const {
100  if (type_ != rhs->type_) {
101  return type_ < rhs->type_;
102  }
103 
104  if (UseDBEntry()) {
105  if (db_entry_ != rhs->db_entry_) {
106  return db_entry_ < rhs->db_entry_;
107  }
108  }
109 
110  return Compare(rhs);
111  }
112 
114  return tree_;
115  }
116 
117  void set_gen_id(uint32_t gen_id) {
118  gen_id_ = gen_id;
119  }
120 
121  uint32_t gen_id() const {
122  return gen_id_;
123  }
124 
125 protected:
128  bool deleted_;
131  uint32_t gen_id_;
133 };
134 
136 public:
137  MacLearningMgmtIntfEntry(const Interface *intf);
139 private:
141 };
142 
144 public:
145  MacLearningMgmtVrfEntry(const VrfEntry *vrf);
147  virtual bool TryDelete();
148 
149 private:
151 };
152 
154 public:
156  MacLearningMgmtRouteEntry(const std::string &vrf,
157  const MacAddress &mac);
159  virtual bool UseDBEntry() const {
160  return false;
161  }
162 
163  virtual bool TryDelete();
164  virtual bool Compare(const MacLearningMgmtDBEntry *rhs) const {
165  const MacLearningMgmtRouteEntry *rhs_rt =
166  static_cast<const MacLearningMgmtRouteEntry *>(rhs);
167  if (vrf_ != rhs_rt->vrf_) {
168  return vrf_ < rhs_rt->vrf_;
169  }
170  return mac_ < rhs_rt->mac_;
171  }
172 
173  const std::string& vrf() {
174  return vrf_;
175  }
176 private:
177  std::string vrf_;
180 };
181 
183 public:
184  MacLearningMgmtVnEntry(const VnEntry *vn);
186 private:
188 };
189 
191 public:
194 private:
196 };
198 public:
199  bool operator()(const MacLearningMgmtDBEntry *lhs, const MacLearningMgmtDBEntry *rhs) const {
200  return lhs->IsLess(rhs);
201  }
202 };
203 
205 public:
206  typedef std::map<MacLearningMgmtDBEntry *, MacLearningMgmtDBEntry *,
208  typedef std::pair<MacLearningMgmtDBEntry *, MacLearningMgmtDBEntry *>
210 
213 
214  void Add(MacLearningMgmtDBEntry *entry);
215  void Change(MacLearningMgmtDBEntry *entry);
216  void Delete(MacLearningMgmtDBEntry *entry);
217  void Erase(MacLearningMgmtDBEntry *entry);
220  Tree::iterator it = tree_.lower_bound(entry);
221  if (it != tree_.end()) {
222  return it->second;
223  }
224  return NULL;
225  }
226 
229  }
230  void TryDelete(MacLearningMgmtDBEntry *db_entry);
231 protected:
235 };
236 
238 public:
239  enum Event {
252  };
253 
255  event_(event), mac_learning_entry_(ptr) {
256  }
257 
259  uint32_t gen_id):
260  event_(event), db_entry_(db_entry), gen_id_(gen_id) {
261  }
262 
264  return mac_learning_entry_;
265  }
266 
268  return event_;
269  }
270 
271  const DBEntry *db_entry() {
272  return db_entry_;
273  }
274 
275  uint32_t gen_id() const {
276  return gen_id_;
277  }
278 
279  void set_gen_id(uint32_t gen_id) {
280  gen_id_ = gen_id;
281  }
282 
283 private:
287  uint32_t gen_id_;
288 };
289 
290 typedef boost::shared_ptr<MacLearningMgmtRequest> MacLearningMgmtRequestPtr;
291 
293 public:
295  typedef std::map<MacLearningKey, MacLearningMgmtNodePtr,
297  typedef std::pair<MacLearningKey, MacLearningMgmtNodePtr>
299 
300  typedef std::map<MacIpLearningKey, MacLearningMgmtNodePtr,
302  typedef std::pair<MacIpLearningKey, MacLearningMgmtNodePtr>
307 
314  void DeleteDBEntry(MacLearningMgmtRequestPtr ptr, bool notify_event = true);
317 
320  MacLearningMgmtDBEntry* Locate(const std::string &vrf,
321  const MacAddress &mac);
323  return &vrf_tree_;
324  }
325 
327  return &rt_tree_;
328  }
329 
330  bool IsVrfRouteEmpty(const std::string &vrf_name);
331  Agent *agent() const {
332  return agent_;
333  }
334 private:
345 };
346 #endif
void Enqueue(MacLearningMgmtRequestPtr &ptr)
void DeleteAllEntry(MacLearningMgmtRequestPtr ptr)
DependencyRef< MacLearningMgmtNode, MacLearningMgmtDBEntry > intf_
MacLearningMgmtRequest(Event event, MacLearningEntryPtr ptr)
MacLearningEntryPtr mac_learning_entry()
MacLearningEntryPtr mac_entry_
void Delete(MacLearningMgmtDBEntry *entry)
void Change(MacLearningMgmtDBEntry *entry)
std::map< MacLearningMgmtDBEntry *, MacLearningMgmtDBEntry *, MacLearningMgmtKeyCmp > Tree
MacLearningMgmtManager(Agent *agent)
Definition: vrf.h:86
MacLearningMgmtDBTree hc_tree_
MacLearningMgmtDBEntry * Find(const DBEntry *e)
boost::shared_ptr< MacLearningMgmtRequest > MacLearningMgmtRequestPtr
DEPENDENCY_LIST(MacLearningMgmtNode, MacLearningMgmtDBEntry, mac_entry_list_)
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtDBEntry)
DependencyRef< MacLearningMgmtNode, MacLearningMgmtDBEntry > rt_
void DeleteMacLearningEntry(MacLearningMgmtRequestPtr ptr)
void set_rt(MacLearningMgmtDBEntry *rt)
void set_tree(MacLearningMgmtDBTree *tree)
MacLearningMgmtQueue request_queue_
MacLearningEntryPtr mac_learning_entry()
MacLearningMgmtDBTree intf_tree_
void UpdateRef(MacLearningMgmtManager *mgr)
MacLearningMgmtRequest(Event event, const DBEntry *db_entry, uint32_t gen_id)
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtDBTree)
DependencyList< MacLearningMgmtNode, MacLearningMgmtDBEntry > MacLearningEntryList
Base class for all Route entries in agent.
Definition: agent_route.h:224
MacLearningMgmtHcServiceEntry(const HealthCheckService *hc)
MacLearningMgmtDBTree * tree() const
void AddMacLearningEntry(MacLearningMgmtRequestPtr ptr)
MacLearningMgmtDBTree(MacLearningMgmtManager *mgr)
MacLearningMgmtManager * mac_learning_mac_manager_
MacLearningMgmtDBTree vn_tree_
MacLearningMgmtDBTree vrf_tree_
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtIntfEntry)
MacLearningMgmtRouteEntry(const AgentRoute *rt)
uint32_t gen_id() const
void set_gen_id(uint32_t gen_id)
const DBEntry * db_entry() const
Definition: agent.h:358
DependencyRef< MacLearningMgmtNode, MacLearningMgmtDBEntry > hc_service_
std::pair< MacLearningKey, MacLearningMgmtNodePtr > MacLearningNodePair
void Delete(bool set_delete, bool notify_event=true)
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtHcServiceEntry)
MacLearningMgmtNode(MacLearningEntryPtr ptr)
MacLearningMgmtVrfEntry(const VrfEntry *vrf)
void set_intf(MacLearningMgmtDBEntry *intf)
void DeleteDBEntry(MacLearningMgmtRequestPtr ptr, bool notify_event=true)
std::map< MacLearningKey, MacLearningMgmtNodePtr, MacLearningKeyCmp > MacLearningNodeTree
const DBEntry * db_entry()
void TryDelete(MacLearningMgmtDBEntry *db_entry)
std::pair< MacLearningMgmtDBEntry *, MacLearningMgmtDBEntry * > MacLearningMgmtDBPair
MacLearningMgmtManager * mac_learning_mac_manager()
void AddMacIpLearningEntry(MacLearningMgmtRequestPtr ptr)
MacLearningMgmtDBTree * vrf_tree()
bool operator()(const MacLearningMgmtDBEntry *lhs, const MacLearningMgmtDBEntry *rhs) const
void set_db_entry(const DBEntry *entry)
virtual bool UseDBEntry() const
void set_hc(MacLearningMgmtDBEntry *hc)
MacLearningMgmtIntfEntry(const Interface *intf)
void DeleteMacIpLearningEntry(MacLearningMgmtRequestPtr ptr)
std::pair< MacIpLearningKey, MacLearningMgmtNodePtr > MacIpLearningNodePair
void set_vrf(MacLearningMgmtDBEntry *vrf)
virtual bool UseDBEntry() const
void Erase(MacLearningMgmtDBEntry *entry)
Definition: vn.h:151
uint32_t gen_id() const
MacLearningMgmtDBEntry * Find(MacLearningMgmtDBEntry *entry)
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtRouteEntry)
MacLearningEntryPtr mac_learning_entry_
void ReleaseToken(MacLearningMgmtRequestPtr ptr)
DependencyRef< MacLearningMgmtNode, MacLearningMgmtDBEntry > vrf_
void set_gen_id(uint32_t gen_id)
MacLearningMgmtDBTree * rt_tree()
DependencyRef< MacLearningMgmtNode, MacLearningMgmtDBEntry > vn_
MacLearningMgmtDBTree * tree_
void Add(MacLearningMgmtDBEntry *entry)
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtNode)
MacLearningMgmtVnEntry(const VnEntry *vn)
WorkQueue< MacLearningMgmtRequestPtr > MacLearningMgmtQueue
MacLearningMgmtDBTree rt_tree_
std::map< MacIpLearningKey, MacLearningMgmtNodePtr, MacIpLearningKeyCmp > MacIpLearningNodeTree
MacLearningMgmtDBEntry(Type type_, const DBEntry *entry)
boost::shared_ptr< MacLearningMgmtNode > MacLearningMgmtNodePtr
bool IsVrfRouteEmpty(const std::string &vrf_name)
void set_mac_learning_entry(MacLearningEntryPtr mac_entry)
virtual bool Compare(const MacLearningMgmtDBEntry *rhs) const
MacLearningMgmtDBEntry * Locate(const DBEntry *e)
void AddDBEntry(MacLearningMgmtRequestPtr ptr)
const std::string & vrf()
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtVrfEntry)
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtVnEntry)
void reset(ObjectType *ptr)
Definition: dependency.h:32
MacLearningMgmtDBEntry * LowerBound(MacLearningMgmtDBEntry *entry)
void set_vn(MacLearningMgmtDBEntry *vn)
virtual bool IsLess(const MacLearningMgmtDBEntry *rhs) const
DISALLOW_COPY_AND_ASSIGN(MacLearningMgmtManager)
MacLearningNodeTree mac_learning_node_tree_
bool RequestHandler(MacLearningMgmtRequestPtr ptr)
MacIpLearningNodeTree mac_ip_learning_node_tree_
virtual bool Compare(const MacLearningMgmtDBEntry *rhs) const
boost::shared_ptr< MacLearningEntry > MacLearningEntryPtr