Skip to content

Commit a2a483d

Browse files
[acl] Add new ACL key BTH_OPCODE and AETH_SYNDROME (sonic-net#2617)
- What I did Add new ACL key BTH_OPCODE and AETH_SYNDROME - Why I did it Add new ACL key BTH_OPCODE and AETH_SYNDROME - How I verified it Manual test
1 parent 9d1f66b commit a2a483d

File tree

3 files changed

+77
-3
lines changed

3 files changed

+77
-3
lines changed

orchagent/aclorch.cpp

+34-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ acl_rule_attr_lookup_t aclMatchLookup =
6969
{ MATCH_INNER_ETHER_TYPE, SAI_ACL_ENTRY_ATTR_FIELD_INNER_ETHER_TYPE },
7070
{ MATCH_INNER_IP_PROTOCOL, SAI_ACL_ENTRY_ATTR_FIELD_INNER_IP_PROTOCOL },
7171
{ MATCH_INNER_L4_SRC_PORT, SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_SRC_PORT },
72-
{ MATCH_INNER_L4_DST_PORT, SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT }
72+
{ MATCH_INNER_L4_DST_PORT, SAI_ACL_ENTRY_ATTR_FIELD_INNER_L4_DST_PORT },
73+
{ MATCH_BTH_OPCODE, SAI_ACL_ENTRY_ATTR_FIELD_BTH_OPCODE},
74+
{ MATCH_AETH_SYNDROME, SAI_ACL_ENTRY_ATTR_FIELD_AETH_SYNDROME}
7375
};
7476

7577
static acl_range_type_lookup_t aclRangeTypeLookup =
@@ -970,6 +972,36 @@ bool AclRule::validateAddMatch(string attr_name, string attr_value)
970972
matchData.data.u8 = to_uint<uint8_t>(attr_value);
971973
matchData.mask.u8 = 0xFF;
972974
}
975+
else if (attr_name == MATCH_BTH_OPCODE)
976+
{
977+
auto opcode_data = tokenize(attr_value, '/');
978+
979+
if (opcode_data.size() == 2)
980+
{
981+
matchData.data.u8 = to_uint<uint8_t>(opcode_data[0]);
982+
matchData.mask.u8 = to_uint<uint8_t>(opcode_data[1]);
983+
}
984+
else
985+
{
986+
SWSS_LOG_ERROR("Invalid BTH_OPCODE configuration: %s, expected format <data>/<mask>", attr_value.c_str());
987+
return false;
988+
}
989+
}
990+
else if (attr_name == MATCH_AETH_SYNDROME)
991+
{
992+
auto syndrome_data = tokenize(attr_value, '/');
993+
994+
if (syndrome_data.size() == 2)
995+
{
996+
matchData.data.u8 = to_uint<uint8_t>(syndrome_data[0]);
997+
matchData.mask.u8 = to_uint<uint8_t>(syndrome_data[1]);
998+
}
999+
else
1000+
{
1001+
SWSS_LOG_ERROR("Invalid AETH_SYNDROME configuration: %s, expected format <data>/<mask>", attr_value.c_str());
1002+
return false;
1003+
}
1004+
}
9731005
}
9741006
catch (exception &e)
9751007
{
@@ -3796,7 +3828,7 @@ bool AclOrch::addAclTable(AclTable &newTable)
37963828
}
37973829
// Update matching field according to ACL stage
37983830
newTable.addStageMandatoryMatchFields();
3799-
3831+
38003832
// Add mandatory ACL action if not present
38013833
// We need to call addMandatoryActions here because addAclTable is directly called in other orchs.
38023834
// The action_list is already added if the ACL table creation is triggered by CONFIGDD, but calling addMandatoryActions

orchagent/aclorch.h

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
#define MATCH_INNER_IP_PROTOCOL "INNER_IP_PROTOCOL"
5050
#define MATCH_INNER_L4_SRC_PORT "INNER_L4_SRC_PORT"
5151
#define MATCH_INNER_L4_DST_PORT "INNER_L4_DST_PORT"
52+
#define MATCH_BTH_OPCODE "BTH_OPCODE"
53+
#define MATCH_AETH_SYNDROME "AETH_SYNDROME"
5254

