blob: d7605c15a53693c9641cf1d8887aadd0befdfde2 [file] [log] [blame]
/** @file supplicant.c
*
* @brief This file defines the API for supplicant
*
* Copyright (C) 2014, Marvell International Ltd.
*
* This software file (the "File") is distributed by Marvell International
* Ltd. under the terms of the GNU General Public License Version 2, June 1991
* (the "License"). You may use, redistribute and/or modify this File in
* accordance with the terms and conditions of the License, a copy of which
* is available by writing to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
* worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
* IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
* ARE EXPRESSLY DISCLAIMED. The License provides additional details about
* this warranty disclaimer.
*/
/******************************************************
Change log:
03/07/2014: Initial version
******************************************************/
#include "wltypes.h"
#include "keyMgmtSta.h"
#include "keyCommonDef.h"
#include "keyMgmtSta.h"
#include "pmkCache.h"
static __inline void
ProcessEAPoLKeyPkt(phostsa_private priv, mlan_buffer *pmbuf,
IEEEtypes_MacAddr_t *sa, IEEEtypes_MacAddr_t *da)
{
hostsa_mlan_fns *pm_fns = &priv->mlan_fns;
t_u8 bss_role = pm_fns->Hostsa_get_bss_role(pm_fns->pmlan_private);
PRINTM(MMSG, "ProcessEAPoLKeyPk bss_type=%x bss_role=%x\n",
pm_fns->bss_type, bss_role);
#ifdef MIB_STATS
INC_MIB_STAT(connPtr, eapolRxForESUPPCnt);
#endif
switch (bss_role) {
#ifdef BTAMP
case CONNECTION_TYPE_BTAMP:
ProcessKeyMgmtDataAmp(bufDesc);
break;
#endif
case MLAN_BSS_ROLE_STA:
/* key data */
ProcessKeyMgmtDataSta(priv, pmbuf, sa, da);
break;
default:
#ifdef AUTHENTICATOR
if (WIFI_DIRECT_MODE_GO == connPtr->DeviceMode) {
ProcessKeyMgmtDataAp(bufDesc);
}
#endif
break;
}
}
t_u8
ProcessEAPoLPkt(void *priv, mlan_buffer *pmbuf)
{
phostsa_private psapriv = (phostsa_private)priv;
ether_hdr_t *pEthHdr =
(ether_hdr_t *)(pmbuf->pbuf + pmbuf->data_offset);
EAP_PacketMsg_t *pEapPkt = NULL;
UINT8 fPacketProcessed = 0;
pEapPkt = (EAP_PacketMsg_t *)((t_u8 *)pEthHdr + sizeof(ether_hdr_t));
switch (pEapPkt->hdr_8021x.pckt_type) {
case IEEE_8021X_PACKET_TYPE_EAPOL_KEY:
ProcessEAPoLKeyPkt(psapriv, pmbuf,
(IEEEtypes_MacAddr_t *)pEthHdr->sa,
(IEEEtypes_MacAddr_t *)pEthHdr->da);
fPacketProcessed = 1;
break;
#if 0
case IEEE_8021X_PACKET_TYPE_EAP_PACKET:
{
if (WIFI_DIRECT_MODE_CLIENT == connPtr->DeviceMode
|| WIFI_DIRECT_MODE_DEVICE == connPtr->DeviceMode) {
if (pEapPkt->code ==
IEEE_8021X_CODE_TYPE_REQUEST) {
assocAgent_eapRequestRx(sa);
}
}
}
break;
#endif
default:
break;
}
// CLEAN_FLUSH_CACHED_SQMEM((UINT32)(pEapPkt), bufDesc->DataLen);
return fPacketProcessed;
}
Status_e
supplicantRestoreDefaults(void *priv)
{
pmkCacheInit(priv);
return SUCCESS;
}
/* This can also be removed*/
//#pragma arm section code = ".init"
void
supplicantFuncInit(void *priv)
{
supplicantRestoreDefaults(priv);
}
//#pragma arm section code
//#endif /* PSK_SUPPLICANT */