void DummySaiInterface::sendNotification()

in meta/DummySaiInterface.cpp [657:886]


void DummySaiInterface::sendNotification(
        _In_ sai_attr_id_t id)
{
    SWSS_LOG_ENTER();

    // get local copy, in case m_sn will change
    // this probably should be under separate mutex (m_sn)

    sai_switch_notifications_t sn = m_sn;

    auto* m = sai_metadata_get_attr_metadata(SAI_OBJECT_TYPE_SWITCH, id);

    switch (id)
    {
        case SAI_SWITCH_ATTR_SWITCH_STATE_CHANGE_NOTIFY:

            if (sn.on_switch_state_change)
            {
                SWSS_LOG_NOTICE("sending sn.on_switch_state_change");

                sn.on_switch_state_change(0x1, SAI_SWITCH_OPER_STATUS_UP);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_switch_state_change is NULL");
            }
            break;

        case SAI_SWITCH_ATTR_FDB_EVENT_NOTIFY:

            if (sn.on_fdb_event)
            {
                SWSS_LOG_NOTICE("sending sn.on_fdb_event");

                sai_fdb_event_notification_data_t data;

                data.event_type = SAI_FDB_EVENT_LEARNED;
                data.fdb_entry.switch_id = 0x1;
                data.fdb_entry.mac_address[0] = 0x11;
                data.fdb_entry.mac_address[1] = 0x22;
                data.fdb_entry.mac_address[2] = 0x33;
                data.fdb_entry.mac_address[3] = 0x44;
                data.fdb_entry.mac_address[4] = 0x55;
                data.fdb_entry.mac_address[5] = 0x66;
                data.fdb_entry.bv_id = 0x2;
                data.attr_count = 0;
                data.attr = nullptr;

                sn.on_fdb_event(1, &data);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_fdb_event is NULL");
            }
            break;


        case SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY:

            if (sn.on_port_state_change)
            {
                SWSS_LOG_NOTICE("sending sn.on_port_state_change");

                sai_port_oper_status_notification_t data;

                data.port_id = 0x2;
                data.port_state = SAI_PORT_OPER_STATUS_UP;

                sn.on_port_state_change(1, &data);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_port_state_change is NULL");
            }
            break;

        case SAI_SWITCH_ATTR_SHUTDOWN_REQUEST_NOTIFY:

            if (sn.on_switch_shutdown_request)
            {
                SWSS_LOG_NOTICE("sending sn.on_switch_shutdown_request");

                sn.on_switch_shutdown_request(0x1);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_switch_shutdown_request is NULL");
            }
            break;

        case SAI_SWITCH_ATTR_NAT_EVENT_NOTIFY:

            if (sn.on_nat_event)
            {
                SWSS_LOG_NOTICE("sending sn.on_nat_event");

                sai_nat_event_notification_data_t data;

                data.event_type = SAI_NAT_EVENT_NONE;
                data.nat_entry.switch_id = 0x1;
                data.nat_entry.vr_id = 0x2;
                data.nat_entry.nat_type = SAI_NAT_TYPE_NONE;

                memset(&data.nat_entry.data, 0, sizeof(data.nat_entry.data));

                sn.on_nat_event(1, &data);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_nat_event is NULL");
            }
            break;


        case SAI_SWITCH_ATTR_PORT_HOST_TX_READY_NOTIFY:

            if (sn.on_nat_event)
            {
                SWSS_LOG_NOTICE("sending sn.on_port_host_tx_ready");

                sn.on_port_host_tx_ready(0x1, 0x2, SAI_PORT_HOST_TX_READY_STATUS_NOT_READY);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_port_host_tx_readyis NULL");
            }
            break;

        case SAI_SWITCH_ATTR_SWITCH_ASIC_SDK_HEALTH_EVENT_NOTIFY:

            if (sn.on_nat_event)
            {
                SWSS_LOG_NOTICE("sending sn.on_switch_asic_sdk_health_event");

                sai_timespec_t timespec;

                timespec.tv_sec = 0;
                timespec.tv_nsec = 0;

                sai_switch_health_data_t hd;

                hd.data_type = SAI_HEALTH_DATA_TYPE_GENERAL;

                sai_u8_list_t desc;
                desc.count = 0;
                desc.list = NULL;

                sn.on_switch_asic_sdk_health_event(
                        0x1,
                        SAI_SWITCH_ASIC_SDK_HEALTH_SEVERITY_NOTICE,
                        timespec,
                        SAI_SWITCH_ASIC_SDK_HEALTH_CATEGORY_SW,
                        hd,
                        desc);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.sn.on_switch_asic_sdk_health_event");
            }
            break;

        case SAI_SWITCH_ATTR_QUEUE_PFC_DEADLOCK_NOTIFY:

            if (sn.on_queue_pfc_deadlock)
            {
                SWSS_LOG_NOTICE("sending sn.on_queue_pfc_deadlock");

                sai_queue_deadlock_notification_data_t data;

                data.queue_id = 0x2;
                data.event = SAI_QUEUE_PFC_DEADLOCK_EVENT_TYPE_DETECTED;
                data.app_managed_recovery = true;

                sn.on_queue_pfc_deadlock(1, &data);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_port_host_tx_readyis NULL");
            }
            break;

        case SAI_SWITCH_ATTR_BFD_SESSION_STATE_CHANGE_NOTIFY:

            if (sn.on_bfd_session_state_change)
            {
                SWSS_LOG_NOTICE("sending sn.on_bfd_session_state_change");

                sai_bfd_session_state_notification_t data;

                data.bfd_session_id = 0x2;
                data.session_state = SAI_BFD_SESSION_STATE_ADMIN_DOWN;

                sn.on_bfd_session_state_change(1, &data);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_bfd_session_state_change");
            }
            break;

        case SAI_SWITCH_ATTR_TWAMP_SESSION_EVENT_NOTIFY:

            if (sn.on_twamp_session_event)
            {
                SWSS_LOG_NOTICE("sending sn.on_twamp_session_event");

                sai_twamp_session_event_notification_data_t data;

                data.twamp_session_id = 0x1;
                data.session_state = SAI_TWAMP_SESSION_STATE_INACTIVE;

                data.session_stats.index = 0;
                data.session_stats.number_of_counters = 0;
                data.session_stats.counters_ids = nullptr;
                data.session_stats.counters = nullptr;

                sn.on_twamp_session_event(1, &data);
            }
            else
            {
                SWSS_LOG_WARN("pointer sn.on_twamp_session_event");
            }
            break;

        default:

            SWSS_LOG_WARN("notification for SWITCH attr id: %d (%s) is not supported, FIXME", id, (m ? m->attridname : "UNKNOWN"));
            break;
    }
}