@@ -298,6 +298,12 @@ sai_status_t transfer_attribute(
298298 transfer_primitive (src_attr.value .aclfield .data .s32 , dst_attr.value .aclfield .data .s32 );
299299 break ;
300300
301+ case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
302+ transfer_primitive (src_attr.value .aclfield .enable , dst_attr.value .aclfield .enable );
303+ transfer_primitive (src_attr.value .aclfield .mask .u64 , dst_attr.value .aclfield .mask .u64 );
304+ transfer_primitive (src_attr.value .aclfield .data .u64 , dst_attr.value .aclfield .data .u64 );
305+ break ;
306+
301307 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
302308 transfer_primitive (src_attr.value .aclfield .enable , dst_attr.value .aclfield .enable );
303309 transfer_primitive (src_attr.value .aclfield .mask .mac , dst_attr.value .aclfield .mask .mac );
@@ -1377,6 +1383,9 @@ std::string sai_serialize_acl_field(
13771383 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
13781384 return sai_serialize_enum (field.data .s32 , meta.enummetadata ) + " &mask:" + sai_serialize_number (field.mask .s32 , true );
13791385
1386+ case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
1387+ return sai_serialize_number (field.data .u64 ) + " &mask:" + sai_serialize_number (field.mask .u64 , true );
1388+
13801389 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
13811390 return sai_serialize_mac (field.data .mac ) +" &mask:" + sai_serialize_mac (field.mask .mac );
13821391
@@ -1414,6 +1423,31 @@ std::string sai_serialize_acl_capability(
14141423 return mandatory + " :" + list;
14151424}
14161425
1426+ std::string sai_serialize_hex_binary (
1427+ _In_ const void *buffer,
1428+ _In_ size_t length)
1429+ {
1430+ SWSS_LOG_ENTER ();
1431+
1432+ std::string s;
1433+
1434+ if (buffer == NULL || length == 0 )
1435+ {
1436+ return s;
1437+ }
1438+
1439+ s.resize (2 * length, ' 0' );
1440+ const unsigned char *input = static_cast <const unsigned char *>(buffer);
1441+ char *output = &s[0 ];
1442+
1443+ for (size_t i = 0 ; i < length; i++)
1444+ {
1445+ snprintf (&output[i * 2 ], 3 , " %02X" , input[i]);
1446+ }
1447+
1448+ return s;
1449+ }
1450+
14171451std::string sai_serialize_system_port_config (
14181452 _In_ const sai_attr_metadata_t &meta,
14191453 _In_ const sai_system_port_config_t &sysportconfig)
@@ -1589,6 +1623,7 @@ std::string sai_serialize_attr_value(
15891623 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
15901624 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
15911625 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
1626+ case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
15921627 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
15931628 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV4:
15941629 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV6:
@@ -1616,6 +1651,17 @@ std::string sai_serialize_attr_value(
16161651 case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY:
16171652 return sai_serialize_acl_capability (meta, attr.value .aclcapability , countOnly);
16181653
1654+ // MACsec Attributions
1655+
1656+ case SAI_ATTR_VALUE_TYPE_MACSEC_SAK:
1657+ return sai_serialize_hex_binary (attr.value .macsecsak );
1658+
1659+ case SAI_ATTR_VALUE_TYPE_MACSEC_AUTH_KEY:
1660+ return sai_serialize_hex_binary (attr.value .macsecauthkey );
1661+
1662+ case SAI_ATTR_VALUE_TYPE_MACSEC_SALT:
1663+ return sai_serialize_hex_binary (attr.value .macsecsalt );
1664+
16191665 case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
16201666 return sai_serialize_system_port_config (meta, attr.value .sysportconfig );
16211667
@@ -2547,6 +2593,11 @@ void sai_deserialize_acl_field(
25472593 sai_deserialize_number (smask, field.mask .s32 , true );
25482594 return ;
25492595
2596+ case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
2597+ sai_deserialize_number (sfield, field.data .u64 );
2598+ sai_deserialize_number (smask, field.mask .u64 , true );
2599+ return ;
2600+
25502601 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
25512602 sai_deserialize_mac (sfield, field.data .mac );
25522603 sai_deserialize_mac (smask, field.mask .mac );
@@ -2655,6 +2706,53 @@ void sai_deserialize_acl_capability(
26552706 sai_deserialize_enum_list (list, &sai_metadata_enum_sai_acl_action_type_t , cap.action_list , false );
26562707}
26572708
2709+ void sai_deserialize_hex_binary (
2710+ _In_ const std::string &s,
2711+ _Out_ void *buffer,
2712+ _In_ size_t length)
2713+ {
2714+ SWSS_LOG_ENTER ();
2715+
2716+ if (s.length () % 2 != 0 )
2717+ {
2718+ SWSS_LOG_THROW (" Invalid hex string %s" , s.c_str ());
2719+ }
2720+
2721+ if (s.length () > (length * 2 ))
2722+ {
2723+ SWSS_LOG_THROW (" Buffer length isn't sufficient." );
2724+ }
2725+
2726+ size_t buffer_cur = 0 ;
2727+ size_t hex_cur = 0 ;
2728+ unsigned char *output = static_cast <unsigned char *>(buffer);
2729+
2730+ while (hex_cur < s.length ())
2731+ {
2732+ const char temp_buffer[] = {s[hex_cur], s[hex_cur + 1 ], 0 };
2733+ unsigned int value = -1 ;
2734+
2735+ if (sscanf (temp_buffer, " %X" , &value) <= 0 || value > 0xff )
2736+ {
2737+ SWSS_LOG_THROW (" Invalid hex string %s" , temp_buffer);
2738+ }
2739+
2740+ output[buffer_cur] = static_cast <unsigned char >(value);
2741+ hex_cur += 2 ;
2742+ buffer_cur += 1 ;
2743+ }
2744+ }
2745+
2746+ template <typename T>
2747+ void sai_deserialize_hex_binary (
2748+ _In_ const std::string &s,
2749+ _Out_ T &value)
2750+ {
2751+ SWSS_LOG_ENTER ();
2752+
2753+ return sai_deserialize_hex_binary (s, &value, sizeof (T));
2754+ }
2755+
26582756void sai_deserialize_system_port_config (
26592757 _In_ const std::string& s,
26602758 _Out_ sai_system_port_config_t & sysportconfig)
@@ -2837,6 +2935,7 @@ void sai_deserialize_attr_value(
28372935 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
28382936 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
28392937 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
2938+ case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
28402939 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
28412940 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV4:
28422941 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV6:
@@ -2864,6 +2963,15 @@ void sai_deserialize_attr_value(
28642963 case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY:
28652964 return sai_deserialize_acl_capability (s, attr.value .aclcapability );
28662965
2966+ case SAI_ATTR_VALUE_TYPE_MACSEC_SAK:
2967+ return sai_deserialize_hex_binary (s, attr.value .macsecsak );
2968+
2969+ case SAI_ATTR_VALUE_TYPE_MACSEC_AUTH_KEY:
2970+ return sai_deserialize_hex_binary (s, attr.value .macsecauthkey );
2971+
2972+ case SAI_ATTR_VALUE_TYPE_MACSEC_SALT:
2973+ return sai_deserialize_hex_binary (s, attr.value .macsecsalt );
2974+
28672975 case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
28682976 return sai_deserialize_system_port_config (s, attr.value .sysportconfig );
28692977
@@ -3398,6 +3506,7 @@ void sai_deserialize_free_attribute_value(
33983506 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
33993507 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
34003508 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
3509+ case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
34013510 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
34023511 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV4:
34033512 case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV6:
@@ -3435,6 +3544,13 @@ void sai_deserialize_free_attribute_value(
34353544 sai_free_list (attr.value .aclcapability .action_list );
34363545 break ;
34373546
3547+ case SAI_ATTR_VALUE_TYPE_MACSEC_SAK:
3548+ case SAI_ATTR_VALUE_TYPE_MACSEC_AUTH_KEY:
3549+ case SAI_ATTR_VALUE_TYPE_MACSEC_SALT:
3550+ case SAI_ATTR_VALUE_TYPE_MACSEC_SCI:
3551+ case SAI_ATTR_VALUE_TYPE_MACSEC_SSCI:
3552+ break ;
3553+
34383554 case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG:
34393555 break ;
34403556
0 commit comments