mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
cfg80211: Add support for static WEP in the driver
Add support for drivers that implement static WEP internally, i.e. expose connection keys to the driver in connect flow and don't upload the keys after the connection. Signed-off-by: David Spinadel <[email protected]> Signed-off-by: Johannes Berg <[email protected]>
This commit is contained in:
parent
e0e2effff5
commit
b8676221f0
7 changed files with 24 additions and 9 deletions
|
|
@ -249,8 +249,8 @@ struct cfg80211_event {
|
|||
};
|
||||
|
||||
struct cfg80211_cached_keys {
|
||||
struct key_params params[4];
|
||||
u8 data[4][WLAN_KEY_LEN_WEP104];
|
||||
struct key_params params[CFG80211_MAX_WEP_KEYS];
|
||||
u8 data[CFG80211_MAX_WEP_KEYS][WLAN_KEY_LEN_WEP104];
|
||||
int def;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,8 @@ void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,
|
|||
cfg80211_hold_bss(bss_from_pub(bss));
|
||||
wdev->current_bss = bss_from_pub(bss);
|
||||
|
||||
cfg80211_upload_connect_keys(wdev);
|
||||
if (!(wdev->wiphy->flags & WIPHY_FLAG_HAS_STATIC_WEP))
|
||||
cfg80211_upload_connect_keys(wdev);
|
||||
|
||||
nl80211_send_ibss_bssid(wiphy_to_rdev(wdev->wiphy), dev, bssid,
|
||||
GFP_KERNEL);
|
||||
|
|
@ -296,7 +297,7 @@ int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev,
|
|||
ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL);
|
||||
if (!ck)
|
||||
return -ENOMEM;
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < CFG80211_MAX_WEP_KEYS; i++)
|
||||
ck->params[i].key = ck->data[i];
|
||||
}
|
||||
err = __cfg80211_join_ibss(rdev, wdev->netdev,
|
||||
|
|
|
|||
|
|
@ -726,7 +726,8 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
|
|||
|
||||
wdev->current_bss = bss_from_pub(bss);
|
||||
|
||||
cfg80211_upload_connect_keys(wdev);
|
||||
if (!(wdev->wiphy->flags & WIPHY_FLAG_HAS_STATIC_WEP))
|
||||
cfg80211_upload_connect_keys(wdev);
|
||||
|
||||
rcu_read_lock();
|
||||
country_ie = ieee80211_bss_get_ie(bss, WLAN_EID_COUNTRY);
|
||||
|
|
@ -1043,6 +1044,9 @@ int cfg80211_connect(struct cfg80211_registered_device *rdev,
|
|||
connect->crypto.ciphers_pairwise[0] = cipher;
|
||||
}
|
||||
}
|
||||
|
||||
connect->crypto.wep_keys = connkeys->params;
|
||||
connect->crypto.wep_tx_key = connkeys->def;
|
||||
} else {
|
||||
if (WARN_ON(connkeys))
|
||||
return -EINVAL;
|
||||
|
|
|
|||
|
|
@ -912,7 +912,7 @@ void cfg80211_upload_connect_keys(struct wireless_dev *wdev)
|
|||
if (!wdev->connect_keys)
|
||||
return;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (i = 0; i < CFG80211_MAX_WEP_KEYS; i++) {
|
||||
if (!wdev->connect_keys->params[i].cipher)
|
||||
continue;
|
||||
if (rdev_add_key(rdev, dev, i, false, NULL,
|
||||
|
|
|
|||
|
|
@ -415,7 +415,7 @@ static int __cfg80211_set_encryption(struct cfg80211_registered_device *rdev,
|
|||
GFP_KERNEL);
|
||||
if (!wdev->wext.keys)
|
||||
return -ENOMEM;
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < CFG80211_MAX_WEP_KEYS; i++)
|
||||
wdev->wext.keys->params[i].key =
|
||||
wdev->wext.keys->data[i];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev,
|
|||
ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL);
|
||||
if (!ck)
|
||||
return -ENOMEM;
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < CFG80211_MAX_WEP_KEYS; i++)
|
||||
ck->params[i].key = ck->data[i];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue