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