Skip to content

Commit 7ecc849

Browse files
daallabdosi
authored andcommitted
[aclorch] Use IPv6 Next Header internally for protocol number on MLNX platform (sonic-net#1343)
* [aclorch] Use IPv6 Next Header internally for protocol number on MLNX platform Signed-off-by: Danny Allen <[email protected]>
1 parent a153622 commit 7ecc849

File tree

3 files changed

+32
-5
lines changed

3 files changed

+32
-5
lines changed

orchagent/aclorch.cpp

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ acl_rule_attr_lookup_t aclMatchLookup =
4444
{ MATCH_L4_DST_PORT, SAI_ACL_ENTRY_ATTR_FIELD_L4_DST_PORT },
4545
{ MATCH_ETHER_TYPE, SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE },
4646
{ MATCH_IP_PROTOCOL, SAI_ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL },
47+
{ MATCH_NEXT_HEADER, SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER },
4748
{ MATCH_TCP_FLAGS, SAI_ACL_ENTRY_ATTR_FIELD_TCP_FLAGS },
4849
{ MATCH_IP_TYPE, SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE },
4950
{ MATCH_DSCP, SAI_ACL_ENTRY_ATTR_FIELD_DSCP },
@@ -301,7 +302,7 @@ bool AclRule::validateAddMatch(string attr_name, string attr_value)
301302
value.aclfield.mask.u8 = 0x3F;
302303
}
303304
}
304-
else if (attr_name == MATCH_IP_PROTOCOL)
305+
else if (attr_name == MATCH_IP_PROTOCOL || attr_name == MATCH_NEXT_HEADER)
305306
{
306307
value.aclfield.data.u8 = to_uint<uint8_t>(attr_value);
307308
value.aclfield.mask.u8 = 0xFF;
@@ -385,6 +386,17 @@ bool AclRule::validateAddMatch(string attr_name, string attr_value)
385386
return false;
386387
}
387388

389+
// NOTE: Temporary workaround to support matching protocol numbers on MLNX platform.
390+
// In a later SAI version we will transition to using NEXT_HEADER for IPv6 on all platforms.
391+
auto platform_env_var = getenv("platform");
392+
string platform = platform_env_var ? platform_env_var: "";
393+
if ((m_tableType == ACL_TABLE_MIRRORV6 || m_tableType == ACL_TABLE_L3V6)
394+
&& platform == MLNX_PLATFORM_SUBSTRING
395+
&& attr_name == MATCH_IP_PROTOCOL)
396+
{
397+
attr_name = MATCH_NEXT_HEADER;
398+
}
399+
388400
m_matches[aclMatchLookup[attr_name]] = value;
389401

390402
return true;
@@ -1324,9 +1336,23 @@ bool AclTable::create()
13241336
attr.value.booldata = true;
13251337
table_attrs.push_back(attr);
13261338

1327-
attr.id = SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL;
1328-
attr.value.booldata = true;
1329-
table_attrs.push_back(attr);
1339+
// NOTE: Temporary workaround to support matching protocol numbers on MLNX platform.
1340+
// In a later SAI version we will transition to using NEXT_HEADER for IPv6 on all platforms.
1341+
auto platform_env_var = getenv("platform");
1342+
string platform = platform_env_var ? platform_env_var: "";
1343+
if ((type == ACL_TABLE_MIRRORV6 || type == ACL_TABLE_L3V6)
1344+
&& platform == MLNX_PLATFORM_SUBSTRING)
1345+
{
1346+
attr.id = SAI_ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER;
1347+
attr.value.booldata = true;
1348+
table_attrs.push_back(attr);
1349+
}
1350+
else
1351+
{
1352+
attr.id = SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL;
1353+
attr.value.booldata = true;
1354+
table_attrs.push_back(attr);
1355+
}
13301356

13311357
/*
13321358
* Type of Tables and Supported Match Types (ASIC database)

orchagent/aclorch.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#define MATCH_L4_DST_PORT "L4_DST_PORT"
4646
#define MATCH_ETHER_TYPE "ETHER_TYPE"
4747
#define MATCH_IP_PROTOCOL "IP_PROTOCOL"
48+
#define MATCH_NEXT_HEADER "NEXT_HEADER"
4849
#define MATCH_TCP_FLAGS "TCP_FLAGS"
4950
#define MATCH_IP_TYPE "IP_TYPE"
5051
#define MATCH_DSCP "DSCP"

tests/test_mirror_ipv6_separate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def test_MirrorV6TableCreation(self, dvs, testlog):
231231
# dscp mirror tables.
232232
expected_sai_attributes = [
233233
"SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE",
234-
"SAI_ACL_TABLE_ATTR_FIELD_IP_PROTOCOL",
234+
"SAI_ACL_TABLE_ATTR_FIELD_IPV6_NEXT_HEADER", # NOTE: We use the MLNX2700 VS implementation for this test suite.
235235
"SAI_ACL_TABLE_ATTR_FIELD_SRC_IPV6",
236236
"SAI_ACL_TABLE_ATTR_FIELD_DST_IPV6",
237237
"SAI_ACL_TABLE_ATTR_FIELD_ICMPV6_TYPE",

0 commit comments

Comments
 (0)