qcacmn: Support group key installation for VLAN

VLAN group keyix is greater than WLAN_CRYPTO_MAXKEYIDX
Each VLAN will have separate group key in single VAP.

CRs-Fixed: 2490599
Change-Id: I585b2deaa13da337c5df7b55ec8e4672221e4edb
This commit is contained in:
Gurumoorthi Gnanasambandhan 2019-07-16 13:02:47 +05:30 • committed by nshrivas
commit 17d1e0f676
5 changed files with 12 additions and 3 deletions

View file

@ -49,6 +49,9 @@
#define WLAN_CRYPTO_KEYIX_NONE ((uint16_t)-1)
#define WLAN_CRYPTO_MAXKEYIDX (4)
#define WLAN_CRYPTO_MAXIGTKKEYIDX (2)
#ifndef WLAN_CRYPTO_MAX_VLANKEYIX
#define WLAN_CRYPTO_MAX_VLANKEYIX WLAN_CRYPTO_MAXKEYIDX
#endif
#define WLAN_CRYPTO_MAX_PMKID (3)
/* 40 bit wep key len */

View file

@ -433,7 +433,7 @@ struct wlan_crypto_mmie {
*/
struct wlan_crypto_comp_priv {
struct wlan_crypto_params crypto_params;
struct wlan_crypto_key *key[WLAN_CRYPTO_MAXKEYIDX];
struct wlan_crypto_key *key[WLAN_CRYPTO_MAX_VLANKEYIX];
struct wlan_crypto_key *igtk_key[WLAN_CRYPTO_MAXIGTKKEYIDX];
uint32_t igtk_key_type;
uint8_t def_tx_keyid;

View file

@ -571,7 +571,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
| WLAN_CRYPTO_KEY_RECV);
}
} else {
if ((req_key->keyix >= WLAN_CRYPTO_MAXKEYIDX)
if ((req_key->keyix >= WLAN_CRYPTO_MAX_VLANKEYIX)
&& (!IS_MGMT_CIPHER(req_key->type))) {
return QDF_STATUS_E_INVAL;
}
@ -711,7 +711,7 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
uint16_t kid = req_key->keyix;
if (kid == WLAN_CRYPTO_KEYIX_NONE)
kid = 0;
if (kid >= WLAN_CRYPTO_MAXKEYIDX) {
if (kid >= WLAN_CRYPTO_MAX_VLANKEYIX) {
crypto_err("invalid keyid %d", kid);
return QDF_STATUS_E_INVAL;
}

View file

@ -1795,6 +1795,7 @@ struct wmi_probe_resp_params {
* @vdev_id: vdev id
* @key_len: key length
* @key_idx: key index
* @group_key_idx: group key index for VLAN
* @peer_mac: peer mac address
* @key_flags: key flags, 0:pairwise key, 1:group key, 2:static key
* @key_cipher: key cipher based on security mode
@ -1812,6 +1813,7 @@ struct set_key_params {
uint8_t vdev_id;
uint16_t key_len;
uint32_t key_idx;
uint32_t group_key_idx;
uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
uint32_t key_flags;
uint32_t key_cipher;

View file

@ -4117,6 +4117,10 @@ static QDF_STATUS send_setup_install_key_cmd_tlv(wmi_unified_t wmi_handle,
(wmi_vdev_install_key_cmd_fixed_param));
cmd->vdev_id = key_params->vdev_id;
cmd->key_ix = key_params->key_idx;
if (key_params->group_key_idx) {
cmd->is_group_key_ix_valid = 1;
cmd->group_key_ix = key_params->group_key_idx;
}
WMI_CHAR_ARRAY_TO_MAC_ADDR(key_params->peer_mac, &cmd->peer_macaddr);