in meta/saisanitycheck.c [4941:5025]
void check_object_ro_list(
_In_ const sai_object_type_info_t *oi)
{
META_LOG_ENTER();
/*
* Purpose is to check if object is referenced in any other object as read
* only attribute to know that we can get all objects of this type.
* Example: VLAN and VLAN_MEMBER. All vlan members are listed on attribute:
* SAI_VLAN_ATTR_MEMBER_LIST.
*
* Should we only check that for leaf objects?
*/
if (oi->isnonobjectid)
{
return;
}
if (oi->objecttype == SAI_OBJECT_TYPE_FDB_FLUSH ||
oi->objecttype == SAI_OBJECT_TYPE_HOSTIF_PACKET ||
oi->objecttype == SAI_OBJECT_TYPE_SWITCH ||
oi->objecttype == SAI_OBJECT_TYPE_BFD_SESSION ||
oi->objecttype == SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY ||
oi->objecttype == SAI_OBJECT_TYPE_DTEL ||
oi->objecttype == SAI_OBJECT_TYPE_DTEL_QUEUE_REPORT ||
oi->objecttype == SAI_OBJECT_TYPE_DTEL_EVENT ||
oi->objecttype == SAI_OBJECT_TYPE_GENERIC_PROGRAMMABLE ||
oi->objecttype == SAI_OBJECT_TYPE_TWAMP_SESSION ||
oi->objecttype == SAI_OBJECT_TYPE_ICMP_ECHO_SESSION)
{
/*
* We skip hostif table entry since there is no 1 object which can
* identify all table entries. We would need to add one attribute for
* each used object type port, lag, vlan etc.
*/
return;
}
size_t idx = 0;
for (; idx < sai_metadata_attr_sorted_by_id_name_count; ++idx)
{
const sai_attr_metadata_t *meta = sai_metadata_attr_sorted_by_id_name[idx];
if (sai_metadata_is_allowed_object_type(meta, oi->objecttype))
{
if (oi->revgraphmembers != 0)
{
/* this object is not leaf, so it must be used as attribute */
return;
}
}
if (meta->attrvaluetype != SAI_ATTR_VALUE_TYPE_OBJECT_LIST)
{
continue;
}
if (!meta->isreadonly)
{
continue;
}
if (sai_metadata_is_allowed_object_type(meta, oi->objecttype))
{
return;
}
}
if (oi->isexperimental)
{
META_LOG_DEBUG("experimental object %s not present on any object list (eg. VLAN_MEMBER is present on SAI_VLAN_ATTR_MEMBER_LIST)", oi->objecttypename);
return;
}
if (SAI_OBJECT_TYPE_DEBUG_COUNTER == oi->objecttype)
{
META_LOG_WARN("debug counter object %s not present on any object list (eg. VLAN_MEMBER is present on SAI_VLAN_ATTR_MEMBER_LIST)", oi->objecttypename);
return;
}
META_ASSERT_FAIL("%s not present on any object list (eg. VLAN_MEMBER is present on SAI_VLAN_ATTR_MEMBER_LIST)", oi->objecttypename);
}