LCOV - code coverage report
Current view: top level - vnsw/agent/vrouter/ksync - ksync_memory.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 2 14 14.3 %
Date: 2026-08-03 02:19:58 Functions: 2 10 20.0 %
Legend: Lines: hit not hit

          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

Generated by: LCOV version 1.14