static int CFG80211_OpsKeyAdd( IN struct wiphy *pWiphy, IN struct net_device *pNdev, IN UINT8 KeyIdx, IN const UINT8 *pMacAddr, IN struct key_params *pParams) #endif /* LINUX_VERSION_CODE */ { VOID *pAd; CMD_RTPRIV_IOCTL_80211_KEY KeyInfo; CFG80211DBG(RT_DEBUG_ERROR, ("80211> %s ==>\n", __FUNCTION__)); MAC80211_PAD_GET(pAd, pWiphy); #ifdef RT_CFG80211_DEBUG hex_dump("KeyBuf=", (UINT8 *)pParams->key, pParams->key_len); #endif /* RT_CFG80211_DEBUG */ CFG80211DBG(RT_DEBUG_ERROR, ("80211> KeyIdx = %d\n", KeyIdx)); if (pParams->key_len >= sizeof(KeyInfo.KeyBuf)) return -EINVAL; /* End of if */ #ifdef CONFIG_STA_SUPPORT /* init */ memset(&KeyInfo, 0, sizeof(KeyInfo)); memcpy(KeyInfo.KeyBuf, pParams->key, pParams->key_len); KeyInfo.KeyBuf[pParams->key_len] = 0x00; if ((pParams->cipher == WLAN_CIPHER_SUITE_WEP40) || (pParams->cipher == WLAN_CIPHER_SUITE_WEP104)) { KeyInfo.KeyType = RT_CMD_80211_KEY_WEP; } else if ((pParams->cipher == WLAN_CIPHER_SUITE_TKIP) || (pParams->cipher == WLAN_CIPHER_SUITE_CCMP)) { KeyInfo.KeyType = RT_CMD_80211_KEY_WPA; } else return -ENOTSUPP; KeyInfo.KeyId = KeyIdx+1; /* add key */ RTMP_DRIVER_80211_KEY_ADD(pAd, &KeyInfo); return 0; #endif /* CONFIG_STA_SUPPORT */ } /* End of CFG80211_OpsKeyAdd */
/* ======================================================================== Routine Description: Add a key with the given parameters. Arguments: pWiphy - Wireless hardware description pNdev - KeyIdx - Pairwise - pMacAddr - pParams - Return Value: 0 - success -x - fail Note: pMacAddr will be NULL when adding a group key. ======================================================================== */ static int CFG80211_OpsKeyAdd( IN struct wiphy *pWiphy, IN struct net_device *pNdev, IN u8 KeyIdx, IN bool Pairwise, IN const u8 *pMacAddr, IN struct key_params *pParams) { struct rtmp_adapter *pAd; CMD_RTPRIV_IOCTL_80211_KEY KeyInfo; CFG80211_CB *p80211CB; p80211CB = NULL; CFG80211DBG(RT_DEBUG_ERROR, ("80211> %s ==>\n", __FUNCTION__)); MAC80211_PAD_GET(pAd, pWiphy); #ifdef RT_CFG80211_DEBUG #endif /* RT_CFG80211_DEBUG */ //CFG80211DBG(RT_DEBUG_ERROR, ("80211> KeyIdx = %d\n", KeyIdx)); CFG80211DBG(RT_DEBUG_TRACE, ("80211> KeyIdx = %d, pParams->cipher=%x\n", KeyIdx,pParams->cipher)); if (pParams->key_len >= sizeof(KeyInfo.KeyBuf)) return -EINVAL; /* End of if */ #ifdef CONFIG_STA_SUPPORT /* init */ memset(&KeyInfo, 0, sizeof(KeyInfo)); memcpy(KeyInfo.KeyBuf, pParams->key, pParams->key_len); KeyInfo.KeyBuf[pParams->key_len] = 0x00; KeyInfo.KeyId = KeyIdx; KeyInfo.bPairwise = Pairwise; KeyInfo.KeyLen = pParams->key_len; /*if ((pParams->cipher == WLAN_CIPHER_SUITE_WEP40) || (pParams->cipher == WLAN_CIPHER_SUITE_WEP104)) { KeyInfo.KeyType = RT_CMD_80211_KEY_WEP; } else if ((pParams->cipher == WLAN_CIPHER_SUITE_TKIP) || (pParams->cipher == WLAN_CIPHER_SUITE_CCMP)) { KeyInfo.KeyType = RT_CMD_80211_KEY_WPA; } else return -ENOTSUPP;*/ if ((pParams->cipher == WLAN_CIPHER_SUITE_WEP40)) { KeyInfo.KeyType = RT_CMD_80211_KEY_WEP40; } else if ((pParams->cipher == WLAN_CIPHER_SUITE_WEP104)) { KeyInfo.KeyType = RT_CMD_80211_KEY_WEP104; } else if ((pParams->cipher == WLAN_CIPHER_SUITE_TKIP) || (pParams->cipher == WLAN_CIPHER_SUITE_CCMP)) { KeyInfo.KeyType = RT_CMD_80211_KEY_WPA; if (pParams->cipher == WLAN_CIPHER_SUITE_TKIP) KeyInfo.cipher = Ndis802_11TKIPEnable; else if (pParams->cipher == WLAN_CIPHER_SUITE_CCMP) KeyInfo.cipher = Ndis802_11AESEnable; } #ifdef DOT11W_PMF_SUPPORT //PMF IGTK else if (pParams->cipher == WLAN_CIPHER_SUITE_AES_CMAC) { KeyInfo.KeyType = RT_CMD_80211_KEY_AES_CMAC; KeyInfo.KeyId = KeyIdx; KeyInfo.bPairwise = false; KeyInfo.KeyLen = pParams->key_len; } #endif /* DOT11W_PMF_SUPPORT */ else return -ENOTSUPP; /* add key */ RTMP_DRIVER_80211_CB_GET(pAd, &p80211CB); { CFG80211DBG(RT_DEBUG_TRACE, ("80211> Key Add\n")); RTMP_DRIVER_80211_KEY_ADD(pAd, &KeyInfo); } return 0; #endif /* CONFIG_STA_SUPPORT */ } /* End of CFG80211_OpsKeyAdd */