Skip to content

Commit 9d4a3ad

Browse files
authored
[acl] Add IN_PORTS qualifier for L3 table (sonic-net#3078)
* Apply IN_PORTS qualifiier for L3 table Why I did it IN_PORTS qualifier was allowed for L3 table in 202012 release and below. Changes in sonic-net#1982 removed that support leading to regression in some of our testcases. The following error was observed ERR swss#orchagent: :- validateAclRuleMatch: Match SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS in rule RULE_1 is not supported by table DATAACL
1 parent a13e081 commit 9d4a3ad

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

orchagent/aclorch.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -3223,6 +3223,7 @@ void AclOrch::initDefaultTableTypes()
32233223
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_L4_SRC_PORT))
32243224
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_L4_DST_PORT))
32253225
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_TCP_FLAGS))
3226+
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_IN_PORTS))
32263227
.build()
32273228
);
32283229

@@ -3240,6 +3241,7 @@ void AclOrch::initDefaultTableTypes()
32403241
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_L4_SRC_PORT))
32413242
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_L4_DST_PORT))
32423243
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_TCP_FLAGS))
3244+
.withMatch(make_shared<AclTableMatch>(SAI_ACL_TABLE_ATTR_FIELD_IN_PORTS))
32433245
.build()
32443246
);
32453247

tests/test_acl.py

+42
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,29 @@ def test_AclRuleInPorts(self, dvs_acl, mirror_acl_table):
243243
dvs_acl.verify_acl_rule_status(MIRROR_TABLE_NAME, MIRROR_RULE_NAME, None)
244244
dvs_acl.verify_no_acl_rules()
245245

246+
def test_AclRuleInPortsL3(self, dvs_acl, l3_acl_table):
247+
"""
248+
Verify IN_PORTS matches on ACL rule.
249+
Using L3 table type for IN_PORTS matches.
250+
"""
251+
config_qualifiers = {
252+
"IN_PORTS": "Ethernet8,Ethernet12",
253+
}
254+
255+
expected_sai_qualifiers = {
256+
"SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS": dvs_acl.get_port_list_comparator(["Ethernet8", "Ethernet12"])
257+
}
258+
259+
dvs_acl.create_acl_rule(L3_TABLE_NAME, L3_RULE_NAME, config_qualifiers)
260+
# Verify status is written into STATE_DB
261+
dvs_acl.verify_acl_rule_status(L3_TABLE_NAME, L3_RULE_NAME, "Active")
262+
dvs_acl.verify_acl_rule(expected_sai_qualifiers)
263+
264+
dvs_acl.remove_acl_rule(L3_TABLE_NAME, L3_RULE_NAME)
265+
# Verify the STATE_DB entry is removed
266+
dvs_acl.verify_acl_rule_status(L3_TABLE_NAME, L3_RULE_NAME, None)
267+
dvs_acl.verify_no_acl_rules()
268+
246269
def test_AclRuleOutPorts(self, dvs_acl, mclag_acl_table):
247270
"""
248271
Verify OUT_PORTS matches on ACL rule.
@@ -546,6 +569,25 @@ def test_V6AclRuleVlanId(self, dvs_acl, l3v6_acl_table):
546569
dvs_acl.verify_acl_rule_status(L3V6_TABLE_NAME, L3V6_RULE_NAME, None)
547570
dvs_acl.verify_no_acl_rules()
548571

572+
def test_v6AclRuleInPorts(self, dvs_acl, l3v6_acl_table):
573+
config_qualifiers = {
574+
"IN_PORTS": "Ethernet8,Ethernet12",
575+
}
576+
577+
expected_sai_qualifiers = {
578+
"SAI_ACL_ENTRY_ATTR_FIELD_IN_PORTS": dvs_acl.get_port_list_comparator(["Ethernet8", "Ethernet12"])
579+
}
580+
581+
dvs_acl.create_acl_rule(L3V6_TABLE_NAME, L3V6_RULE_NAME, config_qualifiers)
582+
dvs_acl.verify_acl_rule(expected_sai_qualifiers)
583+
# Verify status is written into STATE_DB
584+
dvs_acl.verify_acl_rule_status(L3V6_TABLE_NAME, L3V6_RULE_NAME, "Active")
585+
586+
dvs_acl.remove_acl_rule(L3V6_TABLE_NAME, L3V6_RULE_NAME)
587+
# Verify the STATE_DB entry is removed
588+
dvs_acl.verify_acl_rule_status(L3V6_TABLE_NAME, L3V6_RULE_NAME, None)
589+
dvs_acl.verify_no_acl_rules()
590+
549591
def test_InsertAclRuleBetweenPriorities(self, dvs_acl, l3_acl_table):
550592
rule_priorities = ["10", "20", "30", "40"]
551593

0 commit comments

Comments
 (0)