diff options
| author | Edhar, Mahesh Kumar <c_medhar@qti.qualcomm.com> | 2014-04-22 11:45:57 +0530 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-04-24 22:16:44 -0700 |
| commit | 99310c4f0f41661a94de335068bc355658917d2f (patch) | |
| tree | 49b3d26efbb13370d1ccbe1d6293d5eeadae2491 | |
| parent | 55af38e51250aa33e2aa2a1c40cbcde6e8cc5819 (diff) | |
CLD: changes to receive unencrypted WAI frames.
WAI frames are unencrypted data frames which are sent as
part of the unicast/musticast key negotiation frames.
changes done to honor the same.
Change-Id: I15e9b8913ddd65b4972121b83f35edfdea58d0fa
CRs-fixed: 631754
| -rw-r--r-- | CORE/CLD_TXRX/TLSHIM/tl_shim.c | 6 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 36 | ||||
| -rw-r--r-- | Kbuild | 1 |
3 files changed, 40 insertions, 3 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index 40c68ddb562c..e01c883fad56 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -1554,6 +1554,7 @@ VOS_STATUS WLANTL_RegisterSTAClient(void *vos_ctx, struct ol_txrx_peer_t *peer; ol_txrx_peer_update_param_t param; struct tlshim_sta_info *sta_info; + privacy_exemption privacy_filter; ENTER(); if (sta_desc->ucSTAId >= WLAN_MAX_STA_COUNT) { @@ -1583,6 +1584,11 @@ VOS_STATUS WLANTL_RegisterSTAClient(void *vos_ctx, wdi_in_peer_update(peer->vdev, peer->mac_addr.raw, ¶m, ol_txrx_peer_update_qos_capable); if (sta_desc->ucIsWapiSta) { + /*Privacy filter to accept unencrypted WAI frames*/ + privacy_filter.ether_type = ETHERTYPE_WAI; + privacy_filter.filter_type = PRIVACY_FILTER_ALWAYS; + privacy_filter.packet_type = PRIVACY_FILTER_PACKET_BOTH; + ol_txrx_set_privacy_filters(peer->vdev, &privacy_filter, 1); /* param.sec_type = ol_sec_type_wapi; */ /* * TODO: Peer update also updates the other security types diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index f1b6ed077fac..0ab04abc5921 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -7058,6 +7058,20 @@ static int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma, ol_txrx_peer_state_update(pdev, params->bssId, ol_txrx_peer_state_auth); #endif +#ifdef FEATURE_WLAN_WAPI + if (params->encryptType == eSIR_ED_WPI) { + ret = wmi_unified_vdev_set_param_send(wma->wmi_handle, + params->smesessionId, + WMI_VDEV_PARAM_DROP_UNENCRY, + FALSE); + if (ret) { + WMA_LOGE("Set WMI_VDEV_PARAM_DROP_UNENCRY Param status:%d\n", ret); + adf_nbuf_free(buf); + return ret; + } + } +#endif + cmd->peer_caps = params->capab_info; cmd->peer_listen_intval = params->listenInterval; cmd->peer_ht_caps = params->ht_caps; @@ -9759,9 +9773,15 @@ static wmi_buf_t wma_setup_install_key_cmd(tp_wma_handle wma_handle, 0x36,0x5c}; unsigned char rx_iv[16] = {0x5c,0x36,0x5c,0x36,0x5c,0x36,0x5c, 0x36,0x5c,0x36,0x5c,0x36,0x5c,0x36, - 0x5c,0x36}; + 0x5c,0x37}; cmd->key_txmic_len = WMA_TXMIC_LEN; cmd->key_rxmic_len = WMA_RXMIC_LEN; + /*Authenticator initializes the value of PN as + *0x5C365C365C365C365C365C365C365C36 for multicast key update. + */ + if (!key_params->unicast) + rx_iv[WPI_IV_LEN - 1] = 0x36; + vos_mem_copy(&cmd->wpi_key_rsc_counter, &rx_iv, WPI_IV_LEN); vos_mem_copy(&cmd->wpi_key_tsc_counter, &tx_iv, WPI_IV_LEN); cmd->key_cipher = WMI_CIPHER_WAPI; @@ -9898,7 +9918,12 @@ static void wma_set_bsskey(tp_wma_handle wma_handle, tpSetBssKeyParams key_info) if (key_params.key_type != eSIR_ED_NONE && !key_info->key[i].keyLength) continue; - key_params.key_idx = key_info->key[i].keyId; + if (key_info->encType == eSIR_ED_WPI) { + key_params.key_idx = key_info->key[i].keyId; + key_params.def_key_idx = key_info->key[i].keyId; + } else + key_params.key_idx = key_info->key[i].keyId; + key_params.key_len = key_info->key[i].keyLength; if (key_info->encType == eSIR_ED_TKIP) { vos_mem_copy(key_params.key_data, @@ -10089,7 +10114,12 @@ static void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info, } else vos_mem_copy(key_params.key_data, key_info->key[i].key, key_info->key[i].keyLength); - key_params.key_idx = i; + if (key_info->encType == eSIR_ED_WPI) { + key_params.key_idx = key_info->key[i].keyId; + key_params.def_key_idx = key_info->key[i].keyId; + } else + key_params.key_idx = i; + key_params.key_len = key_info->key[i].keyLength; buf = wma_setup_install_key_cmd(wma_handle, &key_params, &len); if (!buf) { @@ -986,6 +986,7 @@ CDEFINES := -DANI_LITTLE_BYTE_ENDIAN \ -DQCA_SUPPORT_TXRX_VDEV_PAUSE_LL \ -DQCA_SUPPORT_TX_THROTTLE_LL \ -DWMI_INTERFACE_EVENT_LOGGING\ + -DATH_SUPPORT_WAPI\ ifeq ($(CONFIG_QCA_WIFI_SDIO), 1) CDEFINES += -DCONFIG_HL_SUPPORT \ |
