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

Commit 33205b82 authored by Pankaj Singh's avatar Pankaj Singh Committed by Gerrit - the friendly Code Review server
Browse files

wlan: Set EXTERNAL_AUTH flag for SAE auth frame

hostapd handles SAE authentication frames sent by a station.
Set the flag RXMGMT_FLAG_EXTERNAL_AUTH and forward them
to hostapd.

Change-Id: Ic1d6a560430307b899700f98d90a7dacfe741071
CRs-Fixed: 2734555
parent 3e020c75
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2013, 2017-2018 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2013, 2017-2018, 2020 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
@@ -132,7 +132,8 @@ int hdd_setP2pNoa( struct net_device *dev, tANI_U8 *command );
void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter,
                            tANI_U32 nFrameLength, tANI_U8* pbFrames,
                            tANI_U8 frameType,
                            tANI_U32 rxChan, tANI_S8 rxRssi);
                            tANI_U32 rxChan, tANI_S8 rxRssi,
                            enum rxmgmt_flags rx_flags);
void hdd_remainChanReadyHandler( hdd_adapter_t *pAdapter );
void hdd_sendActionCnf( hdd_adapter_t *pAdapter, tANI_BOOLEAN actionSendSuccess );
int wlan_hdd_check_remain_on_channel(hdd_adapter_t *pAdapter);
+3 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
@@ -15971,7 +15971,8 @@ void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind)
                             frame_ind->frameBuf,
                             frame_ind->frameType,
                             frame_ind->rxChan,
                             frame_ind->rxRssi);
                             frame_ind->rxRssi,
                             frame_ind->rx_flags);
    return;
}
+48 −2
Original line number Diff line number Diff line
@@ -2732,12 +2732,54 @@ void hdd_sendMgmtFrameOverMonitorIface( hdd_adapter_t *pMonAdapter,
     return ;
}

#if defined(WLAN_FEATURE_SAE) && defined(CFG80211_EXTERNAL_AUTH_AP_SUPPORT)
/**
 * wlan_hdd_set_rxmgmt_external_auth_flag() - Set the EXTERNAL_AUTH flag
 * @nl80211_flag: flags to be sent to nl80211 from enum nl80211_rxmgmt_flags
 *
 * Set the flag NL80211_RXMGMT_FLAG_EXTERNAL_AUTH if supported.
 */
static void
wlan_hdd_set_rxmgmt_external_auth_flag(enum nl80211_rxmgmt_flags *nl80211_flag)
{
    *nl80211_flag |= NL80211_RXMGMT_FLAG_EXTERNAL_AUTH;
}
#else
static void
wlan_hdd_set_rxmgmt_external_auth_flag(enum nl80211_rxmgmt_flags *nl80211_flag)
{
}
#endif

/**
 * wlan_hdd_cfg80211_convert_rxmgmt_flags() - Convert RXMGMT value
 * @nl80211_flag: Flags to be sent to nl80211 from enum nl80211_rxmgmt_flags
 * @flag: flags set by driver(SME/PE) from enum rxmgmt_flags
 *
 * Convert driver internal RXMGMT flag value to nl80211 defined RXMGMT flag
 * Return: 0 on success, -EINVAL on invalid value
 */
static int
wlan_hdd_cfg80211_convert_rxmgmt_flags(enum rxmgmt_flags flag,
                                       enum nl80211_rxmgmt_flags *nl80211_flag)
{
    int ret = -EINVAL;

    if (flag & RXMGMT_FLAG_EXTERNAL_AUTH) {
            wlan_hdd_set_rxmgmt_external_auth_flag(nl80211_flag);
            ret = 0;
    }

    return ret;
}