5355
#define BIND_POINT_TYPE_PORT "PORT"
5456
#define BIND_POINT_TYPE_PORTCHANNEL "PORTCHANNEL"

tests/mock_tests/aclorch_ut.cpp

+41-1
Original file line numberDiff line numberDiff line change
@@ -1409,7 +1409,7 @@ namespace aclorch_test
14091409
{
14101410
{
14111411
ACL_TABLE_TYPE_MATCHES,
1412-
string(MATCH_SRC_IP) + comma + MATCH_ETHER_TYPE + comma + MATCH_L4_SRC_PORT_RANGE
1412+
string(MATCH_SRC_IP) + comma + MATCH_ETHER_TYPE + comma + MATCH_L4_SRC_PORT_RANGE + comma + MATCH_BTH_OPCODE + comma + MATCH_AETH_SYNDROME
14131413
},
14141414
{
14151415
ACL_TABLE_TYPE_BPOINT_TYPES,
@@ -1431,6 +1431,8 @@ namespace aclorch_test
14311431
{ "SAI_ACL_TABLE_ATTR_FIELD_SRC_IP", "true" },
14321432
{ "SAI_ACL_TABLE_ATTR_FIELD_ETHER_TYPE", "true" },
14331433
{ "SAI_ACL_TABLE_ATTR_FIELD_ACL_RANGE_TYPE", "1:SAI_ACL_RANGE_TYPE_L4_SRC_PORT_RANGE" },
1434+
{ "SAI_ACL_TABLE_ATTR_FIELD_BTH_OPCODE", "true" },
1435+
{ "SAI_ACL_TABLE_ATTR_FIELD_AETH_SYNDROME", "true" },
14341436
};
14351437

14361438
ASSERT_TRUE(validateAclTable(
@@ -1477,6 +1479,42 @@ namespace aclorch_test
14771479
// DST_IP is not in the table type
14781480
ASSERT_FALSE(orch->getAclRule(aclTableName, aclRuleName));
14791481

1482+
orch->doAclRuleTask(
1483+
deque<KeyOpFieldsValuesTuple>(
1484+
{
1485+
{
1486+
aclTableName + "|" + aclRuleName,
1487+
SET_COMMAND,
1488+
{
1489+
{ ACTION_PACKET_ACTION, PACKET_ACTION_DROP },
1490+
{ MATCH_BTH_OPCODE, "0x60" },
1491+
}
1492+
}
1493+
}
1494+
)
1495+
);
1496+
1497+
// MATCH_BTH_OPCODE invalid format
1498+
ASSERT_FALSE(orch->getAclRule(aclTableName, aclRuleName));
1499+
1500+
orch->doAclRuleTask(
1501+
deque<KeyOpFieldsValuesTuple>(
1502+
{
1503+
{
1504+
aclTableName + "|" + aclRuleName,
1505+
SET_COMMAND,
1506+
{
1507+
{ ACTION_PACKET_ACTION, PACKET_ACTION_DROP },
1508+
{ MATCH_AETH_SYNDROME, "0x60" },
1509+
}
1510+
}
1511+
}
1512+
)
1513+
);
1514+
1515+
// MATCH_AETH_SYNDROME invalid format
1516+
ASSERT_FALSE(orch->getAclRule(aclTableName, aclRuleName));
1517+
14801518
orch->doAclRuleTask(
14811519
deque<KeyOpFieldsValuesTuple>(
14821520
{
@@ -1486,6 +1524,8 @@ namespace aclorch_test
14861524
{
14871525
{ MATCH_SRC_IP, "1.1.1.1/32" },
14881526
{ ACTION_PACKET_ACTION, PACKET_ACTION_DROP },
1527+
{ MATCH_BTH_OPCODE, "0x60/0xff" },
1528+
{ MATCH_AETH_SYNDROME, "0x60/0x60" },
14891529
}
14901530
}
14911531
}

0 commit comments

Comments
 (0)