sai_status_t SwitchBCM81724::refresh_read_only()

in vslib/SwitchBCM81724.cpp [241:323]


sai_status_t SwitchBCM81724::refresh_read_only(
        _In_ const sai_attr_metadata_t *meta,
        _In_ sai_object_id_t object_id)
{
    SWSS_LOG_ENTER();

    if (meta->objecttype == SAI_OBJECT_TYPE_SWITCH)
    {
        switch (meta->attrid)
        {
            case SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS:
            case SAI_SWITCH_ATTR_PORT_LIST:
                return refresh_port_list(meta); // TODO should implement, override and call on init create_ports

            case SAI_SWITCH_ATTR_DEFAULT_TRAP_GROUP:
            case SAI_SWITCH_ATTR_FIRMWARE_MAJOR_VERSION:
                return SAI_STATUS_SUCCESS;

            case SAI_SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY:
            case SAI_SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY:
                return SAI_STATUS_SUCCESS;
        }
    }

    if (meta->objecttype == SAI_OBJECT_TYPE_PORT)
    {
        switch (meta->attrid)
        {
            //case SAI_PORT_ATTR_SUPPORTED_FEC_MODE:
            //case SAI_PORT_ATTR_SUPPORTED_AUTO_NEG_MODE:
            //case SAI_PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE:
            //case SAI_PORT_ATTR_ADVERTISED_FEC_MODE:
            //    // TODO where is code that is doing refresh for those?
            //    return SAI_STATUS_SUCCESS;

                /*
                 * This status is based on hostif vEthernetX status.
                 */

            case SAI_PORT_ATTR_OPER_STATUS:
            case SAI_PORT_ATTR_PORT_SERDES_ID:
                return SAI_STATUS_SUCCESS;

            case SAI_PORT_ATTR_OPER_SPEED:
                return refresh_port_oper_speed(object_id);
        }
    }

    if (meta->objecttype == SAI_OBJECT_TYPE_DEBUG_COUNTER && meta->attrid == SAI_DEBUG_COUNTER_ATTR_INDEX)
    {
        return SAI_STATUS_SUCCESS;  // XXX not sure for gearbox
    }

    if (meta->objecttype == SAI_OBJECT_TYPE_MACSEC && meta->attrid == SAI_MACSEC_ATTR_SCI_IN_INGRESS_MACSEC_ACL)
    {
        return refresh_macsec_sci_in_ingress_macsec_acl(object_id);
    }

    if (meta->objecttype == SAI_OBJECT_TYPE_MACSEC_SA)
    {
        return refresh_macsec_sa_stat(object_id);
    }

    auto mmeta = m_meta.lock();

    if (mmeta)
    {
        if (mmeta->meta_unittests_enabled())
        {
            SWSS_LOG_NOTICE("unittests enabled, SET could be performed on %s, not recalculating", meta->attridname);

            return SAI_STATUS_SUCCESS;
        }
    }
    else
    {
        SWSS_LOG_WARN("meta pointer expired");
    }

    SWSS_LOG_WARN("need to recalculate RO: %s", meta->attridname);

    return SAI_STATUS_NOT_IMPLEMENTED;
}