@@ -44,6 +44,7 @@ acl_rule_attr_lookup_t aclMatchLookup =
44
44
{ MATCH_L4_DST_PORT, SAI_ACL_ENTRY_ATTR_FIELD_L4_DST_PORT },
45
45
{ MATCH_ETHER_TYPE, SAI_ACL_ENTRY_ATTR_FIELD_ETHER_TYPE },
46
46
{ MATCH_IP_PROTOCOL, SAI_ACL_ENTRY_ATTR_FIELD_IP_PROTOCOL },
47
+ { MATCH_NEXT_HEADER, SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER },
47
48
{ MATCH_TCP_FLAGS, SAI_ACL_ENTRY_ATTR_FIELD_TCP_FLAGS },
48
49
{ MATCH_IP_TYPE, SAI_ACL_ENTRY_ATTR_FIELD_ACL_IP_TYPE },
49
50
{ MATCH_DSCP, SAI_ACL_ENTRY_ATTR_FIELD_DSCP },
@@ -301,7 +302,7 @@ bool AclRule::validateAddMatch(string attr_name, string attr_value)
301
302
value.aclfield .mask .u8 = 0x3F ;
302
303
}
303
304
}
304
- else if (attr_name == MATCH_IP_PROTOCOL)
305
+ else if (attr_name == MATCH_IP_PROTOCOL || attr_name == MATCH_NEXT_HEADER )
305
306
{
306
307
value.aclfield .data .u8 = to_uint<uint8_t >(attr_value);
307
308
value.aclfield .mask .u8 = 0xFF ;
@@ -385,6 +386,17 @@ bool AclRule::validateAddMatch(string attr_name, string attr_value)
385
386
return false ;
386
387
}
387
388
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
+
388
400
m_matches[aclMatchLookup[attr_name]] = value;
389
401
390
402
return true ;
@@ -1324,9 +1336,23 @@ bool AclTable::create()
1324
1336
attr.value .booldata = true ;
1325
1337
table_attrs.push_back (attr);
1326
1338
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
+ }
1330
1356
1331
1357
/*
1332
1358
* Type of Tables and Supported Match Types (ASIC database)
0 commit comments