Skip to content

Commit 048cc63

Browse files
committed
Clang
Change-Id: Ia4493cb0cea9be122b4893a6623d12c8706fea49
1 parent ec74a35 commit 048cc63

File tree

82 files changed

+31526
-34599
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+31526
-34599
lines changed

orchagent/p4orch/acl_rule_manager.cpp

Lines changed: 2324 additions & 2224 deletions
Large diffs are not rendered by default.

orchagent/p4orch/acl_rule_manager.h

Lines changed: 140 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -14,174 +14,149 @@
1414
#include "return_code.h"
1515
#include "vrforch.h"
1616

17-
extern "C" {
17+
extern "C"
18+
{
1819
#include "sai.h"
1920
}
2021

21-
namespace p4orch {
22-
namespace test {
22+
namespace p4orch
23+
{
24+
namespace test
25+
{
2326
class AclManagerTest;
24-
} // namespace test
25-
26-
class AclRuleManager : public ObjectManagerInterface {
27-
public:
28-
explicit AclRuleManager(P4OidMapper* p4oidMapper, VRFOrch* vrfOrch,
29-
CoppOrch* coppOrch,
30-
ResponsePublisherInterface* publisher)
31-
: m_p4OidMapper(p4oidMapper),
32-
m_vrfOrch(vrfOrch),
33-
m_publisher(publisher),
34-
m_coppOrch(coppOrch),
35-
m_countersDb(std::make_unique<swss::DBConnector>("COUNTERS_DB", 0)),
36-
m_countersTable(std::make_unique<swss::Table>(
37-
m_countersDb.get(), std::string(COUNTERS_TABLE) +
38-
DEFAULT_KEY_SEPARATOR +
39-
APP_P4RT_TABLE_NAME)) {
40-
SWSS_LOG_ENTER();
41-
assert(m_p4OidMapper != nullptr);
42-
}
43-
virtual ~AclRuleManager() = default;
44-
45-
void enqueue(const std::string& table_name,
46-
const swss::KeyOpFieldsValuesTuple& entry) override;
47-
void drain() override;
48-
std::string verifyState(
49-
const std::string& key,
50-
const std::vector<swss::FieldValueTuple>& tuple) override;
51-
ReturnCode getSaiObject(const std::string& json_key,
52-
sai_object_type_t& object_type,
53-
std::string& object_key) override;
54-
55-
// Update counters stats for every rule in each ACL table in COUNTERS_DB, if
56-
// counters are enabled in rules.
57-
void doAclCounterStatsTask();
58-
59-
private:
60-
// Deserializes an entry in a dynamically created ACL table.
61-
ReturnCodeOr<P4AclRuleAppDbEntry> deserializeAclRuleAppDbEntry(
62-
const std::string& acl_table_name, const std::string& key,
63-
const std::vector<swss::FieldValueTuple>& attributes);
64-
65-
// Validate an ACL rule APP_DB entry.
66-
ReturnCode validateAclRuleAppDbEntry(const P4AclRuleAppDbEntry& app_db_entry);
67-
68-
// Get ACL rule by table name and rule key. Return nullptr if not found.
69-
P4AclRule* getAclRule(const std::string& acl_table_name,
70-
const std::string& acl_rule_key);
71-
72-
// Processes add operation for an ACL rule.
73-
ReturnCode processAddRuleRequest(const std::string& acl_rule_key,
74-
const P4AclRuleAppDbEntry& app_db_entry);
75-
76-
// Processes delete operation for an ACL rule.
77-
ReturnCode processDeleteRuleRequest(const std::string& acl_table_name,
78-
const std::string& acl_rule_key);
79-
80-
// Processes update operation for an ACL rule.
81-
ReturnCode processUpdateRuleRequest(const P4AclRuleAppDbEntry& app_db_entry,
82-
const P4AclRule& old_acl_rule);
83-
84-
// Set counters stats for an ACL rule in COUNTERS_DB.
85-
ReturnCode setAclRuleCounterStats(const P4AclRule& acl_rule);
86-
87-
// Create an ACL rule.
88-
ReturnCode createAclRule(P4AclRule& acl_rule);
89-
90-
// Create an ACL counter.
91-
ReturnCode createAclCounter(const std::string& acl_table_name,
92-
const std::string& counter_key,
93-
const P4AclRule& acl_rule,
94-
sai_object_id_t* counter_oid);
95-
96-
// Create an ACL meter.
97-
ReturnCode createAclMeter(const P4AclMeter& p4_acl_meter,
98-
const std::string& meter_key,
99-
sai_object_id_t* meter_oid);
100-
101-
// Remove an ACL counter.
102-
ReturnCode removeAclCounter(const std::string& acl_table_name,
103-
const std::string& counter_key);
104-
105-
// Update ACL meter.
106-
ReturnCode updateAclMeter(const P4AclMeter& new_acl_meter,
107-
const P4AclMeter& old_acl_meter);
108-
109-
// Update ACL rule.
110-
ReturnCode updateAclRule(const P4AclRule& new_acl_rule,
111-
const P4AclRule& old_acl_rule,
112-
std::vector<sai_attribute_t>& acl_entry_attrs,
113-
std::vector<sai_attribute_t>& rollback_attrs);
114-
115-
// Remove an ACL meter.
116-
ReturnCode removeAclMeter(const std::string& meter_key);
117-
118-
// Remove the ACL rule by key in the given ACL table.
119-
ReturnCode removeAclRule(const std::string& acl_table_name,
120-
const std::string& acl_rule_key);
121-
122-
// Set Meter value in ACL rule.
123-
ReturnCode setMeterValue(const P4AclTableDefinition* acl_table,
124-
const P4AclRuleAppDbEntry& app_db_entry,
125-
P4AclMeter& acl_meter);
126-
127-
// Validate and set all match attributes in an ACL rule.
128-
ReturnCode setAllMatchFieldValues(const P4AclRuleAppDbEntry& app_db_entry,
129-
const P4AclTableDefinition* acl_table,
130-
P4AclRule& acl_rules);
131-
132-
// Validate and set all action attributes in an ACL rule.
133-
ReturnCode setAllActionFieldValues(const P4AclRuleAppDbEntry& app_db_entry,
134-
const P4AclTableDefinition* acl_table,
135-
P4AclRule& acl_rule);
136-
137-
// Validate and set a match attribute in an ACL rule.
138-
ReturnCode setMatchValue(const acl_entry_attr_union_t attr_name,
139-
const std::string& attr_value,
140-
sai_attribute_value_t* value, P4AclRule* acl_rule,
141-
const std::string& ip_type_bit_type = EMPTY_STRING);
142-
143-
// Validate and set an action attribute in an ACL rule.
144-
ReturnCode setActionValue(const acl_entry_attr_union_t attr_name,
145-
const std::string& attr_value,
146-
sai_attribute_value_t* value, P4AclRule* acl_rule);
147-
148-
// Get port object id by name for redirect action.
149-
ReturnCode getRedirectActionPortOid(const std::string& target,
150-
sai_object_id_t* rediect_oid);
151-
152-
// Get next hop object id by name for redirect action.
153-
ReturnCode getRedirectActionNextHopOid(const std::string& target,
154-
sai_object_id_t* rediect_oid);
155-
156-
// Create user defined trap for each cpu queue/trap group and program user
157-
// defined traps in hostif. Save the user defined trap oids in m_p4OidMapper
158-
// and default ref count is 1.
159-
ReturnCode setUpUserDefinedTraps();
160-
161-
// Clean up user defined traps created for cpu queues. Callers need to make
162-
// sure ref count on user defined traps in m_userDefinedTraps are ones before
163-
// clean up.
164-
ReturnCode cleanUpUserDefinedTraps();
165-
166-
// Verifies internal cache for an entry.
167-
std::string verifyStateCache(const P4AclRuleAppDbEntry& app_db_entry,
168-
const P4AclRule* acl_rule);
169-
170-
// Verifies ASIC DB for an entry.
171-
std::string verifyStateAsicDb(const P4AclRule* acl_rule);
172-
173-
P4OidMapper* m_p4OidMapper;
174-
ResponsePublisherInterface* m_publisher;
175-
P4AclRuleTables m_aclRuleTables;
176-
VRFOrch* m_vrfOrch;
177-
CoppOrch* m_coppOrch;
178-
std::deque<swss::KeyOpFieldsValuesTuple> m_entries;
179-
std::unique_ptr<swss::DBConnector> m_countersDb;
180-
std::unique_ptr<swss::Table> m_countersTable;
181-
std::vector<P4UserDefinedTrapHostifTableEntry> m_userDefinedTraps;
182-
183-
friend class AclTableManager;
184-
friend class p4orch::test::AclManagerTest;
27+
} // namespace test
28+
29+
class AclRuleManager : public ObjectManagerInterface
30+
{
31+
public:
32+
explicit AclRuleManager(P4OidMapper *p4oidMapper, VRFOrch *vrfOrch, CoppOrch *coppOrch,
33+
ResponsePublisherInterface *publisher)
34+
: m_p4OidMapper(p4oidMapper), m_vrfOrch(vrfOrch), m_publisher(publisher), m_coppOrch(coppOrch),
35+
m_countersDb(std::make_unique<swss::DBConnector>("COUNTERS_DB", 0)),
36+
m_countersTable(std::make_unique<swss::Table>(
37+
m_countersDb.get(), std::string(COUNTERS_TABLE) + DEFAULT_KEY_SEPARATOR + APP_P4RT_TABLE_NAME))
38+
{
39+
SWSS_LOG_ENTER();
40+
assert(m_p4OidMapper != nullptr);
41+
}
42+
virtual ~AclRuleManager() = default;
43+
44+
void enqueue(const std::string &table_name, const swss::KeyOpFieldsValuesTuple &entry) override;
45+
void drain() override;
46+
std::string verifyState(const std::string &key, const std::vector<swss::FieldValueTuple> &tuple) override;
47+
ReturnCode getSaiObject(const std::string &json_key, sai_object_type_t &object_type,
48+
std::string &object_key) override;
49+
50+
// Update counters stats for every rule in each ACL table in COUNTERS_DB, if
51+
// counters are enabled in rules.
52+
void doAclCounterStatsTask();
53+
54+
private:
55+
// Deserializes an entry in a dynamically created ACL table.
56+
ReturnCodeOr<P4AclRuleAppDbEntry> deserializeAclRuleAppDbEntry(
57+
const std::string &acl_table_name, const std::string &key,
58+
const std::vector<swss::FieldValueTuple> &attributes);
59+
60+
// Validate an ACL rule APP_DB entry.
61+
ReturnCode validateAclRuleAppDbEntry(const P4AclRuleAppDbEntry &app_db_entry);
62+
63+
// Get ACL rule by table name and rule key. Return nullptr if not found.
64+
P4AclRule *getAclRule(const std::string &acl_table_name, const std::string &acl_rule_key);
65+
66+
// Processes add operation for an ACL rule.
67+
ReturnCode processAddRuleRequest(const std::string &acl_rule_key, const P4AclRuleAppDbEntry &app_db_entry);
68+
69+
// Processes delete operation for an ACL rule.
70+
ReturnCode processDeleteRuleRequest(const std::string &acl_table_name, const std::string &acl_rule_key);
71+
72+
// Processes update operation for an ACL rule.
73+
ReturnCode processUpdateRuleRequest(const P4AclRuleAppDbEntry &app_db_entry, const P4AclRule &old_acl_rule);
74+
75+
// Set counters stats for an ACL rule in COUNTERS_DB.
76+
ReturnCode setAclRuleCounterStats(const P4AclRule &acl_rule);
77+
78+
// Create an ACL rule.
79+
ReturnCode createAclRule(P4AclRule &acl_rule);
80+
81+
// Create an ACL counter.
82+
ReturnCode createAclCounter(const std::string &acl_table_name, const std::string &counter_key,
83+
const P4AclRule &acl_rule, sai_object_id_t *counter_oid);
84+
85+
// Create an ACL meter.
86+
ReturnCode createAclMeter(const P4AclMeter &p4_acl_meter, const std::string &meter_key, sai_object_id_t *meter_oid);
87+
88+
// Remove an ACL counter.
89+
ReturnCode removeAclCounter(const std::string &acl_table_name, const std::string &counter_key);
90+
91+
// Update ACL meter.
92+
ReturnCode updateAclMeter(const P4AclMeter &new_acl_meter, const P4AclMeter &old_acl_meter);
93+
94+
// Update ACL rule.
95+
ReturnCode updateAclRule(const P4AclRule &new_acl_rule, const P4AclRule &old_acl_rule,
96+
std::vector<sai_attribute_t> &acl_entry_attrs,
97+
std::vector<sai_attribute_t> &rollback_attrs);
98+
99+
// Remove an ACL meter.
100+
ReturnCode removeAclMeter(const std::string &meter_key);
101+
102+
// Remove the ACL rule by key in the given ACL table.
103+
ReturnCode removeAclRule(const std::string &acl_table_name, const std::string &acl_rule_key);
104+
105+
// Set Meter value in ACL rule.
106+
ReturnCode setMeterValue(const P4AclTableDefinition *acl_table, const P4AclRuleAppDbEntry &app_db_entry,
107+
P4AclMeter &acl_meter);
108+
109+
// Validate and set all match attributes in an ACL rule.
110+
ReturnCode setAllMatchFieldValues(const P4AclRuleAppDbEntry &app_db_entry, const P4AclTableDefinition *acl_table,
111+
P4AclRule &acl_rules);
112+
113+
// Validate and set all action attributes in an ACL rule.
114+
ReturnCode setAllActionFieldValues(const P4AclRuleAppDbEntry &app_db_entry, const P4AclTableDefinition *acl_table,
115+
P4AclRule &acl_rule);
116+
117+
// Validate and set a match attribute in an ACL rule.
118+
ReturnCode setMatchValue(const acl_entry_attr_union_t attr_name, const std::string &attr_value,
119+
sai_attribute_value_t *value, P4AclRule *acl_rule,
120+
const std::string &ip_type_bit_type = EMPTY_STRING);
121+
122+
// Validate and set an action attribute in an ACL rule.
123+
ReturnCode setActionValue(const acl_entry_attr_union_t attr_name, const std::string &attr_value,
124+
sai_attribute_value_t *value, P4AclRule *acl_rule);
125+
126+
// Get port object id by name for redirect action.
127+
ReturnCode getRedirectActionPortOid(const std::string &target, sai_object_id_t *rediect_oid);
128+
129+
// Get next hop object id by name for redirect action.
130+
ReturnCode getRedirectActionNextHopOid(const std::string &target, sai_object_id_t *rediect_oid);
131+
132+
// Create user defined trap for each cpu queue/trap group and program user
133+
// defined traps in hostif. Save the user defined trap oids in m_p4OidMapper
134+
// and default ref count is 1.
135+
ReturnCode setUpUserDefinedTraps();
136+
137+
// Clean up user defined traps created for cpu queues. Callers need to make
138+
// sure ref count on user defined traps in m_userDefinedTraps are ones before
139+
// clean up.
140+
ReturnCode cleanUpUserDefinedTraps();
141+
142+
// Verifies internal cache for an entry.
143+
std::string verifyStateCache(const P4AclRuleAppDbEntry &app_db_entry, const P4AclRule *acl_rule);
144+
145+
// Verifies ASIC DB for an entry.
146+
std::string verifyStateAsicDb(const P4AclRule *acl_rule);
147+
148+
P4OidMapper *m_p4OidMapper;
149+
ResponsePublisherInterface *m_publisher;
150+
P4AclRuleTables m_aclRuleTables;
151+
VRFOrch *m_vrfOrch;
152+
CoppOrch *m_coppOrch;
153+
std::deque<swss::KeyOpFieldsValuesTuple> m_entries;
154+
std::unique_ptr<swss::DBConnector> m_countersDb;
155+
std::unique_ptr<swss::Table> m_countersTable;
156+
std::vector<P4UserDefinedTrapHostifTableEntry> m_userDefinedTraps;
157+
158+
friend class AclTableManager;
159+
friend class p4orch::test::AclManagerTest;
185160
};
186161

187-
} // namespace p4orch
162+
} // namespace p4orch

0 commit comments

Comments
 (0)