OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mac_aging.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_AGING_H_
6 #define SRC_VNSW_AGENT_MAC_LEARNING_MAC_AGING_H_
7 
8 #include "cmn/agent.h"
9 class MacEntryResp;
10 class SandeshMacEntry;
11 
13 public:
15  virtual ~MacAgingEntry() {}
16 
18  mac_learning_entry_ = ptr;
19  }
20 
22  return mac_learning_entry_;
23  }
24 
25  void set_last_modified_time(uint64_t curr_time) {
26  last_modified_time_ = curr_time;
27  }
28 
29  uint64_t last_modified_time() const {
30  return last_modified_time_;
31  }
32 
33  uint64_t packets() const {
34  return packets_;
35  }
36 
37  void set_packets(uint64_t packets) {
38  packets_ = packets;
39  }
40 
41  void set_deleted(bool deleted) {
42  deleted_ = deleted;
43  }
44 
45  bool deleted() const {
46  return deleted_;
47  }
48 
49  void FillSandesh(SandeshMacEntry *sme) const;
50 private:
52  uint64_t packets_;
54  bool deleted_;
55  uint64_t addition_time_;
56 };
57 typedef boost::shared_ptr<MacAgingEntry> MacAgingEntryPtr;
58 
59 //Per VRF mac aging table
61 public:
62  static const uint32_t kDefaultAgingTimeout = 30 * 1000;
63  static const uint32_t kMinEntriesPerScan = 100;
64  typedef std::pair<MacLearningEntry*, MacAgingEntryPtr> MacAgingPair;
65  typedef std::map<MacLearningEntry*, MacAgingEntryPtr> MacAgingEntryTable;
66 
67  MacAgingTable(Agent *agent, const VrfEntry *);
68  virtual ~MacAgingTable();
69  uint32_t CalculateEntriesPerIteration(uint32_t table_size);
70  uint64_t timeout_in_usecs() const {
71  return timeout_msec_ * 1000;
72  }
73 
74  void set_timeout(uint32_t msec) {
75  timeout_msec_ = msec;
76  }
77  bool Run();
78  void Add(MacLearningEntryPtr ptr);
79  void Delete(MacLearningEntryPtr ptr);
80 
81  const MacAgingEntry *Find(MacLearningEntry *me) const {
82  MacAgingEntryTable::const_iterator it =
83  aging_table_.find(me);
84  if (it != aging_table_.end()) {
85  return it->second.get();
86  }
87  return NULL;
88  }
89 
90 private:
91  bool ShouldBeAged(MacAgingEntry *ptr, uint64_t curr_time);
92  void SendDeleteMsg(MacAgingEntry *ptr);
93  void ReadStats(MacAgingEntry *ptr);
94  void Trace(const std::string &str, MacAgingEntry *ptr);
95  friend class MacAgingSandeshResp;
99  uint32_t timeout_msec_;
102 };
103 
104 //MacAgingPartition maintains Per VRF mac entries
105 //for aging purpose. Timer for each partition gets
106 //fired every 100ms and goes thru all the VRF entries.
107 //No. of entries to be visited would be based on aging timeout
108 //and no. of entries in tree.
110 public:
111  static const uint32_t kMinIterationTimeout = 1 * 100;
113  typedef boost::shared_ptr<MacAgingTable> MacAgingTablePtr;
114  typedef std::pair<uint32_t, MacAgingTablePtr> MacAgingTablePair;
115  typedef std::map<uint32_t, MacAgingTablePtr> MacAgingTableMap;
116  MacAgingPartition(Agent *agent, uint32_t id);
117  virtual ~MacAgingPartition();
119  bool Run();
121  void Add(MacLearningEntryPtr ptr);
122  void Delete(MacLearningEntryPtr ptr);
123 
124  MacAgingTable *Find(uint32_t id) {
125  return aging_table_map_[id].get();
126  }
127 
128 private:
129  void DeleteVrf(uint32_t id);
130  friend class MacAgingSandeshResp;
132  uint32_t partition_id_;
135  tbb::mutex mutex_;
138 };
139 #endif
tbb::mutex mutex_
Definition: mac_aging.h:135
std::map< uint32_t, MacAgingTablePtr > MacAgingTableMap
Definition: mac_aging.h:115
void ReadStats(MacAgingEntry *ptr)
Definition: mac_aging.cc:69
boost::shared_ptr< MacAgingEntry > MacAgingEntryPtr
Definition: mac_aging.h:57
static const uint32_t kDefaultAgingTimeout
Definition: mac_aging.h:62
Definition: vrf.h:86
void Trace(const std::string &str, MacAgingEntry *ptr)
Definition: mac_aging.cc:100
MacLearningEntry * last_key_
Definition: mac_aging.h:98
void set_deleted(bool deleted)
Definition: mac_aging.h:41
DISALLOW_COPY_AND_ASSIGN(MacAgingTable)
uint64_t packets() const
Definition: mac_aging.h:33
MacAgingTable * Find(uint32_t id)
Definition: mac_aging.h:124
bool ShouldBeAged(MacAgingEntry *ptr, uint64_t curr_time)
Definition: mac_aging.cc:83
WorkQueue< MacLearningEntryRequestPtr > MacAgingQueue
Definition: mac_aging.h:112
friend class MacAgingSandeshResp
Definition: mac_aging.h:130
static const uint32_t kMinEntriesPerScan
Definition: mac_aging.h:63
MacAgingTableMap aging_table_map_
Definition: mac_aging.h:136
const MacAgingEntry * Find(MacLearningEntry *me) const
Definition: mac_aging.h:81
uint64_t packets_
Definition: mac_aging.h:52
MacLearningEntryPtr mac_learning_entry() const
Definition: mac_aging.h:21
boost::shared_ptr< MacAgingTable > MacAgingTablePtr
Definition: mac_aging.h:113
uint32_t partition_id_
Definition: mac_aging.h:132
uint64_t last_modified_time_
Definition: mac_aging.h:53
uint32_t CalculateEntriesPerIteration(uint32_t table_size)
Definition: mac_aging.cc:122
Definition: agent.h:358
void set_timeout(uint32_t msec)
Definition: mac_aging.h:74
std::map< MacLearningEntry *, MacAgingEntryPtr > MacAgingEntryTable
Definition: mac_aging.h:65
virtual ~MacAgingEntry()
Definition: mac_aging.h:15
virtual ~MacAgingPartition()
Definition: mac_aging.cc:190
virtual ~MacAgingTable()
Definition: mac_aging.cc:46
VrfEntryConstRef vrf_
Definition: mac_aging.h:100
bool deleted_
Definition: mac_aging.h:54
MacAgingEntryTable aging_table_
Definition: mac_aging.h:97
bool RequestHandler(MacLearningEntryRequestPtr ptr)
Definition: mac_aging.cc:239
MacAgingQueue request_queue_
Definition: mac_aging.h:133
std::pair< MacLearningEntry *, MacAgingEntryPtr > MacAgingPair
Definition: mac_aging.h:64
boost::shared_ptr< MacLearningEntryRequest > MacLearningEntryRequestPtr
friend class MacAgingSandeshResp
Definition: mac_aging.h:95
DISALLOW_COPY_AND_ASSIGN(MacAgingPartition)
void SendDeleteMsg(MacAgingEntry *ptr)
Definition: mac_aging.cc:113
void Enqueue(MacLearningEntryRequestPtr req)
Definition: mac_aging.cc:194
static const uint32_t kMinIterationTimeout
Definition: mac_aging.h:111
MacAgingEntry(MacLearningEntryPtr ptr)
Definition: mac_aging.cc:21
Agent * agent_
Definition: mac_aging.h:96
MacAgingPartition(Agent *agent, uint32_t id)
Definition: mac_aging.cc:178
void set_last_modified_time(uint64_t curr_time)
Definition: mac_aging.h:25
void DeleteVrf(uint32_t id)
Definition: mac_aging.cc:235
MacAgingTable(Agent *agent, const VrfEntry *)
Definition: mac_aging.cc:42
uint32_t timeout_msec_
Definition: mac_aging.h:99
void set_mac_learning_entry(MacLearningEntryPtr ptr)
Definition: mac_aging.h:17
MacLearningEntryPtr mac_learning_entry_
Definition: mac_aging.h:51
uint64_t last_modified_time() const
Definition: mac_aging.h:29
bool deleted() const
Definition: mac_aging.h:45
uint64_t addition_time_
Definition: mac_aging.h:55
void Delete(MacLearningEntryPtr ptr)
Definition: mac_aging.cc:216
std::pair< uint32_t, MacAgingTablePtr > MacAgingTablePair
Definition: mac_aging.h:114
void Add(MacLearningEntryPtr ptr)
Definition: mac_aging.cc:49
void Delete(MacLearningEntryPtr ptr)
Definition: mac_aging.cc:61
void FillSandesh(SandeshMacEntry *sme) const
Definition: mac_aging.cc:27
Definition: timer.h:54
uint64_t timeout_in_usecs() const
Definition: mac_aging.h:70
boost::shared_ptr< MacLearningEntry > MacLearningEntryPtr
void set_packets(uint64_t packets)
Definition: mac_aging.h:37
void Add(MacLearningEntryPtr ptr)
Definition: mac_aging.cc:198