in meta/saisanitycheck.c [2005:2165]
void check_attr_acl_fields(
_In_ const sai_attr_metadata_t* md)
{
META_LOG_ENTER();
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT8:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT16:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV4:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV6:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_ID:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
if (md->objecttype == SAI_OBJECT_TYPE_ACL_ENTRY &&
md->attrid >= SAI_ACL_ENTRY_ATTR_FIELD_START &&
md->attrid <= SAI_ACL_ENTRY_ATTR_FIELD_END)
{
break;
}
if (md->objecttype == SAI_OBJECT_TYPE_ACL_TABLE &&
md->attrid >= SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_START &&
md->attrid <= SAI_ACL_TABLE_ATTR_FIELD_VALID_BITS_END)
{
break;
}
if (md->objecttype == SAI_OBJECT_TYPE_UDF_MATCH)
{
/*
* This is special case, object for UDF MATCH can use acl field
* attribute values since it's easier to maintain since this
* match also need a mask parameter. But restriction is that
* only primitive types can be used, no object id;
*/
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT8:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT16:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
break;
default:
META_MD_ASSERT_FAIL(md, "acl field data used on udf match can be only primitive type");
}
break;
}
if (md->objecttype == SAI_OBJECT_TYPE_DTEL &&
md->attrid == SAI_DTEL_ATTR_INT_L4_DSCP &&
md->attrvaluetype == SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8)
{
break;
}
META_MD_ASSERT_FAIL(md, "acl field may only be set on acl field and udf match");
break;
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT8:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT8:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT16:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT16:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT32:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT32:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_MAC:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV4:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV6:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IP_ADDRESS:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_ID:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_LIST:
if (md->objecttype == SAI_OBJECT_TYPE_ACL_ENTRY && md->isextensionattr)
{
break;
}
if (md->objecttype != SAI_OBJECT_TYPE_ACL_ENTRY ||
md->attrid < SAI_ACL_ENTRY_ATTR_ACTION_START ||
md->attrid > SAI_ACL_ENTRY_ATTR_ACTION_END)
{
META_MD_ASSERT_FAIL(md, "acl action may only be set on acl action");
}
break;
default:
break;
}
if (md->objecttype == SAI_OBJECT_TYPE_ACL_ENTRY)
{
if (md->attrid >= SAI_ACL_ENTRY_ATTR_FIELD_START &&
md->attrid <= SAI_ACL_ENTRY_ATTR_FIELD_END)
{
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT8:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT16:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT16:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_INT32:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT32:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT64:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_MAC:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV4:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_IPV6:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_ID:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_LIST:
case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_UINT8_LIST:
break;
default:
META_MD_ASSERT_FAIL(md, "invalid attr value type for acl field");
}
}
if (md->attrid >= SAI_ACL_ENTRY_ATTR_ACTION_START &&
md->attrid <= SAI_ACL_ENTRY_ATTR_ACTION_END)
{
switch (md->attrvaluetype)
{
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_BOOL:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT8:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT8:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT16:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT16:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_INT32:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_UINT32:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_MAC:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV4:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IPV6:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_IP_ADDRESS:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_ID:
case SAI_ATTR_VALUE_TYPE_ACL_ACTION_DATA_OBJECT_LIST:
break;
default:
META_MD_ASSERT_FAIL(md, "invalid attr value type for acl action");
}
}
}
}