sai_status_t VirtualSwitchSaiInterface::objectTypeGetAvailability()

in vslib/VirtualSwitchSaiInterface.cpp [826:883]


sai_status_t VirtualSwitchSaiInterface::objectTypeGetAvailability(
        _In_ sai_object_id_t switchId,
        _In_ sai_object_type_t objectType,
        _In_ uint32_t attrCount,
        _In_ const sai_attribute_t *attrList,
        _Out_ uint64_t *count)
{
    SWSS_LOG_ENTER();

    // TODO: We should generate this metadata for the virtual switch rather
    // than hard-coding it here.

    if (objectType == SAI_OBJECT_TYPE_DEBUG_COUNTER)
    {
        *count = 3;
        return SAI_STATUS_SUCCESS;
    }
    // MPLS Inseg and MPLS NH CRM use sai_object_type_get_availability() API.
    else if ((objectType == SAI_OBJECT_TYPE_INSEG_ENTRY) ||
             ((objectType == SAI_OBJECT_TYPE_NEXT_HOP) &&
              (attrCount == 1) && attrList &&
              (attrList[0].id == SAI_NEXT_HOP_ATTR_TYPE) &&
              (attrList[0].value.s32 == SAI_NEXT_HOP_TYPE_MPLS)))
    {
        std::string cmd_str("sysctl net.mpls.platform_labels");
        std::string ret_str;
        *count = 1000;
        if (!swss::exec(cmd_str, ret_str))
        {
            std::string match("net.mpls.platform_labels = ");
            if (ret_str.find(match) != std::string::npos)
            {
                *count = std::stoul(ret_str.substr(match.length()).c_str());
            }
        }
        return SAI_STATUS_SUCCESS;
    }
    else if (objectType == SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MAP)
    {
        *count = 512;
        return SAI_STATUS_SUCCESS;
    }
    else if ((objectType == (sai_object_type_t)SAI_OBJECT_TYPE_VNET) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_ENI) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_DASH_ACL_GROUP) ||
             (objectType == (sai_object_type_t)SAI_OBJECT_TYPE_DASH_ACL_RULE))
    {
        *count = 100000;
        return SAI_STATUS_SUCCESS;
    }

    return SAI_STATUS_NOT_SUPPORTED;
}