void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter,
                            tANI_U32 nFrameLength,
                            tANI_U8* pbFrames,
                            tANI_U8 frameType,
                            tANI_U32 rxChan,
                            tANI_S8 rxRssi)
                            tANI_S8 rxRssi,
                            enum rxmgmt_flags rx_flags)
{
    tANI_U16 freq;
    tANI_U16 extend_time;
@@ -2749,6 +2791,7 @@ void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter,
    hdd_context_t *pHddCtx = NULL;
    VOS_STATUS status;
    hdd_remain_on_chan_ctx_t* pRemainChanCtx = NULL;
    enum nl80211_rxmgmt_flags nl80211_flag = 0;

    hddLog(VOS_TRACE_LEVEL_INFO, FL("Frame Type = %d Frame Length = %d"),
                     frameType, nFrameLength);
@@ -3029,11 +3072,14 @@ void __hdd_indicate_mgmt_frame(hdd_adapter_t *pAdapter,
        }
    }

    if (wlan_hdd_cfg80211_convert_rxmgmt_flags(rx_flags, &nl80211_flag))
        hddLog(LOG1, "Failed to convert RXMGMT flags :0x%x to nl80211 format",
               rx_flags);
    //Indicate Frame Over Normal Interface
    hddLog( LOG1, FL("Indicate Frame over NL80211 Interface"));
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,18,0))
    cfg80211_rx_mgmt(pAdapter->dev->ieee80211_ptr, freq, rxRssi * 100, pbFrames,
                     nFrameLength, NL80211_RXMGMT_FLAG_ANSWERED);
                     nFrameLength, NL80211_RXMGMT_FLAG_ANSWERED | nl80211_flag);
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
    cfg80211_rx_mgmt(pAdapter->dev->ieee80211_ptr, freq, rxRssi * 100, pbFrames,
                     nFrameLength, NL80211_RXMGMT_FLAG_ANSWERED, GFP_ATOMIC);
+13 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2017, 2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2017, 2019-2020 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
@@ -3774,6 +3774,17 @@ typedef struct sSirSmeCoexInd
    tANI_U32        coexIndData[SIR_COEX_IND_DATA_SIZE];
}tSirSmeCoexInd, *tpSirSmeCoexInd;

/**
 * enum rxmgmt_flags - flags for received management frame.
 * @RXMGMT_FLAG_NONE: Default value to indicate no flags are set.
 * @RXMGMT_FLAG_EXTERNAL_AUTH: frame can be used for external authentication
 *                             by upper layers.
 */
enum rxmgmt_flags {
    RXMGMT_FLAG_NONE,
    RXMGMT_FLAG_EXTERNAL_AUTH = 1 << 1,
};

typedef struct sSirSmeMgmtFrameInd
{
    tANI_U16        frameLen;
@@ -3781,6 +3792,7 @@ typedef struct sSirSmeMgmtFrameInd
    tANI_U8        sessionId;
    tANI_U8         frameType;
    tANI_S8         rxRssi;
    enum rxmgmt_flags rx_flags;
    tANI_U8  frameBuf[1]; //variable
}tSirSmeMgmtFrameInd, *tpSirSmeMgmtFrameInd;

+3 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2014, 2016-2017 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2014, 2016-2017, 2020 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
@@ -742,7 +742,7 @@ void limRemainOnChnRsp(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data)
void limSendSmeMgmtFrameInd(
                    tpAniSirGlobal pMac, tANI_U16 sessionId,
                    tANI_U8 *pRxPacketInfo, tpPESession psessionEntry,
                    tANI_S8 rxRssi)
                    tANI_S8 rxRssi, enum rxmgmt_flags rx_flags)
{
    tpSirSmeMgmtFrameInd  pSirSmeMgmtFrame = NULL;
    tANI_U16              length;
@@ -772,6 +772,7 @@ void limSendSmeMgmtFrameInd(
    pSirSmeMgmtFrame->sessionId = sessionId;
    pSirSmeMgmtFrame->frameType = frameType;
    pSirSmeMgmtFrame->rxRssi = rxRssi;
    pSirSmeMgmtFrame->rx_flags = rx_flags;

    if (( IS_5G_BAND(rfBand)))
    {
Loading