Line data Source code
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 0 : 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 0 : virtual void DecrementHoldFlowCounter() {}; 47 0 : virtual void IncrementHoldFlowCounter() {}; 48 0 : virtual void UpdateAgentHoldFlowCounter() {}; 49 : KSync* ksync() const { return ksync_;} 50 0 : void set_major_devid(int id) { major_devid_ = id;} 51 0 : void set_table_size(int count) { table_size_ = count; } 52 0 : void set_table_path(const std::string &path) { 53 0 : table_path_ = path; 54 0 : } 55 4 : uint32_t audit_timeout() const { return audit_timeout_; } 56 : void Mmap(bool unlink, void *khpmem, bool kernel_mode); 57 1447966 : uint32_t table_entries_count() { return table_entries_count_; } 58 : 59 : protected: 60 : struct AuditEntry { 61 0 : AuditEntry(uint32_t flow_idx, uint8_t gen_id, 62 0 : uint64_t t) : audit_idx(flow_idx), 63 0 : 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 : 70 : KSync *ksync_; 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 75 : int major_devid_; 76 : int minor_devid_; 77 : // Size of flow table memory 78 : int table_size_; 79 : // Count of entries in flow-table 80 : uint32_t table_entries_count_; 81 : // Audit related entries 82 : Timer *audit_timer_; 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