Skip to content

Commit 34da384

Browse files
Merge pull request #3862 from rkavitha-hcl/acl_actions
[P4Orch] Enable ACL Action SET_ACL_META_DATA and packet action COPY_CANCEL and DENY support
2 parents 0e233d1 + b17e712 commit 34da384

File tree

5 files changed

+267
-4
lines changed

5 files changed

+267
-4
lines changed

orchagent/p4orch/acl_rule_manager.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,7 +1412,9 @@ ReturnCode AclRuleManager::setActionValue(const acl_entry_attr_union_t attr_name
14121412
case SAI_ACL_ENTRY_ATTR_ACTION_SET_DSCP:
14131413
case SAI_ACL_ENTRY_ATTR_ACTION_SET_ECN:
14141414
case SAI_ACL_ENTRY_ATTR_ACTION_SET_INNER_VLAN_PRI:
1415-
case SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI: {
1415+
case SAI_ACL_ENTRY_ATTR_ACTION_SET_OUTER_VLAN_PRI:
1416+
case SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA: {
1417+
14161418
try
14171419
{
14181420
value->aclaction.parameter.u8 = to_uint<uint8_t>(attr_value);
@@ -1529,7 +1531,7 @@ ReturnCode AclRuleManager::createAclRule(P4AclRule &acl_rule)
15291531
{
15301532
SWSS_LOG_ENTER();
15311533

1532-
// Track if the entry creats a new counter or meter
1534+
// Track if the entry creates a new counter or meter
15331535
bool created_meter = false;
15341536
bool created_counter = false;
15351537
const auto &table_name_and_rule_key = concatTableNameAndRuleKey(acl_rule.acl_table_name, acl_rule.acl_rule_key);

orchagent/p4orch/acl_util.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,13 +355,17 @@ using P4AclRuleTables = std::map<std::string, std::map<std::string, P4AclRule>>;
355355
#define P4_ACTION_SET_L4_DST_PORT "SAI_ACL_ENTRY_ATTR_ACTION_SET_L4_DST_PORT"
356356
#define P4_ACTION_SET_DO_NOT_LEARN "SAI_ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN"
357357
#define P4_ACTION_SET_VRF "SAI_ACL_ENTRY_ATTR_ACTION_SET_VRF"
358+
#define P4_ACTION_SET_ACL_META_DATA "SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA"
358359
#define P4_ACTION_SET_QOS_QUEUE "QOS_QUEUE"
359360

360361
#define P4_PACKET_ACTION_FORWARD "SAI_PACKET_ACTION_FORWARD"
361362
#define P4_PACKET_ACTION_DROP "SAI_PACKET_ACTION_DROP"
362363
#define P4_PACKET_ACTION_COPY "SAI_PACKET_ACTION_COPY"
363364
#define P4_PACKET_ACTION_PUNT "SAI_PACKET_ACTION_TRAP"
364365
#define P4_PACKET_ACTION_LOG "SAI_PACKET_ACTION_LOG"
366+
#define P4_PACKET_ACTION_COPY_CANCEL "SAI_PACKET_ACTION_COPY_CANCEL"
367+
#define P4_PACKET_ACTION_DENY "SAI_PACKET_ACTION_DENY"
368+
365369

366370
#define P4_PACKET_ACTION_REDIRECT "REDIRECT"
367371

@@ -428,7 +432,12 @@ using P4AclRuleTables = std::map<std::string, std::map<std::string, P4AclRule>>;
428432
#define GENL_PACKET_TRAP_GROUP_NAME_PREFIX "trap.group.cpu.queue."
429433

430434
#define EMPTY_STRING ""
431-
#define P4_CPU_QUEUE_MAX_NUM 8
435+
436+
// TODO : To avoid existing p4 tests failure, extend the queue
437+
// temporarily, should set to 7-14 later.
438+
#define P4_CPU_QUEUE_MIN_NUM 1 // 7
439+
#define P4_CPU_QUEUE_MAX_NUM 15 // 14
440+
432441
#define IPV6_SINGLE_WORD_BYTES_LENGTH 4
433442
#define BYTE_BITWIDTH 8
434443

@@ -614,6 +623,8 @@ static const acl_packet_action_lookup_t aclPacketActionLookup = {
614623
{P4_PACKET_ACTION_FORWARD, SAI_PACKET_ACTION_FORWARD}, {P4_PACKET_ACTION_DROP, SAI_PACKET_ACTION_DROP},
615624
{P4_PACKET_ACTION_COPY, SAI_PACKET_ACTION_COPY}, {P4_PACKET_ACTION_PUNT, SAI_PACKET_ACTION_TRAP},
616625
{P4_PACKET_ACTION_LOG, SAI_PACKET_ACTION_LOG},
626+
{P4_PACKET_ACTION_COPY_CANCEL, SAI_PACKET_ACTION_COPY_CANCEL},
627+
{P4_PACKET_ACTION_DENY, SAI_PACKET_ACTION_DENY},
617628
};
618629

619630
static const acl_rule_attr_lookup_t aclActionLookup = {
@@ -643,6 +654,7 @@ static const acl_rule_attr_lookup_t aclActionLookup = {
643654
{P4_ACTION_SET_QOS_QUEUE, SAI_ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID},
644655
{P4_ACTION_SET_DO_NOT_LEARN, SAI_ACL_ENTRY_ATTR_ACTION_SET_DO_NOT_LEARN},
645656
{P4_ACTION_SET_VRF, SAI_ACL_ENTRY_ATTR_ACTION_SET_VRF},
657+
{P4_ACTION_SET_ACL_META_DATA, SAI_ACL_ENTRY_ATTR_ACTION_SET_ACL_META_DATA},
646658
};
647659

648660
static const acl_packet_color_policer_attr_lookup_t aclPacketColorPolicerAttrLookup = {

orchagent/p4orch/tests/acl_manager_test.cpp

Lines changed: 145 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "table.h"
2424
#include "tokenize.h"
2525
#include "vrforch.h"
26+
#include "logger.h"
2627

2728
using ::p4orch::kTableKeyDelimiter;
2829

@@ -715,9 +716,34 @@ P4AclTableDefinitionAppDbEntry getDefaultAclTableDefAppDbEntry()
715716
app_db_entry.action_field_lookup["do_not_learn"].push_back(
716717
{.sai_action = P4_ACTION_SET_DO_NOT_LEARN, .p4_param_name = EMPTY_STRING});
717718
app_db_entry.action_field_lookup["set_vrf"].push_back({.sai_action = P4_ACTION_SET_VRF, .p4_param_name = "vrf"});
719+
app_db_entry.action_field_lookup["set_metadata"].push_back(
720+
{.sai_action = P4_ACTION_SET_ACL_META_DATA,
721+
.p4_param_name = "acl_metadata"});
718722
app_db_entry.action_field_lookup["qos_queue"].push_back(
719723
{.sai_action = P4_ACTION_SET_QOS_QUEUE, .p4_param_name = "cpu_queue"});
720724

725+
726+
// action/acl_rate_limit_copy = [
727+
// {"action":"SAI_PACKET_ACTION_FORWARD","packet_color":"SAI_PACKET_COLOR_GREEN"},
728+
// {"action":"SAI_PACKET_ACTION_COPY_CANCEL","packet_color":"SAI_PACKET_COLOR_YELLOW"},
729+
// {"action":"SAI_PACKET_ACTION_COPY_CANCEL","packet_color":"SAI_PACKET_COLOR_RED"},
730+
// {"action":"QOS_QUEUE","param":"qos_queue"}
731+
// ]
732+
733+
app_db_entry.packet_action_color_lookup["acl_rate_limit_copy"].push_back(
734+
{.packet_action = P4_PACKET_ACTION_FORWARD,
735+
.packet_color = P4_PACKET_COLOR_GREEN});
736+
app_db_entry.packet_action_color_lookup["acl_rate_limit_copy"].push_back(
737+
{.packet_action = P4_PACKET_ACTION_COPY_CANCEL,
738+
.packet_color = P4_PACKET_COLOR_YELLOW});
739+
app_db_entry.packet_action_color_lookup["acl_rate_limit_copy"].push_back(
740+
{.packet_action = P4_PACKET_ACTION_COPY_CANCEL,
741+
.packet_color = P4_PACKET_COLOR_RED});
742+
app_db_entry.action_field_lookup["acl_rate_limit_copy"].push_back(
743+
{.sai_action = P4_ACTION_SET_QOS_QUEUE, .p4_param_name = "qos_queue"});
744+
745+
746+
721747
// "action/acl_trap" = [
722748
// {"action": "SAI_PACKET_ACTION_TRAP", "packet_color":
723749
// "SAI_PACKET_COLOR_GREEN"},
@@ -2966,6 +2992,124 @@ TEST_F(AclManagerTest, AclRuleWithColorPacketActionsButNoRateLimit)
29662992
acl_rule->action_fvs[SAI_ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID].aclaction.parameter.oid);
29672993
}
29682994

2995+
TEST_F(AclManagerTest, AclRuleWithColorPacketActionsButWithRateLimit) {
2996+
ASSERT_NO_FATAL_FAILURE(AddDefaultIngressTable());
2997+
2998+
// Create app_db_entry with color packet action, but no rate limit attributes
2999+
P4AclRuleAppDbEntry app_db_entry;
3000+
app_db_entry.acl_table_name = kAclIngressTableName;
3001+
app_db_entry.priority = 100;
3002+
// ACL rule match fields
3003+
app_db_entry.match_fvs["ether_type"] = "0x0800";
3004+
app_db_entry.match_fvs["ipv6_dst"] = "fdf8:f53b:82e4::53";
3005+
app_db_entry.match_fvs["ether_dst"] = "AA:BB:CC:DD:EE:FF";
3006+
app_db_entry.match_fvs["ether_src"] = "AA:BB:CC:DD:EE:FF";
3007+
app_db_entry.match_fvs["ipv6_next_header"] = "1";
3008+
app_db_entry.match_fvs["src_ipv6_64bit"] = "fdf8:f53b:82e4::";
3009+
app_db_entry.match_fvs["arp_tpa"] = "0xff112231";
3010+
app_db_entry.match_fvs["udf2"] = "0x9876 & 0xAAAA";
3011+
app_db_entry.db_key =
3012+
"ACL_PUNT_TABLE:{\"match/ether_type\": \"0x0800\",\"match/ipv6_dst\": "
3013+
"\"fdf8:f53b:82e4::53\",\"match/ether_dst\": \"AA:BB:CC:DD:EE:FF\", "
3014+
"\"match/ether_src\": \"AA:BB:CC:DD:EE:FF\", \"match/ipv6_next_header\": "
3015+
"\"1\", \"match/src_ipv6_64bit\": "
3016+
"\"fdf8:f53b:82e4::\",\"match/arp_tpa\": \"0xff112231\",\"match/udf2\": "
3017+
"\"0x9876 & 0xAAAA\",\"priority\":100}";
3018+
3019+
const auto& acl_rule_key =
3020+
KeyGenerator::generateAclRuleKey(app_db_entry.match_fvs, "100");
3021+
3022+
// Set user defined trap for QOS_QUEUE, and color packet actions in meter
3023+
int queue_num = 8;
3024+
app_db_entry.action = "acl_rate_limit_copy";
3025+
app_db_entry.action_param_fvs["qos_queue"] = std::to_string(queue_num);
3026+
// Install rule
3027+
EXPECT_CALL(mock_sai_acl_, create_acl_entry(_, _, _, _))
3028+
.WillOnce(DoAll(SetArgPointee<0>(kAclIngressRuleOid1),
3029+
Return(SAI_STATUS_SUCCESS)));
3030+
3031+
EXPECT_CALL(mock_sai_acl_, create_acl_counter(_, _, _, _))
3032+
.WillOnce(Return(SAI_STATUS_SUCCESS));
3033+
EXPECT_CALL(
3034+
mock_sai_policer_,
3035+
create_policer(
3036+
_, Eq(gSwitchId), Eq(9),
3037+
Truly(std::bind(MatchSaiPolicerAttribute, 9, SAI_METER_TYPE_PACKETS,
3038+
SAI_PACKET_ACTION_FORWARD,
3039+
SAI_PACKET_ACTION_COPY_CANCEL,
3040+
SAI_PACKET_ACTION_COPY_CANCEL,
3041+
0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
3042+
std::placeholders::_1))))
3043+
.WillOnce(
3044+
DoAll(SetArgPointee<0>(kAclMeterOid1), Return(SAI_STATUS_SUCCESS)));
3045+
EXPECT_EQ(StatusCode::SWSS_RC_SUCCESS,
3046+
ProcessAddRuleRequest(acl_rule_key, app_db_entry));
3047+
auto acl_rule = GetAclRule(kAclIngressTableName, acl_rule_key);
3048+
ASSERT_NE(nullptr, acl_rule);
3049+
// Check action field value
3050+
EXPECT_EQ(gUserDefinedTrapStartOid + queue_num - P4_CPU_QUEUE_MIN_NUM + 1,
3051+
acl_rule->action_fvs[SAI_ACL_ENTRY_ATTR_ACTION_SET_USER_TRAP_ID]
3052+
.aclaction.parameter.oid);
3053+
}
3054+
3055+
TEST_F(AclManagerTest, AclRuleWithMockedPacketAction) {
3056+
ASSERT_NO_FATAL_FAILURE(AddDefaultIngressTable());
3057+
auto app_db_entry = getDefaultAclRuleAppDbEntryWithoutAction();
3058+
const auto& acl_rule_key =
3059+
KeyGenerator::generateAclRuleKey(app_db_entry.match_fvs, "100");
3060+
3061+
// set packet action
3062+
app_db_entry.action = "set_packet_action";
3063+
app_db_entry.action_param_fvs["packet_action"] =
3064+
"SAI_PACKET_ACTION_COPY_CANCEL";
3065+
3066+
// Install rule
3067+
EXPECT_CALL(mock_sai_acl_, create_acl_entry(_, _, _, _))
3068+
.WillOnce(DoAll(SetArgPointee<0>(kAclIngressRuleOid1),
3069+
Return(SAI_STATUS_SUCCESS)));
3070+
EXPECT_CALL(mock_sai_acl_, create_acl_counter(_, _, _, _))
3071+
.WillOnce(Return(SAI_STATUS_SUCCESS));
3072+
EXPECT_CALL(mock_sai_policer_, create_policer(_, _, _, _))
3073+
.WillOnce(
3074+
DoAll(SetArgPointee<0>(kAclMeterOid1), Return(SAI_STATUS_SUCCESS)));
3075+
EXPECT_EQ(StatusCode::SWSS_RC_SUCCESS,
3076+
ProcessAddRuleRequest(acl_rule_key, app_db_entry));
3077+
auto* acl_rule = GetAclRule(kAclIngressTableName, acl_rule_key);
3078+
ASSERT_NE(nullptr, acl_rule);
3079+
3080+
// Check action field value
3081+
EXPECT_EQ(SAI_PACKET_ACTION_COPY_CANCEL,
3082+
acl_rule->action_fvs[SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION]
3083+
.aclaction.parameter.s32);
3084+
3085+
// update packet action
3086+
app_db_entry.action_param_fvs["packet_action"] = "SAI_PACKET_ACTION_DENY";
3087+
EXPECT_CALL(mock_sai_acl_,
3088+
set_acl_entry_attribute(Eq(kAclIngressRuleOid1), _))
3089+
.WillOnce(Return(SAI_STATUS_SUCCESS));
3090+
EXPECT_EQ(StatusCode::SWSS_RC_SUCCESS,
3091+
ProcessUpdateRuleRequest(app_db_entry, *acl_rule));
3092+
acl_rule = GetAclRule(kAclIngressTableName, acl_rule_key);
3093+
ASSERT_NE(nullptr, acl_rule);
3094+
3095+
// Check action field value
3096+
EXPECT_EQ(SAI_PACKET_ACTION_DENY,
3097+
acl_rule->action_fvs[SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION]
3098+
.aclaction.parameter.s32);
3099+
3100+
// Remove rule
3101+
EXPECT_CALL(mock_sai_acl_, remove_acl_entry(Eq(kAclIngressRuleOid1)))
3102+
.WillOnce(Return(SAI_STATUS_SUCCESS));
3103+
EXPECT_CALL(mock_sai_acl_, remove_acl_counter(_))
3104+
.WillOnce(Return(SAI_STATUS_SUCCESS));
3105+
EXPECT_CALL(mock_sai_policer_, remove_policer(Eq(kAclMeterOid1)))
3106+
.WillOnce(Return(SAI_STATUS_SUCCESS));
3107+
EXPECT_EQ(StatusCode::SWSS_RC_SUCCESS,
3108+
ProcessDeleteRuleRequest(kAclIngressTableName, acl_rule_key));
3109+
EXPECT_EQ(nullptr, GetAclRule(kAclIngressTableName, acl_rule_key));
3110+
}
3111+
3112+
29693113
#pragma GCC diagnostic warning "-Wdisabled-optimization"
29703114

29713115
TEST_F(AclManagerTest, AclRuleWithValidAction)
@@ -4293,7 +4437,7 @@ TEST_F(AclManagerTest, CreateAclRuleWithInvalidActionFails)
42934437
app_db_entry.action_param_fvs.erase("target");
42944438
// Invalid cpu queue number
42954439
app_db_entry.action = "qos_queue";
4296-
app_db_entry.action_param_fvs["cpu_queue"] = "10";
4440+
app_db_entry.action_param_fvs["cpu_queue"] = "18";
42974441
EXPECT_EQ(StatusCode::SWSS_RC_INVALID_PARAM, ProcessAddRuleRequest(acl_rule_key, app_db_entry));
42984442
app_db_entry.action_param_fvs["cpu_queue"] = "invalid";
42994443
EXPECT_EQ(StatusCode::SWSS_RC_INVALID_PARAM, ProcessAddRuleRequest(acl_rule_key, app_db_entry));

tests/p4rt/acl.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class P4RtAclTableDefinitionWrapper(util.DBInterface):
4242
ACTION_COPY_AND_SET_TC = "action/copy_and_set_tc"
4343
ACTION_PUNT_AND_SET_TC = "action/punt_and_set_tc"
4444
ACTION_SET_QOS_QUEUE = "action/qos_queue"
45+
ACTION_SET_ACL_RATE_LIMIT_COPY = "action/acl_rate_limit_copy"
4546
METER_UNIT = "meter/unit"
4647
COUNTER_UNIT = "counter/unit"
4748

tests/p4rt/test_p4rt_acl.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ def test_AclRulesAddUpdateDelPass(self, dvs, testlog):
176176
punt_and_set_tc = '[{"action":"SAI_PACKET_ACTION_TRAP","packet_color":"SAI_PACKET_COLOR_RED"},{"action":"SAI_ACL_ENTRY_ATTR_ACTION_SET_TC","param":"traffic_class"}]'
177177
qos_queue = '[{"action":"SAI_PACKET_ACTION_TRAP"},{"action":"QOS_QUEUE","param":"cpu_queue"}]'
178178

179+
acl_rate_limit_copy = '[{"action":"SAI_PACKET_ACTION_FORWARD","packet_color":"SAI_PACKET_COLOR_GREEN"},{"action":"SAI_PACKET_ACTION_COPY_CANCEL","packet_color":"SAI_PACKET_COLOR_YELLOW"},{"action":"SAI_PACKET_ACTION_COPY_CANCEL","packet_color":"SAI_PACKET_COLOR_RED"},{"action":"QOS_QUEUE","param":"qos_queue"}]'
180+
179181
attr_list = [
180182
(self._p4rt_acl_table_definition_obj.STAGE_FIELD, stage),
181183
(self._p4rt_acl_table_definition_obj.PRIORITY_FIELD, priority),
@@ -201,6 +203,7 @@ def test_AclRulesAddUpdateDelPass(self, dvs, testlog):
201203
punt_and_set_tc,
202204
),
203205
(self._p4rt_acl_table_definition_obj.ACTION_SET_QOS_QUEUE, qos_queue),
206+
(self._p4rt_acl_table_definition_obj.ACTION_SET_ACL_RATE_LIMIT_COPY, acl_rate_limit_copy),
204207
(self._p4rt_acl_table_definition_obj.METER_UNIT, meter_unit),
205208
(self._p4rt_acl_table_definition_obj.COUNTER_UNIT, counter_unit),
206209
]
@@ -1021,6 +1024,107 @@ def test_AclRulesAddUpdateDelPass(self, dvs, testlog):
10211024
]
10221025
util.verify_attr(fvs, attr_list)
10231026

1027+
1028+
# update ACL rule 2 with acl_rate_limit_copy action
1029+
action = "acl_rate_limit_copy"
1030+
1031+
attr_list = [
1032+
(self._p4rt_acl_rule_obj.ACTION, action),
1033+
("param/qos_queue", "7"),
1034+
(self._p4rt_acl_rule_obj.METER_CIR, meter_cir),
1035+
(self._p4rt_acl_rule_obj.METER_CBURST, meter_cbs),
1036+
(self._p4rt_acl_rule_obj.METER_PIR, meter_pir),
1037+
(self._p4rt_acl_rule_obj.METER_PBURST, meter_pbs),
1038+
]
1039+
1040+
self._p4rt_acl_rule_obj.set_app_db_entry(
1041+
table_name_with_rule_key2, attr_list)
1042+
util.verify_response(
1043+
self.response_consumer,
1044+
table_name_with_rule_key2,
1045+
attr_list,
1046+
"SWSS_RC_SUCCESS",
1047+
)
1048+
1049+
# query application database for ACL rules
1050+
acl_rules = util.get_keys(
1051+
self._p4rt_acl_rule_obj.appl_db,
1052+
self._p4rt_acl_rule_obj.APP_DB_TBL_NAME + ":" + table_name,
1053+
)
1054+
assert len(acl_rules) == len(original_appl_acl_rules) + 3
1055+
1056+
# query application database for updated ACL rule
1057+
(status, fvs) = util.get_key(
1058+
self._p4rt_acl_rule_obj.appl_db,
1059+
self._p4rt_acl_table_definition_obj.APP_DB_TBL_NAME,
1060+
table_name_with_rule_key2,
1061+
)
1062+
assert status == True
1063+
util.verify_attr(fvs, attr_list)
1064+
1065+
# query ASIC database for updated ACL meter
1066+
(status, fvs) = util.get_key(
1067+
self._p4rt_acl_meter_obj.asic_db,
1068+
self._p4rt_acl_meter_obj.ASIC_DB_TBL_NAME,
1069+
meter_asic_db_key2,
1070+
)
1071+
assert status == True
1072+
attr_list = [
1073+
(
1074+
self._p4rt_acl_meter_obj.SAI_ATTR_GREEN_PACKET_ACTION,
1075+
"SAI_PACKET_ACTION_FORWARD",
1076+
),
1077+
(
1078+
self._p4rt_acl_meter_obj.SAI_ATTR_YELLOW_PACKET_ACTION,
1079+
"SAI_PACKET_ACTION_COPY_CANCEL",
1080+
),
1081+
(
1082+
self._p4rt_acl_meter_obj.SAI_ATTR_RED_PACKET_ACTION,
1083+
"SAI_PACKET_ACTION_COPY_CANCEL",
1084+
),
1085+
(self._p4rt_acl_meter_obj.SAI_ATTR_METER_TYPE, "SAI_METER_TYPE_PACKETS"),
1086+
(self._p4rt_acl_meter_obj.SAI_ATTR_METER_MODE, "SAI_POLICER_MODE_TR_TCM"),
1087+
(self._p4rt_acl_meter_obj.SAI_ATTR_METER_CIR, meter_cir),
1088+
(self._p4rt_acl_meter_obj.SAI_ATTR_METER_CBS, meter_cbs),
1089+
(self._p4rt_acl_meter_obj.SAI_ATTR_METER_PIR, meter_pir),
1090+
(self._p4rt_acl_meter_obj.SAI_ATTR_METER_PBS, meter_pbs),
1091+
]
1092+
util.verify_attr(fvs, attr_list)
1093+
1094+
# query ASIC database for updated ACL rule
1095+
(status, fvs) = util.get_key(
1096+
self._p4rt_acl_rule_obj.asic_db,
1097+
self._p4rt_acl_rule_obj.ASIC_DB_TBL_NAME,
1098+
rule_asic_db_key2,
1099+
)
1100+
assert status == True
1101+
attr_list = [
1102+
(
1103+
self._p4rt_acl_rule_obj.SAI_ATTR_ACTION_SET_USER_TRAP_ID,
1104+
user_trap_asic_db_key,
1105+
),
1106+
(
1107+
self._p4rt_acl_rule_obj.SAI_ATTR_ACTION_PACKET_ACTION,
1108+
"disabled",
1109+
),
1110+
(self._p4rt_acl_rule_obj.SAI_ATTR_MATCH_ETHER_TYPE, "2048&mask:0xffff"),
1111+
(
1112+
self._p4rt_acl_rule_obj.SAI_ATTR_MATCH_IP_TYPE,
1113+
"SAI_ACL_IP_TYPE_IP&mask:0xffffffffffffffff",
1114+
),
1115+
(
1116+
self._p4rt_acl_rule_obj.SAI_ATTR_MATCH_DST_MAC,
1117+
"AA:BB:CC:DD:EE:FF&mask:FF:FF:FF:FF:FF:FF",
1118+
),
1119+
(self._p4rt_acl_rule_obj.SAI_ATTR_TABLE_ID, table_asic_db_key),
1120+
(self._p4rt_acl_rule_obj.SAI_ATTR_SET_POLICER, meter_asic_db_key2),
1121+
(self._p4rt_acl_rule_obj.SAI_ATTR_COUNTER, counter_asic_db_key2),
1122+
(self._p4rt_acl_rule_obj.SAI_ATTR_ADMIN_STATE, "true"),
1123+
(self._p4rt_acl_rule_obj.SAI_ATTR_PRIORITY, "100"),
1124+
]
1125+
util.verify_attr(fvs, attr_list)
1126+
1127+
10241128
# remove ACL rule 3
10251129
self._p4rt_acl_rule_obj.remove_app_db_entry(table_name_with_rule_key3)
10261130
util.verify_response(

0 commit comments

Comments
 (0)