in meta/saisanitycheck.c [1143:1217]
void check_attr_enums(
_In_ const sai_attr_metadata_t* md)
{
META_LOG_ENTER();
if (md->isenum)
{
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_INT32:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT32:
break;
default:
META_MD_ASSERT_FAIL(md, "attribute is marked as enum, but attr value type is not enum compatible");
}
}
if (md->isenum && md->isenumlist)
{
META_MD_ASSERT_FAIL(md, "attribute can't be marked as enum and enum list");
}
if ((md->isenum || md->isenumlist) && md->enummetadata == NULL)
{
META_MD_ASSERT_FAIL(md, "is marked enum but missing enum metadata");
}
if (!(md->isenum || md->isenumlist) && md->enummetadata != NULL)
{
META_MD_ASSERT_FAIL(md, "is not marked enum but has defined enum type string");
}
if ((md->isenum || md->isenumlist) && md->enummetadata->valuescount == 0)
{
META_MD_ASSERT_FAIL(md, "is marked enum but missing enum allowed values");
}
bool requiredefault = (!SAI_HAS_FLAG_MANDATORY_ON_CREATE(md->flags)) &&
(SAI_HAS_FLAG_CREATE_ONLY(md->flags) || SAI_HAS_FLAG_CREATE_AND_SET(md->flags));
if (requiredefault && md->isenum)
{
if (md->defaultvalue == NULL)
{
META_MD_ASSERT_FAIL(md, "marked as enum, and require default, but not provided");
}
if (sai_metadata_is_acl_field_or_action(md))
{
/*
* Default value for acl action is disabled, so enum value can't be
* compared since it's not there.
*/
return;
}
int32_t enumdefault = md->defaultvalue->s32;
if (sai_metadata_get_enum_value_name(md->enummetadata, enumdefault) == NULL)
{
META_MD_ASSERT_FAIL(md, "default enum value %d is not present on enum allowed values (%s)", enumdefault, md->enummetadata->name);
}
}
if (requiredefault && md->isenumlist)
{
if (md->defaultvalue != NULL)
{
META_MD_ASSERT_FAIL(md, "default values on enum list are not supported yet");
}
}
}