forked from sonic-net/sonic-swss
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nhgmaporch.h
65 lines (51 loc) · 1.57 KB
/
nhgmaporch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#pragma once
#include "orch.h"
#include "dbconnector.h"
#include <unordered_map>
using namespace std;
/*
* Structure describing a NHG map entry in the NHG map map.
*/
struct NhgMapEntry
{
/* The next hop group map SAI ID. */
sai_object_id_t id;
/* Number of external objects referencing this next hop group map. */
uint32_t ref_count;
/* The largest group index referenced by the map. */
int largest_nh_index;
explicit NhgMapEntry(sai_object_id_t id, uint32_t _ref_count, int _largest_nh_index);
};
class NhgMapOrch : public Orch
{
public:
NhgMapOrch(swss::DBConnector *db, const string &table_name);
void doTask(Consumer &consumer) override;
/*
* Return the SAI ID for the map indexed by "index". If it does not exist, return SAI_NULL_OBJECT_ID.
*/
sai_object_id_t getMapId(const string &key) const;
int getLargestNhIndex(const string &key) const;
/*
* Increase / Decrease reference counter for a map.
*/
void incRefCount(const string &key);
void decRefCount(const string &key);
/*
* Get the maximum number of FC classes supported by the switch.
*/
static sai_uint8_t getMaxNumFcs();
private:
/*
* Map of synced NHG maps over SAI.
*/
unordered_map<string, NhgMapEntry> m_syncdMaps;
/*
* Maximum number of NHG maps supported by the switch.
*/
static uint64_t m_max_nhg_map_count;
/*
* Extract the NHG map from the FV tuples
*/
static pair<bool, unordered_map<sai_uint32_t, sai_int32_t>> getMap(const vector<swss::FieldValueTuple> &values);
};