[PATCH 1/1] Cleanup encryption implementation
Eugene Krasnikov
k.eugene.e at gmail.com
Wed Jun 26 12:00:33 EDT 2013
Looks good to me.
2013/6/26 Olof Johansson <dev at skyshaper.net>:
> This commit cleans up the encryption implementation by removing
> unnecessary stuff like the en_state and the encrypt parameter.
> ---
> dxe.c | 11 +----------
> main.c | 24 ++++++++++--------------
> txrx.c | 8 ++++++--
> txrx.h | 2 +-
> wcn36xx.h | 6 ------
> 5 files changed, 18 insertions(+), 33 deletions(-)
>
> diff --git a/dxe.c b/dxe.c
> index 4de4cb1..d15a7b7 100644
> --- a/dxe.c
> +++ b/dxe.c
> @@ -576,16 +576,7 @@ int wcn36xx_dxe_tx(struct wcn36xx *wcn,
> }
>
> wcn36xx_prepare_tx_bd(ctl->bd_cpu_addr, skb->len, header_len);
> - /* Do not encrypt NULL and MGMT frames */
> - if (!is_high && WCN36XX_BSS_KEY == wcn->en_state &&
> - !ieee80211_is_nullfunc(hdr->frame_control)) {
> - wcn36xx_dbg(WCN36XX_DBG_DXE, "DXE Encription enabled");
> - wcn36xx_fill_tx_bd(wcn, ctl->bd_cpu_addr, broadcast, 0, hdr,
> - tx_ack);
> - } else {
> - wcn36xx_fill_tx_bd(wcn, ctl->bd_cpu_addr, broadcast, 1, hdr,
> - tx_ack);
> - }
> + wcn36xx_fill_tx_bd(wcn, ctl->bd_cpu_addr, broadcast, hdr, tx_ack);
>
> ctl = ch->head_blk_ctl;
> desc = ctl->desc;
> diff --git a/main.c b/main.c
> index de787f3..f770d84 100644
> --- a/main.c
> +++ b/main.c
> @@ -382,14 +382,6 @@ static int wcn36xx_set_key(struct ieee80211_hw
> *hw, enum set_key_cmd cmd,
>
> switch (cmd) {
> case SET_KEY:
> - /* Reconfigure bss with encrypt_type */
> - if (IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags)
> - wcn36xx_smd_config_bss(wcn,
> - NL80211_IFTYPE_STATION,
> - sta->addr,
> - true,
> - wcn->beacon_interval);
> -
> if (WCN36XX_HAL_ED_TKIP == wcn->encrypt_type) {
> /*
> * Supplicant is sending key in the wrong order:
> @@ -404,13 +396,20 @@ static int wcn36xx_set_key(struct ieee80211_hw
> *hw, enum set_key_cmd cmd,
> } else {
> memcpy(key, key_conf->key, key_conf->keylen);
> }
> - if (WCN36XX_STA_KEY == wcn->en_state) {
> +
> + if (IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags) {
> + /* Reconfigure bss with encrypt_type */
> + wcn36xx_smd_config_bss(wcn,
> + NL80211_IFTYPE_STATION,
> + sta->addr,
> + true,
> + wcn->beacon_interval);
> +
> wcn36xx_smd_set_stakey(wcn,
> wcn->encrypt_type,
> key_conf->keyidx,
> key_conf->keylen,
> key);
> - wcn->en_state = WCN36XX_BSS_KEY;
> } else {
> wcn36xx_smd_set_bsskey(wcn,
> wcn->encrypt_type,
> @@ -420,11 +419,10 @@ static int wcn36xx_set_key(struct ieee80211_hw
> *hw, enum set_key_cmd cmd,
> }
> break;
> case DISABLE_KEY:
> - if (WCN36XX_BSS_KEY == wcn->en_state) {
> + if (!(IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags)) {
> wcn36xx_smd_remove_bsskey(wcn,
> wcn->encrypt_type,
> key_conf->keyidx);
> - wcn->en_state = WCN36XX_STA_KEY;
> } else {
> /* do not remove key if disassociated */
> if (wcn->aid)
> @@ -559,7 +557,6 @@ static void wcn36xx_bss_info_changed(struct
> ieee80211_hw *hw,
> bss_conf->aid);
>
> wcn->aid = bss_conf->aid;
> - wcn->en_state = WCN36XX_STA_KEY;
>
> rcu_read_lock();
> sta = ieee80211_find_sta(vif, bss_conf->bssid);
> @@ -582,7 +579,6 @@ static void wcn36xx_bss_info_changed(struct
> ieee80211_hw *hw,
> vif->addr,
> bss_conf->aid);
> wcn->aid = 0;
> - wcn->en_state = WCN36XX_STA_KEY;
> wcn36xx_smd_delete_sta(wcn);
> wcn36xx_smd_delete_bss(wcn);
> wcn36xx_smd_set_link_st(wcn,
> diff --git a/txrx.c b/txrx.c
> index 9c3a4d1..a23cbd8 100644
> --- a/txrx.c
> +++ b/txrx.c
> @@ -84,7 +84,7 @@ void wcn36xx_prepare_tx_bd(struct wcn36xx_tx_bd *bd,
> u32 len, u32 header_len)
> bd->pdu.mpdu_len = len;
> }
> void wcn36xx_fill_tx_bd(struct wcn36xx *wcn, struct wcn36xx_tx_bd *bd,
> - u8 broadcast, u8 encrypt, struct ieee80211_hdr *hdr,
> + u8 broadcast, struct ieee80211_hdr *hdr,
> bool tx_compl)
> {
> bd->dpu_rf = WCN36XX_BMU_WQ_TX;
> @@ -119,17 +119,21 @@ void wcn36xx_fill_tx_bd(struct wcn36xx *wcn,
> struct wcn36xx_tx_bd *bd,
> wcn36xx_warn("frame control type unknown");
> }
>
> + bd->dpu_ne = 0;
> if (ieee80211_is_data(hdr->frame_control)) {
> bd->dpu_sign = wcn->current_vif->ucast_dpu_signature;
> bd->queue_id = 0;
> bd->sta_index = wcn->current_vif->sta_index;
> bd->dpu_desc_idx = wcn->current_vif->dpu_desc_index;
> + if(ieee80211_is_nullfunc(hdr->frame_control))
> + bd->dpu_ne = 1;
> +
> } else {
> bd->sta_index = wcn->current_vif->self_sta_index;
> bd->dpu_desc_idx = wcn->current_vif->self_dpu_desc_index;
> + bd->dpu_ne = 1;
> }
>
> - bd->dpu_ne = encrypt;
> bd->tx_comp = tx_compl;
>
> buff_to_be((u32 *)bd, sizeof(*bd)/sizeof(u32));
> diff --git a/txrx.h b/txrx.h
> index 648c210..31bfbbb 100644
> --- a/txrx.h
> +++ b/txrx.h
> @@ -151,6 +151,6 @@ struct wcn36xx_tx_bd {
> int wcn36xx_rx_skb(struct wcn36xx *wcn, struct sk_buff *skb);
> void wcn36xx_prepare_tx_bd(struct wcn36xx_tx_bd *bd, u32 len, u32 header_len);
> void wcn36xx_fill_tx_bd(struct wcn36xx *wcn, struct wcn36xx_tx_bd *bd,
> - u8 broadcast, u8 encrypt, struct ieee80211_hdr *hdr,
> + u8 broadcast, struct ieee80211_hdr *hdr,
> bool tx_compl);
> #endif /* _TXRX_H_ */
> diff --git a/wcn36xx.h b/wcn36xx.h
> index 0d0ed0c..6d1a24a 100644
> --- a/wcn36xx.h
> +++ b/wcn36xx.h
> @@ -75,11 +75,6 @@ enum wcn36xx_debug_mask {
> buf, len, false); \
> } while (0)
>
> -enum wcn36xx_encryption_state {
> - WCN36XX_STA_KEY,
> - WCN36XX_BSS_KEY
> -};
> -
> static inline void buff_to_be(u32 *buf, size_t len)
> {
> int i;
> @@ -121,7 +116,6 @@ struct wcn36xx {
> u8 fw_version;
> u8 fw_minor;
> u8 fw_major;
> - enum wcn36xx_encryption_state en_state;
>
> /* extra byte for the NULL termination */
> u8 crm_version[WCN36XX_HAL_VERSION_LENGTH + 1];
> --
> 1.8.2.2
>
> _______________________________________________
> wcn36xx mailing list
> wcn36xx at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/wcn36xx
--
Best regards,
Eugene
More information about the wcn36xx
mailing list