void check_attr_key()

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");
        }
    }
}