OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ksync_memory.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_VROUTER_KSYNC_KSYNC_MEMORY_H_
6 #define SRC_VNSW_AGENT_VROUTER_KSYNC_KSYNC_MEMORY_H_
7 
8 /*
9  * Module responsible to manage the VRouter memory mapped to agent
10  */
11 #include <list>
12 #include <base/address.h>
13 struct nl_client;
14 class KSync;
15 class KSyncMemory {
16 public:
17  // Time to sweep flow-table for audit
18  static const uint32_t kAuditSweepTime = 180;
19  // Timer interval for audit process
20  static const uint32_t kAuditYieldTimer = 100; // in msec
21  // Flows in HOLD state longer than kAuditTimeout are deleted
22  static const uint32_t kAuditTimeout = (5 * 1000 * 1000); // in usec
23  // Upper limit on number of entries to visit per timer
24  static const uint32_t kAuditYieldMax = (1024);
25  // Lower limit on number of entries to visit per timer
26  static const uint32_t kAuditYieldMin = (100);
27 
28  KSyncMemory(KSync *ksync, uint32_t minor_id);
29  virtual ~KSyncMemory();
30 
31  virtual void Init();
32  void InitMem(void *hpmem);
33  virtual void InitTest();
34  virtual void Shutdown();
35  bool AuditProcess();
36  void MapSharedMemory();
37  void GetTableSize();
38  int GetKernelTableSize();
39  void UnmapMemTest();
40 
41  virtual int EncodeReq(nl_client *nl, uint32_t attr_len) = 0;
42  virtual int get_entry_size() = 0;
43  virtual void SetTableSize() {};
44  virtual bool IsInactiveEntry(uint32_t idx, uint8_t &gen_id) = 0;
45  virtual void CreateProtoAuditEntry(uint32_t index, uint8_t gen_id) = 0;
46  virtual void DecrementHoldFlowCounter() {};
47  virtual void IncrementHoldFlowCounter() {};
48  virtual void UpdateAgentHoldFlowCounter() {};
49  KSync* ksync() const { return ksync_;}
50  void set_major_devid(int id) { major_devid_ = id;}
51  void set_table_size(int count) { table_size_ = count; }
52  void set_table_path(const std::string &path) {
53  table_path_ = path;
54  }
55  uint32_t audit_timeout() const { return audit_timeout_; }
56  void Mmap(bool unlink, void *khpmem, bool kernel_mode);
58 
59 protected:
60  struct AuditEntry {
61  AuditEntry(uint32_t flow_idx, uint8_t gen_id,
62  uint64_t t) : audit_idx(flow_idx),
63  audit_gen_id(gen_id), timeout(t) {}
64 
65  uint32_t audit_idx;
66  uint8_t audit_gen_id;
67  uint64_t timeout;
68  };
69 
71  void *table_;
72  // Name of file used to map flow table
73  std::string table_path_;
74  // major dev-id on linux based implementation
77  // Size of flow table memory
79  // Count of entries in flow-table
81  // Audit related entries
83 
84  uint32_t audit_timeout_;
85  uint32_t audit_yield_;
86  uint32_t audit_interval_;
87  uint32_t audit_idx_;
88  std::list<AuditEntry> audit_list_;
89 };
90 #endif
uint32_t audit_idx_
Definition: ksync_memory.h:87
static const uint32_t kAuditYieldTimer
Definition: ksync_memory.h:20
void set_table_path(const std::string &path)
Definition: ksync_memory.h:52
KSync * ksync() const
Definition: ksync_memory.h:49
static const uint32_t kAuditYieldMin
Definition: ksync_memory.h:26
std::string table_path_
Definition: ksync_memory.h:73
virtual void SetTableSize()
Definition: ksync_memory.h:43
virtual int EncodeReq(nl_client *nl, uint32_t attr_len)=0
void set_table_size(int count)
Definition: ksync_memory.h:51
virtual void UpdateAgentHoldFlowCounter()
Definition: ksync_memory.h:48
virtual bool IsInactiveEntry(uint32_t idx, uint8_t &gen_id)=0
void InitMem(void *hpmem)
Timer * audit_timer_
Definition: ksync_memory.h:82
uint32_t table_entries_count_
Definition: ksync_memory.h:80
static const uint32_t kAuditSweepTime
Definition: ksync_memory.h:18
uint32_t audit_yield_
Definition: ksync_memory.h:85
bool AuditProcess()
std::list< AuditEntry > audit_list_
Definition: ksync_memory.h:88
static const uint32_t kAuditYieldMax
Definition: ksync_memory.h:24
virtual void Init()
Definition: ksync_memory.cc:69
virtual void CreateProtoAuditEntry(uint32_t index, uint8_t gen_id)=0
int major_devid_
Definition: ksync_memory.h:75
void Mmap(bool unlink, void *khpmem, bool kernel_mode)
Definition: ksync_memory.cc:87
virtual void Shutdown()
uint32_t audit_interval_
Definition: ksync_memory.h:86
virtual int get_entry_size()=0
void * table_
Definition: ksync_memory.h:71
virtual void IncrementHoldFlowCounter()
Definition: ksync_memory.h:47
virtual void InitTest()
int minor_devid_
Definition: ksync_memory.h:76
uint32_t table_entries_count()
Definition: ksync_memory.h:57
uint32_t audit_timeout_
Definition: ksync_memory.h:84
static const uint32_t kAuditTimeout
Definition: ksync_memory.h:22
KSyncMemory(KSync *ksync, uint32_t minor_id)
Definition: ksync_memory.cc:46
virtual ~KSyncMemory()
Definition: ksync_memory.cc:65
KSync * ksync_
Definition: ksync_memory.h:70
int GetKernelTableSize()
uint32_t audit_timeout() const
Definition: ksync_memory.h:55
Definition: timer.h:54
virtual void DecrementHoldFlowCounter()
Definition: ksync_memory.h:46
void GetTableSize()
AuditEntry(uint32_t flow_idx, uint8_t gen_id, uint64_t t)
Definition: ksync_memory.h:61
void MapSharedMemory()
void set_major_devid(int id)
Definition: ksync_memory.h:50
void UnmapMemTest()