Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6d8dd22 authored by Abhinav Kumar's avatar Abhinav Kumar
Browse files

wlan: Add changes to trigger SAE in supplicant

propagation from qcacld-3.0 to prima

Add following changes as part of this
1. Add framework to trigger SAE using cfg80211
2. Add changes to send sae info from LIM to HDD layer.

Change-Id: Ia87088dc46ea3f75d05f42e20594dd79a97aff11
CRs-Fixed: 2531060
parent 97821071
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -6449,4 +6449,20 @@ struct sir_feature_caps_params {
	void *user_data;
};

/**
 * struct sae_info - SAE info used for commit/confirm messages
 * @msg_type: Message type
 * @msg_len: length of message
 * @vdev_id: vdev id
 * @peer_mac_addr: peer MAC address
 * @ssid: SSID
 */
struct sir_sae_info {
    uint16_t msg_type;
    uint16_t msg_len;
    uint32_t vdev_id;
    v_MACADDR_t peer_mac_addr;
    tSirMacSSid ssid;
};

#endif /* __SIR_API_H */
+1 −0
Original line number Diff line number Diff line
@@ -401,6 +401,7 @@ enum eWniMsgTypes
    eWNI_SME_ECSA_CHAN_CHANGE_REQ,
    eWNI_SME_ECSA_CHAN_CHANGE_RSP,
    eWNI_SME_STA_DEL_BA_REQ,
    eWNI_SME_TRIGGER_SAE,
    eWNI_SME_MSG_TYPES_END
};

+1 −0
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@ typedef enum eLimMlmStates
    eLIM_MLM_WT_FT_REASSOC_RSP_STATE,
#endif
    eLIM_MLM_P2P_LISTEN_STATE,
    eLIM_MLM_WT_SAE_AUTH_STATE,
} tLimMlmStates;

// 11h channel quiet states
+77 −1
Original line number Diff line number Diff line
@@ -2462,7 +2462,70 @@ limProcessMlmJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
    limPostSmeMessage(pMac, LIM_MLM_JOIN_CNF, (tANI_U32 *) &mlmJoinCnf);
} /*** limProcessMlmJoinReq() ***/

#ifdef WLAN_FEATURE_SAE
/**
 * lim_process_mlm_auth_req_sae() - Handle SAE authentication
 * @mac_ctx: global MAC context
 * @session: PE session entry
 *
 * This function is called by lim_process_mlm_auth_req to handle SAE
 * authentication.
 *
 * Return: tSirRetStatus
 */
static VOS_STATUS lim_process_mlm_auth_req_sae(tpAniSirGlobal mac_ctx,
                                               tpPESession session)
{
        VOS_STATUS status = VOS_STATUS_SUCCESS;
        struct sir_sae_info *sae_info;
        vos_msg_t  msg;

        sae_info = vos_mem_malloc(sizeof(*sae_info));
        if (sae_info == NULL) {
                limLog(mac_ctx, LOGP, FL("Memory allocation failed"));
                return VOS_STATUS_E_FAILURE;
        }

        sae_info->msg_type = eWNI_SME_TRIGGER_SAE;
        sae_info->msg_len = sizeof(*sae_info);
        sae_info->vdev_id = session->smeSessionId;

        vos_mem_copy(sae_info->peer_mac_addr.bytes, session->bssId,
                     VOS_MAC_ADDR_SIZE);

        sae_info->ssid.length = session->ssId.length;
        vos_mem_copy(sae_info->ssid.ssId, session->ssId.ssId,
                     session->ssId.length);
        limLog(mac_ctx, LOG1, FL("vdev_id %d ssid %.*s "MAC_ADDRESS_STR""),
               sae_info->vdev_id, sae_info->ssid.length,sae_info->ssid.ssId,
               MAC_ADDR_ARRAY(sae_info->peer_mac_addr.bytes));

        msg.type = eWNI_SME_TRIGGER_SAE;
        msg.bodyptr = sae_info;
        msg.bodyval = 0;

        if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, &msg))
        {
                limLog(mac_ctx, LOGE, "%s failed to post msg to self ",
                       __func__);
                vos_mem_free((void *)sae_info);
                status = VOS_STATUS_E_FAILURE;
        }

        session->limMlmState = eLIM_MLM_WT_SAE_AUTH_STATE;

        MTRACE(macTrace(mac_ctx, TRACE_CODE_MLM_STATE, session->peSessionId,
                        session->limMlmState));

        return status;
}
#else
static VOS_STATUS lim_process_mlm_auth_req_sae(tpAniSirGlobal mac_ctx,
                                               tpPESession session)
{
        return VOS_STATUS_E_NOSUPPORT;
}
#endif

/**
 * limProcessMlmAuthReq()
@@ -2610,7 +2673,20 @@ limProcessMlmAuthReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
                                 pMac->lim.gpLimMlmAuthReq->peerMacAddr);

        psessionEntry->limPrevMlmState = psessionEntry->limMlmState;
        if (pMac->lim.gpLimMlmAuthReq->authType == eSIR_AUTH_TYPE_SAE) {
            if (lim_process_mlm_auth_req_sae(pMac, psessionEntry) !=
                VOS_STATUS_SUCCESS) {
                mlmAuthCnf.resultCode = eSIR_SME_INVALID_PARAMETERS;
                goto end;
            } else {
                limLog(pMac, LOG1,
                       FL("lim_process_mlm_auth_req_sae is successful"));
                return;
            }
        } else {
            psessionEntry->limMlmState = eLIM_MLM_WT_AUTH_FRAME2_STATE;
        }

        MTRACE(macTrace(pMac, TRACE_CODE_MLM_STATE, psessionEntry->peSessionId, psessionEntry->limMlmState));

        //assign appropriate sessionId to the timer object
+4 −0
Original line number Diff line number Diff line
@@ -527,6 +527,7 @@ typedef enum
    eCSR_ROAM_ECSA_BCN_TX_IND,
    eCSR_ROAM_ECSA_CHAN_CHANGE_RSP,
    eCSR_ROAM_STA_CHANNEL_SWITCH,
    eCSR_ROAM_SAE_COMPUTE,
}eRoamCmdStatus;


@@ -1358,6 +1359,9 @@ typedef struct tagCsrRoamInfo
    struct sir_channel_chanege_rsp *ap_chan_change_rsp;
    tSirSmeChanInfo chan_info;
    tSirMacHTChannelWidth ch_width;
#ifdef WLAN_FEATURE_SAE
    struct sir_sae_info *sae_info;
#endif
}tCsrRoamInfo;

typedef struct tagCsrFreqScanInfo
Loading