diff --git a/meta/sai_meta.cpp b/meta/sai_meta.cpp index aaf281ba03be..9ad05543151a 100644 --- a/meta/sai_meta.cpp +++ b/meta/sai_meta.cpp @@ -3466,6 +3466,10 @@ void meta_generic_validation_post_get( meta_generic_validation_post_get_objlist(meta_key, md, switch_id, value.aclaction.parameter.objlist.count, value.aclaction.parameter.objlist.list); break; + case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY: + VALIDATION_LIST_GET(md, value.aclcapability.action_list); + break; + // ACL END case SAI_ATTR_VALUE_TYPE_UINT8_LIST: diff --git a/meta/saiserialize.cpp b/meta/saiserialize.cpp index 881452a270c4..bd7da0e78d68 100644 --- a/meta/saiserialize.cpp +++ b/meta/saiserialize.cpp @@ -391,6 +391,11 @@ sai_status_t transfer_attribute( RETURN_ON_ERROR(transfer_list(src_attr.value.aclaction.parameter.objlist, dst_attr.value.aclaction.parameter.objlist, countOnly)); break; + case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY: + transfer_primitive(src_attr.value.aclcapability.is_action_list_mandatory, dst_attr.value.aclcapability.is_action_list_mandatory); + RETURN_ON_ERROR(transfer_list(src_attr.value.aclcapability.action_list, dst_attr.value.aclcapability.action_list, countOnly)); + break; + default: return SAI_STATUS_NOT_IMPLEMENTED; } @@ -2343,6 +2348,26 @@ void sai_deserialize_acl_action( } } +void sai_deserialize_acl_capability( + _In_ const std::string& s, + _Out_ sai_acl_capability_t& cap) +{ + SWSS_LOG_ENTER(); + + auto pos = s.find(":"); + + if (pos == std::string::npos) + { + SWSS_LOG_THROW("Invalid acl capability %s", s); + } + + auto mandatory_on_create_str = s.substr(0, pos); + auto list = s.substr(pos + 1); + + sai_deserialize_bool(mandatory_on_create_str, cap.is_action_list_mandatory); + sai_deserialize_enum_list(list, &sai_metadata_enum_sai_acl_action_type_t, cap.action_list, false); +} + void sai_deserialize_attr_value( _In_ const std::string& s, _In_ const sai_attr_metadata_t& meta, @@ -2478,6 +2503,9 @@ void sai_deserialize_attr_value( case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_LIST: return sai_deserialize_acl_action(s, meta, attr.value.aclaction, countOnly); + case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY: + return sai_deserialize_acl_capability(s, attr.value.aclcapability); + default: SWSS_LOG_THROW("deserialize type %d is not supportd yet FIXME", meta.attrvaluetype); } @@ -2898,6 +2926,10 @@ void sai_deserialize_free_attribute_value( sai_free_list(attr.value.aclaction.parameter.objlist); break; + case SAI_ATTR_VALUE_TYPE_ACL_CAPABILITY: + sai_free_list(attr.value.aclcapability.action_list); + break; + default: SWSS_LOG_THROW("unsupported type %d on deserialize free, FIXME", type); }