in meta/saisanitycheck.c [1949:2003]
void check_attr_key(
_In_ const sai_attr_metadata_t* md)
{
META_LOG_ENTER();
if (SAI_HAS_FLAG_KEY(md->flags))
{
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_UINT32_LIST:
if (md->objecttype == SAI_OBJECT_TYPE_PORT && md->attrid == SAI_PORT_ATTR_HW_LANE_LIST)
{
/*
* This is special case when HW_LANE_LIST is actual KEY for
* port, and it's more complicated because order don't
* matter and same lane can't be used on different port if
* some ports are splitted.
*/
break;
}
META_MD_ASSERT_FAIL(md, "marked as key, but have invalid attr value type (list)");
case SAI_ATTR_VALUE_TYPE_OBJECT_ID:
if ((md->objecttype == SAI_OBJECT_TYPE_QUEUE && md->attrid == SAI_QUEUE_ATTR_PORT) ||
(md->objecttype == SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP && md->attrid == SAI_INGRESS_PRIORITY_GROUP_ATTR_PORT) ||
(md->objecttype == SAI_OBJECT_TYPE_PORT_CONNECTOR && md->attrid == SAI_PORT_CONNECTOR_ATTR_SYSTEM_SIDE_PORT_ID) ||
(md->objecttype == SAI_OBJECT_TYPE_PORT_CONNECTOR && md->attrid == SAI_PORT_CONNECTOR_ATTR_LINE_SIDE_PORT_ID))
{
/*
* This is also special case, OBJECT_ID at should not be a
* KEY in any attribute, this is TODO action to get rid of
* this kind of dependency.
*/
break;
}
META_MD_ASSERT_FAIL(md, "marked as key, but have invalid attr value type (object id)");
case SAI_ATTR_VALUE_TYPE_INT32:
case SAI_ATTR_VALUE_TYPE_UINT32:
case SAI_ATTR_VALUE_TYPE_UINT8:
case SAI_ATTR_VALUE_TYPE_UINT16:
break;
default:
META_MD_ASSERT_FAIL(md, "marked as key, but have invalid attr value type");
}
}
}