in meta/saisanitycheck.c [1822:1928]
void check_attr_allow_flags(
_In_ const sai_attr_metadata_t* md)
{
META_LOG_ENTER();
if (md->allownullobjectid)
{
switch (md->attrvaluetype)
{
/* there may be other types in acl field/data that accept object id */
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_ID:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_ID:
case SAI_ATTR_VALUE_TYPE_OBJECT_ID:
break;
default:
META_MD_ASSERT_FAIL(md, "allow null object is set but attr value type is wrong");
}
/*
* Object SAI_ATTR_VALUE_TYPE_POINTER should be allowed null pointer by
* default pointers received from SAI should be only via query api.
*/
if (md->allowedobjecttypeslength == 0)
{
META_MD_ASSERT_FAIL(md, "allow null object is set but allowed object types is empty");
}
}
if (md->allowedobjecttypeslength != 0)
{
META_ASSERT_NOT_NULL(md->allowedobjecttypes);
}
size_t index = 0;
for (; index < md->allowedobjecttypeslength; ++index)
{
sai_object_type_t ot = md->allowedobjecttypes[index];
if (is_valid_object_type(ot))
{
continue;
}
META_MD_ASSERT_FAIL(md, "not allowed object type %d on list", ot);
}
/* allow empty list can point to any list, not only object id list */
if (md->allowemptylist)
{
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_LIST:
case SAI_ATTR_VALUE_TYPE_OBJECT_LIST:
break;
case SAI_ATTR_VALUE_TYPE_INT8_LIST:
case SAI_ATTR_VALUE_TYPE_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_UINT16_LIST:
case SAI_ATTR_VALUE_TYPE_INT32_LIST:
case SAI_ATTR_VALUE_TYPE_VLAN_LIST:
case SAI_ATTR_VALUE_TYPE_UINT32_LIST:
case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_RESOURCE_LIST:
case SAI_ATTR_VALUE_TYPE_TLV_LIST:
case SAI_ATTR_VALUE_TYPE_SEGMENT_LIST:
case SAI_ATTR_VALUE_TYPE_IP_ADDRESS_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_EYE_VALUES_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_FREQUENCY_OFFSET_PPM_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_SNR_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_LANE_LATCH_STATUS_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
case SAI_ATTR_VALUE_TYPE_SYSTEM_PORT_CONFIG_LIST:
case SAI_ATTR_VALUE_TYPE_PORT_ERR_STATUS_LIST:
case SAI_ATTR_VALUE_TYPE_IP_PREFIX_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_CHAIN_LIST:
break;
default:
META_MD_ASSERT_FAIL(md, "allow empty list is set but attr value type is not list");
}
}
if (md->allowrepetitiononlist || md->allowmixedobjecttypes)
{
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_LIST:
case SAI_ATTR_VALUE_TYPE_OBJECT_LIST:
break;
default:
META_MD_ASSERT_FAIL(md, "allow null object is set but attr value type is wrong");
}
}
}