static void event_to_unifi_sys_eapol_cfm(FsmContext* context, CsrUint8* inputbuffer, CsrUint16 length)
{
    CsrUint8* buffer = &inputbuffer[6];
    UnifiSysEapolCfm_Evt evt;

    evt.appHandle = (void*) event_unpack_CsrUint32(&buffer);
    evt.result = (unifi_EapolRc) event_unpack_CsrUint16(&buffer);

    unifi_sys_eapol_cfm(context, evt.appHandle, evt.result);

}
Exemple #2
0
/*
 * ---------------------------------------------------------------------------
 *  sme_log_event
 *
 *      Callback function to be registered as the SME event callback.
 *      Copies the signal content into a new udi_log_t struct and adds
 *      it to the read queue for the SME client.
 *
 *  Arguments:
 *      arg             This is the value given to unifi_add_udi_hook, in
 *                      this case a pointer to the client instance.
 *      signal          Pointer to the received signal.
 *      signal_len      Size of the signal structure in bytes.
 *      bulkdata        Pointers to any associated bulk data.
 *      dir             Direction of the signal. Zero means from host,
 *                      non-zero means to host.
 *
 *  Returns:
 *      None.
 * ---------------------------------------------------------------------------
 */
void
sme_log_event(ul_client_t *pcli,
              const u8 *signal, int signal_len,
              const bulk_data_param_t *bulkdata,
              int dir)
{
    unifi_priv_t *priv;
    CSR_SIGNAL unpacked_signal;
    unifi_DataBlock mlmeCommand;
    unifi_DataBlock dataref1;
    unifi_DataBlock dataref2;
    int r;

    func_enter();

    /* Just a sanity check */
    if ((signal == NULL) || (signal_len <= 0)) {
        func_exit();
        return;
    }

    priv = uf_find_instance(pcli->instance);
    if (!priv) {
        unifi_error(priv, "sme_log_event: invalid priv\n");
        func_exit();
        return;
    }

    if (priv->smepriv == NULL) {
        unifi_error(priv, "sme_log_event: invalid smepriv\n");
        func_exit();
        return;
    }

    unifi_trace(priv, UDBG3,
                "sme_log_event: Process signal 0x%X %s\n",
                *((CsrUint16*)signal),
                lookup_signal_name(*((CsrUint16*)signal)));


    /*
     * Indicate CSR_MLME_EAPOL_CONFIRM_ID and CSR_MA_UNITDATA_CONFIRM_ID
     * using the respective SYS API.
     */
    r = read_unpack_signal(signal, &unpacked_signal);
    if (r) {
        unifi_error(priv, "sme_log_event: Received unknown or corrupted signal.\n");
        func_exit();
        return;
    }

    if (unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_MLME_EAPOL_CONFIRM_ID) {
        CSR_MLME_EAPOL_CONFIRM *cfm = &unpacked_signal.u.MlmeEapolConfirm;

        /* Retrieve the appHandle from the LSB of the ReceiverId. */
        unifi_sys_eapol_cfm(priv->smepriv, (void*)((unsigned int)signal[2]),
                            (cfm->ResultCode) ? unifi_EapolRcFailure : unifi_EapolRcSuccess);
        func_exit();
        return;
    }

    if (unpacked_signal.SignalPrimitiveHeader.SignalId == CSR_MA_UNITDATA_CONFIRM_ID) {
        CSR_MA_UNITDATA_CONFIRM *cfm = &unpacked_signal.u.MaUnitdataConfirm;

        /* Retrieve the appHandle from the LSB of the ReceiverId. */
        unifi_sys_ma_unitdata_cfm(priv->smepriv,
                                  (void*)((unsigned int)signal[2]),
                                  (cfm->TransmissionStatus) ? unifi_Error : unifi_Success,
                                  cfm->TransmissionStatus,
                                  cfm->ProvidedPriority,
                                  cfm->ProvidedServiceClass,
                                  cfm->ProvidedHostTag);

        func_exit();
        return;
    }

    mlmeCommand.length = signal_len;
    mlmeCommand.data = (CsrUint8*)signal;

    dataref1.length = bulkdata->d[0].data_length;
    if (dataref1.length > 0) {
        dataref1.data = (CsrUint8 *) bulkdata->d[0].os_data_ptr;
    } else
    {
        dataref1.data = NULL;
    }

    dataref2.length = bulkdata->d[1].data_length;
    if (dataref2.length > 0) {
        dataref2.data = (CsrUint8 *) bulkdata->d[1].os_data_ptr;
    } else
    {
        dataref2.data = NULL;
    }

    unifi_sys_hip_ind(priv->smepriv, mlmeCommand.length, mlmeCommand.data,
                                     dataref1.length, dataref1.data,
                                     dataref2.length, dataref2.data);

    func_exit();
} /* sme_log_event() */