staging/rtl8192e: Convert to lib80211_crypt_info
Convert rtllib to use lib80211_crypt_info. Signed-off-by: Sean MacLennan <seanm@seanm.ca> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
32c44cb5b9
commit
0ddcf5fdfa
|
@ -802,7 +802,7 @@ static int r8192_wx_set_enc(struct net_device *dev,
|
||||||
|
|
||||||
switch (wrqu->encoding.flags & IW_ENCODE_INDEX) {
|
switch (wrqu->encoding.flags & IW_ENCODE_INDEX) {
|
||||||
case 0:
|
case 0:
|
||||||
key_idx = ieee->tx_keyidx;
|
key_idx = ieee->crypt_info.tx_keyidx;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
key_idx = 0;
|
key_idx = 0;
|
||||||
|
|
|
@ -2188,14 +2188,10 @@ struct rtllib_device {
|
||||||
u8 ap_mac_addr[6];
|
u8 ap_mac_addr[6];
|
||||||
u16 pairwise_key_type;
|
u16 pairwise_key_type;
|
||||||
u16 group_key_type;
|
u16 group_key_type;
|
||||||
struct list_head crypt_deinit_list;
|
|
||||||
struct rtllib_crypt_data *crypt[NUM_WEP_KEYS];
|
|
||||||
|
|
||||||
int tx_keyidx; /* default TX key index (crypt[tx_keyidx]) */
|
struct lib80211_crypt_info crypt_info;
|
||||||
|
|
||||||
struct sw_cam_table swcamtable[TOTAL_CAM_ENTRY];
|
struct sw_cam_table swcamtable[TOTAL_CAM_ENTRY];
|
||||||
struct timer_list crypt_deinit_timer;
|
|
||||||
int crypt_quiesced;
|
|
||||||
|
|
||||||
int bcrx_sta_key; /* use individual keys to override default keys even
|
int bcrx_sta_key; /* use individual keys to override default keys even
|
||||||
* with RX of broad/multicast frames */
|
* with RX of broad/multicast frames */
|
||||||
|
|
||||||
|
|
|
@ -32,14 +32,14 @@ struct rtllib_crypto {
|
||||||
|
|
||||||
static struct rtllib_crypto *hcrypt;
|
static struct rtllib_crypto *hcrypt;
|
||||||
|
|
||||||
void rtllib_crypt_deinit_entries(struct rtllib_device *ieee,
|
void rtllib_crypt_deinit_entries(struct lib80211_crypt_info *info,
|
||||||
int force)
|
int force)
|
||||||
{
|
{
|
||||||
struct list_head *ptr, *n;
|
struct list_head *ptr, *n;
|
||||||
struct lib80211_crypt_data *entry;
|
struct lib80211_crypt_data *entry;
|
||||||
|
|
||||||
for (ptr = ieee->crypt_deinit_list.next, n = ptr->next;
|
for (ptr = info->crypt_deinit_list.next, n = ptr->next;
|
||||||
ptr != &ieee->crypt_deinit_list; ptr = n, n = ptr->next) {
|
ptr != &info->crypt_deinit_list; ptr = n, n = ptr->next) {
|
||||||
entry = list_entry(ptr, struct lib80211_crypt_data, list);
|
entry = list_entry(ptr, struct lib80211_crypt_data, list);
|
||||||
|
|
||||||
if (atomic_read(&entry->refcnt) != 0 && !force)
|
if (atomic_read(&entry->refcnt) != 0 && !force)
|
||||||
|
@ -56,23 +56,23 @@ EXPORT_SYMBOL(rtllib_crypt_deinit_entries);
|
||||||
|
|
||||||
void rtllib_crypt_deinit_handler(unsigned long data)
|
void rtllib_crypt_deinit_handler(unsigned long data)
|
||||||
{
|
{
|
||||||
struct rtllib_device *ieee = (struct rtllib_device *)data;
|
struct lib80211_crypt_info *info = (struct lib80211_crypt_info *)data;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&ieee->lock, flags);
|
spin_lock_irqsave(info->lock, flags);
|
||||||
rtllib_crypt_deinit_entries(ieee, 0);
|
rtllib_crypt_deinit_entries(info, 0);
|
||||||
if (!list_empty(&ieee->crypt_deinit_list)) {
|
if (!list_empty(&info->crypt_deinit_list)) {
|
||||||
printk(KERN_DEBUG "%s: entries remaining in delayed crypt "
|
printk(KERN_DEBUG "%s: entries remaining in delayed crypt "
|
||||||
"deletion list\n", ieee->dev->name);
|
"deletion list\n", info->name);
|
||||||
ieee->crypt_deinit_timer.expires = jiffies + HZ;
|
info->crypt_deinit_timer.expires = jiffies + HZ;
|
||||||
add_timer(&ieee->crypt_deinit_timer);
|
add_timer(&info->crypt_deinit_timer);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&ieee->lock, flags);
|
spin_unlock_irqrestore(info->lock, flags);
|
||||||
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rtllib_crypt_deinit_handler);
|
EXPORT_SYMBOL(rtllib_crypt_deinit_handler);
|
||||||
|
|
||||||
void rtllib_crypt_delayed_deinit(struct rtllib_device *ieee,
|
void rtllib_crypt_delayed_deinit(struct lib80211_crypt_info *info,
|
||||||
struct lib80211_crypt_data **crypt)
|
struct lib80211_crypt_data **crypt)
|
||||||
{
|
{
|
||||||
struct lib80211_crypt_data *tmp;
|
struct lib80211_crypt_data *tmp;
|
||||||
|
@ -88,13 +88,13 @@ void rtllib_crypt_delayed_deinit(struct rtllib_device *ieee,
|
||||||
* decrypt operations. Use a list of delayed deinits to avoid needing
|
* decrypt operations. Use a list of delayed deinits to avoid needing
|
||||||
* locking. */
|
* locking. */
|
||||||
|
|
||||||
spin_lock_irqsave(&ieee->lock, flags);
|
spin_lock_irqsave(info->lock, flags);
|
||||||
list_add(&tmp->list, &ieee->crypt_deinit_list);
|
list_add(&tmp->list, &info->crypt_deinit_list);
|
||||||
if (!timer_pending(&ieee->crypt_deinit_timer)) {
|
if (!timer_pending(&info->crypt_deinit_timer)) {
|
||||||
ieee->crypt_deinit_timer.expires = jiffies + HZ;
|
info->crypt_deinit_timer.expires = jiffies + HZ;
|
||||||
add_timer(&ieee->crypt_deinit_timer);
|
add_timer(&info->crypt_deinit_timer);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&ieee->lock, flags);
|
spin_unlock_irqrestore(info->lock, flags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rtllib_crypt_delayed_deinit);
|
EXPORT_SYMBOL(rtllib_crypt_delayed_deinit);
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@
|
||||||
int rtllib_register_crypto_ops(struct lib80211_crypto_ops *ops);
|
int rtllib_register_crypto_ops(struct lib80211_crypto_ops *ops);
|
||||||
int rtllib_unregister_crypto_ops(struct lib80211_crypto_ops *ops);
|
int rtllib_unregister_crypto_ops(struct lib80211_crypto_ops *ops);
|
||||||
struct lib80211_crypto_ops *rtllib_get_crypto_ops(const char *name);
|
struct lib80211_crypto_ops *rtllib_get_crypto_ops(const char *name);
|
||||||
void rtllib_crypt_deinit_entries(struct rtllib_device *, int);
|
void rtllib_crypt_deinit_entries(struct lib80211_crypt_info *info, int force);
|
||||||
void rtllib_crypt_deinit_handler(unsigned long);
|
void rtllib_crypt_deinit_handler(unsigned long data);
|
||||||
void rtllib_crypt_delayed_deinit(struct rtllib_device *ieee,
|
void rtllib_crypt_delayed_deinit(struct lib80211_crypt_info *info,
|
||||||
struct lib80211_crypt_data **crypt);
|
struct lib80211_crypt_data **crypt);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -137,10 +137,10 @@ struct net_device *alloc_rtllib(int sizeof_priv)
|
||||||
ieee->ieee802_1x = 1; /* Default to supporting 802.1x */
|
ieee->ieee802_1x = 1; /* Default to supporting 802.1x */
|
||||||
|
|
||||||
/* SAM Init here */
|
/* SAM Init here */
|
||||||
INIT_LIST_HEAD(&ieee->crypt_deinit_list);
|
INIT_LIST_HEAD(&ieee->crypt_info.crypt_deinit_list);
|
||||||
_setup_timer(&ieee->crypt_deinit_timer,
|
_setup_timer(&ieee->crypt_info.crypt_deinit_timer,
|
||||||
rtllib_crypt_deinit_handler,
|
rtllib_crypt_deinit_handler,
|
||||||
(unsigned long) ieee);
|
(unsigned long)&ieee->crypt_info);
|
||||||
ieee->rtllib_ap_sec_type = rtllib_ap_sec_type;
|
ieee->rtllib_ap_sec_type = rtllib_ap_sec_type;
|
||||||
|
|
||||||
spin_lock_init(&ieee->lock);
|
spin_lock_init(&ieee->lock);
|
||||||
|
@ -197,16 +197,18 @@ void free_rtllib(struct net_device *dev)
|
||||||
kfree(ieee->pHTInfo);
|
kfree(ieee->pHTInfo);
|
||||||
ieee->pHTInfo = NULL;
|
ieee->pHTInfo = NULL;
|
||||||
rtllib_softmac_free(ieee);
|
rtllib_softmac_free(ieee);
|
||||||
del_timer_sync(&ieee->crypt_deinit_timer);
|
|
||||||
rtllib_crypt_deinit_entries(ieee, 1);
|
/* SAM cleanup */
|
||||||
|
del_timer_sync(&ieee->crypt_info.crypt_deinit_timer);
|
||||||
|
rtllib_crypt_deinit_entries(&ieee->crypt_info, 1);
|
||||||
|
|
||||||
for (i = 0; i < NUM_WEP_KEYS; i++) {
|
for (i = 0; i < NUM_WEP_KEYS; i++) {
|
||||||
struct lib80211_crypt_data *crypt = ieee->crypt[i];
|
struct lib80211_crypt_data *crypt = ieee->crypt_info.crypt[i];
|
||||||
if (crypt) {
|
if (crypt) {
|
||||||
if (crypt->ops)
|
if (crypt->ops)
|
||||||
crypt->ops->deinit(crypt->priv);
|
crypt->ops->deinit(crypt->priv);
|
||||||
kfree(crypt);
|
kfree(crypt);
|
||||||
ieee->crypt[i] = NULL;
|
ieee->crypt_info.crypt[i] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1019,7 +1019,7 @@ static int rtllib_rx_get_crypt(struct rtllib_device *ieee, struct sk_buff *skb,
|
||||||
if (skb->len >= hdrlen + 3)
|
if (skb->len >= hdrlen + 3)
|
||||||
idx = skb->data[hdrlen + 3] >> 6;
|
idx = skb->data[hdrlen + 3] >> 6;
|
||||||
|
|
||||||
*crypt = ieee->crypt[idx];
|
*crypt = ieee->crypt_info.crypt[idx];
|
||||||
/* allow NULL decrypt to indicate an station specific override
|
/* allow NULL decrypt to indicate an station specific override
|
||||||
* for default encryption */
|
* for default encryption */
|
||||||
if (*crypt && ((*crypt)->ops == NULL ||
|
if (*crypt && ((*crypt)->ops == NULL ||
|
||||||
|
|
|
@ -871,7 +871,7 @@ static struct sk_buff *rtllib_probe_resp(struct rtllib_device *ieee, u8 *dest)
|
||||||
} else
|
} else
|
||||||
erp_len = 0;
|
erp_len = 0;
|
||||||
|
|
||||||
crypt = ieee->crypt[ieee->tx_keyidx];
|
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||||
encrypt = ieee->host_encrypt && crypt && crypt->ops &&
|
encrypt = ieee->host_encrypt && crypt && crypt->ops &&
|
||||||
((0 == strcmp(crypt->ops->name, "WEP") || wpa_ie_len));
|
((0 == strcmp(crypt->ops->name, "WEP") || wpa_ie_len));
|
||||||
if (ieee->pHTInfo->bCurrentHTSupport) {
|
if (ieee->pHTInfo->bCurrentHTSupport) {
|
||||||
|
@ -923,7 +923,7 @@ static struct sk_buff *rtllib_probe_resp(struct rtllib_device *ieee, u8 *dest)
|
||||||
cpu_to_le16((beacon_buf->capability |=
|
cpu_to_le16((beacon_buf->capability |=
|
||||||
WLAN_CAPABILITY_SHORT_SLOT_TIME));
|
WLAN_CAPABILITY_SHORT_SLOT_TIME));
|
||||||
|
|
||||||
crypt = ieee->crypt[ieee->tx_keyidx];
|
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||||
if (encrypt)
|
if (encrypt)
|
||||||
beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
|
beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
|
||||||
|
|
||||||
|
@ -1013,7 +1013,7 @@ static struct sk_buff *rtllib_assoc_resp(struct rtllib_device *ieee, u8 *dest)
|
||||||
cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT_TIME);
|
cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT_TIME);
|
||||||
|
|
||||||
if (ieee->host_encrypt)
|
if (ieee->host_encrypt)
|
||||||
crypt = ieee->crypt[ieee->tx_keyidx];
|
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||||
else
|
else
|
||||||
crypt = NULL;
|
crypt = NULL;
|
||||||
|
|
||||||
|
@ -1191,7 +1191,7 @@ inline struct sk_buff *rtllib_association_req(struct rtllib_network *beacon,
|
||||||
unsigned int turbo_info_len = beacon->Turbo_Enable ? 9 : 0;
|
unsigned int turbo_info_len = beacon->Turbo_Enable ? 9 : 0;
|
||||||
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
crypt = ieee->crypt[ieee->tx_keyidx];
|
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||||
if (crypt != NULL)
|
if (crypt != NULL)
|
||||||
encrypt = ieee->host_encrypt && crypt && crypt->ops &&
|
encrypt = ieee->host_encrypt && crypt && crypt->ops &&
|
||||||
((0 == strcmp(crypt->ops->name, "WEP") ||
|
((0 == strcmp(crypt->ops->name, "WEP") ||
|
||||||
|
@ -3367,7 +3367,7 @@ static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
|
||||||
param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) {
|
param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) {
|
||||||
if (param->u.crypt.idx >= NUM_WEP_KEYS)
|
if (param->u.crypt.idx >= NUM_WEP_KEYS)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
crypt = &ieee->crypt[param->u.crypt.idx];
|
crypt = &ieee->crypt_info.crypt[param->u.crypt.idx];
|
||||||
} else {
|
} else {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -3377,7 +3377,7 @@ static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
|
||||||
sec.enabled = 0;
|
sec.enabled = 0;
|
||||||
sec.level = SEC_LEVEL_0;
|
sec.level = SEC_LEVEL_0;
|
||||||
sec.flags |= SEC_ENABLED | SEC_LEVEL;
|
sec.flags |= SEC_ENABLED | SEC_LEVEL;
|
||||||
rtllib_crypt_delayed_deinit(ieee, crypt);
|
rtllib_crypt_delayed_deinit(&ieee->crypt_info, crypt);
|
||||||
}
|
}
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
@ -3410,7 +3410,7 @@ static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
|
||||||
if (*crypt == NULL || (*crypt)->ops != ops) {
|
if (*crypt == NULL || (*crypt)->ops != ops) {
|
||||||
struct lib80211_crypt_data *new_crypt;
|
struct lib80211_crypt_data *new_crypt;
|
||||||
|
|
||||||
rtllib_crypt_delayed_deinit(ieee, crypt);
|
rtllib_crypt_delayed_deinit(&ieee->crypt_info, crypt);
|
||||||
|
|
||||||
new_crypt = (struct lib80211_crypt_data *)
|
new_crypt = (struct lib80211_crypt_data *)
|
||||||
kmalloc(sizeof(*new_crypt), GFP_KERNEL);
|
kmalloc(sizeof(*new_crypt), GFP_KERNEL);
|
||||||
|
@ -3446,7 +3446,7 @@ static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
|
||||||
|
|
||||||
skip_host_crypt:
|
skip_host_crypt:
|
||||||
if (param->u.crypt.set_tx) {
|
if (param->u.crypt.set_tx) {
|
||||||
ieee->tx_keyidx = param->u.crypt.idx;
|
ieee->crypt_info.tx_keyidx = param->u.crypt.idx;
|
||||||
sec.active_key = param->u.crypt.idx;
|
sec.active_key = param->u.crypt.idx;
|
||||||
sec.flags |= SEC_ACTIVE_KEY;
|
sec.flags |= SEC_ACTIVE_KEY;
|
||||||
} else
|
} else
|
||||||
|
@ -3565,7 +3565,7 @@ u8 rtllib_ap_sec_type(struct rtllib_device *ieee)
|
||||||
struct lib80211_crypt_data *crypt;
|
struct lib80211_crypt_data *crypt;
|
||||||
int encrypt;
|
int encrypt;
|
||||||
|
|
||||||
crypt = ieee->crypt[ieee->tx_keyidx];
|
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||||
encrypt = (ieee->current_network.capability & WLAN_CAPABILITY_PRIVACY)
|
encrypt = (ieee->current_network.capability & WLAN_CAPABILITY_PRIVACY)
|
||||||
|| (ieee->host_encrypt && crypt && crypt->ops &&
|
|| (ieee->host_encrypt && crypt && crypt->ops &&
|
||||||
(0 == strcmp(crypt->ops->name, "WEP")));
|
(0 == strcmp(crypt->ops->name, "WEP")));
|
||||||
|
|
|
@ -182,7 +182,7 @@ int rtllib_encrypt_fragment(struct rtllib_device *ieee, struct sk_buff *frag,
|
||||||
struct lib80211_crypt_data *crypt = NULL;
|
struct lib80211_crypt_data *crypt = NULL;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
crypt = ieee->crypt[ieee->tx_keyidx];
|
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||||
|
|
||||||
if (!(crypt && crypt->ops)) {
|
if (!(crypt && crypt->ops)) {
|
||||||
printk(KERN_INFO "=========>%s(), crypt is null\n", __func__);
|
printk(KERN_INFO "=========>%s(), crypt is null\n", __func__);
|
||||||
|
@ -645,7 +645,7 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
skb->priority = rtllib_classify(skb, IsAmsdu);
|
skb->priority = rtllib_classify(skb, IsAmsdu);
|
||||||
crypt = ieee->crypt[ieee->tx_keyidx];
|
crypt = ieee->crypt_info.crypt[ieee->crypt_info.tx_keyidx];
|
||||||
encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) &&
|
encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) &&
|
||||||
ieee->host_encrypt && crypt && crypt->ops;
|
ieee->host_encrypt && crypt && crypt->ops;
|
||||||
if (!encrypt && ieee->ieee802_1x &&
|
if (!encrypt && ieee->ieee802_1x &&
|
||||||
|
|
|
@ -318,28 +318,28 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
||||||
key_provided = 1;
|
key_provided = 1;
|
||||||
} else {
|
} else {
|
||||||
key_provided = 0;
|
key_provided = 0;
|
||||||
key = ieee->tx_keyidx;
|
key = ieee->crypt_info.tx_keyidx;
|
||||||
}
|
}
|
||||||
|
|
||||||
RTLLIB_DEBUG_WX("Key: %d [%s]\n", key, key_provided ?
|
RTLLIB_DEBUG_WX("Key: %d [%s]\n", key, key_provided ?
|
||||||
"provided" : "default");
|
"provided" : "default");
|
||||||
crypt = &ieee->crypt[key];
|
crypt = &ieee->crypt_info.crypt[key];
|
||||||
if (erq->flags & IW_ENCODE_DISABLED) {
|
if (erq->flags & IW_ENCODE_DISABLED) {
|
||||||
if (key_provided && *crypt) {
|
if (key_provided && *crypt) {
|
||||||
RTLLIB_DEBUG_WX("Disabling encryption on key %d.\n",
|
RTLLIB_DEBUG_WX("Disabling encryption on key %d.\n",
|
||||||
key);
|
key);
|
||||||
rtllib_crypt_delayed_deinit(ieee, crypt);
|
rtllib_crypt_delayed_deinit(&ieee->crypt_info, crypt);
|
||||||
} else
|
} else
|
||||||
RTLLIB_DEBUG_WX("Disabling encryption.\n");
|
RTLLIB_DEBUG_WX("Disabling encryption.\n");
|
||||||
|
|
||||||
/* Check all the keys to see if any are still configured,
|
/* Check all the keys to see if any are still configured,
|
||||||
* and if no key index was provided, de-init them all */
|
* and if no key index was provided, de-init them all */
|
||||||
for (i = 0; i < NUM_WEP_KEYS; i++) {
|
for (i = 0; i < NUM_WEP_KEYS; i++) {
|
||||||
if (ieee->crypt[i] != NULL) {
|
if (ieee->crypt_info.crypt[i] != NULL) {
|
||||||
if (key_provided)
|
if (key_provided)
|
||||||
break;
|
break;
|
||||||
rtllib_crypt_delayed_deinit(ieee,
|
rtllib_crypt_delayed_deinit(&ieee->crypt_info,
|
||||||
&ieee->crypt[i]);
|
&ieee->crypt_info.crypt[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
||||||
strcmp((*crypt)->ops->name, "WEP") != 0) {
|
strcmp((*crypt)->ops->name, "WEP") != 0) {
|
||||||
/* changing to use WEP; deinit previously used algorithm
|
/* changing to use WEP; deinit previously used algorithm
|
||||||
* on this key */
|
* on this key */
|
||||||
rtllib_crypt_delayed_deinit(ieee, crypt);
|
rtllib_crypt_delayed_deinit(&ieee->crypt_info, crypt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*crypt == NULL) {
|
if (*crypt == NULL) {
|
||||||
|
@ -411,7 +411,7 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
||||||
* explicitely set */
|
* explicitely set */
|
||||||
if (key == sec.active_key)
|
if (key == sec.active_key)
|
||||||
sec.flags |= SEC_ACTIVE_KEY;
|
sec.flags |= SEC_ACTIVE_KEY;
|
||||||
ieee->tx_keyidx = key;
|
ieee->crypt_info.tx_keyidx = key;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
len = (*crypt)->ops->get_key(sec.keys[key], WEP_KEY_LEN,
|
len = (*crypt)->ops->get_key(sec.keys[key], WEP_KEY_LEN,
|
||||||
|
@ -434,7 +434,7 @@ int rtllib_wx_set_encode(struct rtllib_device *ieee,
|
||||||
if (key_provided) {
|
if (key_provided) {
|
||||||
RTLLIB_DEBUG_WX(
|
RTLLIB_DEBUG_WX(
|
||||||
"Setting key %d to default Tx key.\n", key);
|
"Setting key %d to default Tx key.\n", key);
|
||||||
ieee->tx_keyidx = key;
|
ieee->crypt_info.tx_keyidx = key;
|
||||||
sec.active_key = key;
|
sec.active_key = key;
|
||||||
sec.flags |= SEC_ACTIVE_KEY;
|
sec.flags |= SEC_ACTIVE_KEY;
|
||||||
}
|
}
|
||||||
|
@ -490,9 +490,9 @@ int rtllib_wx_get_encode(struct rtllib_device *ieee,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
key--;
|
key--;
|
||||||
} else {
|
} else {
|
||||||
key = ieee->tx_keyidx;
|
key = ieee->crypt_info.tx_keyidx;
|
||||||
}
|
}
|
||||||
crypt = ieee->crypt[key];
|
crypt = ieee->crypt_info.crypt[key];
|
||||||
|
|
||||||
erq->flags = key + 1;
|
erq->flags = key + 1;
|
||||||
|
|
||||||
|
@ -538,17 +538,17 @@ int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
idx--;
|
idx--;
|
||||||
} else{
|
} else{
|
||||||
idx = ieee->tx_keyidx;
|
idx = ieee->crypt_info.tx_keyidx;
|
||||||
}
|
}
|
||||||
if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {
|
if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {
|
||||||
crypt = &ieee->crypt[idx];
|
crypt = &ieee->crypt_info.crypt[idx];
|
||||||
group_key = 1;
|
group_key = 1;
|
||||||
} else {
|
} else {
|
||||||
/* some Cisco APs use idx>0 for unicast in dynamic WEP */
|
/* some Cisco APs use idx>0 for unicast in dynamic WEP */
|
||||||
if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP)
|
if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (ieee->iw_mode == IW_MODE_INFRA)
|
if (ieee->iw_mode == IW_MODE_INFRA)
|
||||||
crypt = &ieee->crypt[idx];
|
crypt = &ieee->crypt_info.crypt[idx];
|
||||||
else
|
else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -557,10 +557,10 @@ int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
|
||||||
if ((encoding->flags & IW_ENCODE_DISABLED) ||
|
if ((encoding->flags & IW_ENCODE_DISABLED) ||
|
||||||
ext->alg == IW_ENCODE_ALG_NONE) {
|
ext->alg == IW_ENCODE_ALG_NONE) {
|
||||||
if (*crypt)
|
if (*crypt)
|
||||||
rtllib_crypt_delayed_deinit(ieee, crypt);
|
rtllib_crypt_delayed_deinit(&ieee->crypt_info, crypt);
|
||||||
|
|
||||||
for (i = 0; i < NUM_WEP_KEYS; i++) {
|
for (i = 0; i < NUM_WEP_KEYS; i++) {
|
||||||
if (ieee->crypt[i] != NULL)
|
if (ieee->crypt_info.crypt[i] != NULL)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == NUM_WEP_KEYS) {
|
if (i == NUM_WEP_KEYS) {
|
||||||
|
@ -613,7 +613,7 @@ int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
|
||||||
if (*crypt == NULL || (*crypt)->ops != ops) {
|
if (*crypt == NULL || (*crypt)->ops != ops) {
|
||||||
struct lib80211_crypt_data *new_crypt;
|
struct lib80211_crypt_data *new_crypt;
|
||||||
|
|
||||||
rtllib_crypt_delayed_deinit(ieee, crypt);
|
rtllib_crypt_delayed_deinit(&ieee->crypt_info, crypt);
|
||||||
|
|
||||||
new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL);
|
new_crypt = kzalloc(sizeof(*new_crypt), GFP_KERNEL);
|
||||||
if (new_crypt == NULL) {
|
if (new_crypt == NULL) {
|
||||||
|
@ -642,7 +642,7 @@ int rtllib_wx_set_encode_ext(struct rtllib_device *ieee,
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
|
if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
|
||||||
ieee->tx_keyidx = idx;
|
ieee->crypt_info.tx_keyidx = idx;
|
||||||
sec.active_key = idx;
|
sec.active_key = idx;
|
||||||
sec.flags |= SEC_ACTIVE_KEY;
|
sec.flags |= SEC_ACTIVE_KEY;
|
||||||
}
|
}
|
||||||
|
@ -696,14 +696,14 @@ int rtllib_wx_get_encode_ext(struct rtllib_device *ieee,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
idx--;
|
idx--;
|
||||||
} else {
|
} else {
|
||||||
idx = ieee->tx_keyidx;
|
idx = ieee->crypt_info.tx_keyidx;
|
||||||
}
|
}
|
||||||
if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) &&
|
if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) &&
|
||||||
(ext->alg != IW_ENCODE_ALG_WEP))
|
(ext->alg != IW_ENCODE_ALG_WEP))
|
||||||
if (idx != 0 || (ieee->iw_mode != IW_MODE_INFRA))
|
if (idx != 0 || (ieee->iw_mode != IW_MODE_INFRA))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
crypt = ieee->crypt[idx];
|
crypt = ieee->crypt_info.crypt[idx];
|
||||||
|
|
||||||
encoding->flags = idx + 1;
|
encoding->flags = idx + 1;
|
||||||
memset(ext, 0, sizeof(*ext));
|
memset(ext, 0, sizeof(*ext));
|
||||||
|
|
Loading…
Reference in a new issue