mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-17 14:30:00 +00:00
libertas: add auto auth mode feature
Auto auth mode is enabled by default. If user doesn't specify the auth mode, while association driver will first try with open mode and then with shared key mode. If user specifies an auth mode, auto auth is disabled and driver will not try association with another auth mode. Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
e1572c5eec
commit
921ca03c8f
@ -31,6 +31,9 @@ u8 lbs_bg_rates[MAX_RATES] =
|
||||
0x00, 0x00 };
|
||||
|
||||
|
||||
static int assoc_helper_wep_keys(struct lbs_private *priv,
|
||||
struct assoc_request *assoc_req);
|
||||
|
||||
/**
|
||||
* @brief This function finds common rates between rates and card rates.
|
||||
*
|
||||
@ -610,7 +613,7 @@ static int lbs_assoc_post(struct lbs_private *priv,
|
||||
|
||||
if (status_code) {
|
||||
lbs_mac_event_disconnected(priv);
|
||||
ret = -1;
|
||||
ret = status_code;
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -813,7 +816,24 @@ static int lbs_try_associate(struct lbs_private *priv,
|
||||
goto out;
|
||||
|
||||
ret = lbs_associate(priv, assoc_req, CMD_802_11_ASSOCIATE);
|
||||
/* If the association fails with current auth mode, let's
|
||||
* try by changing the auth mode
|
||||
*/
|
||||
if ((priv->authtype_auto) &&
|
||||
(ret == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG) &&
|
||||
(assoc_req->secinfo.wep_enabled) &&
|
||||
(priv->connect_status != LBS_CONNECTED)) {
|
||||
if (priv->secinfo.auth_mode == IW_AUTH_ALG_OPEN_SYSTEM)
|
||||
priv->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
|
||||
else
|
||||
priv->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
|
||||
if (!assoc_helper_wep_keys(priv, assoc_req))
|
||||
ret = lbs_associate(priv, assoc_req,
|
||||
CMD_802_11_ASSOCIATE);
|
||||
}
|
||||
|
||||
if (ret)
|
||||
ret = -1;
|
||||
out:
|
||||
lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret);
|
||||
return ret;
|
||||
|
@ -133,6 +133,7 @@ struct lbs_private {
|
||||
u8 wpa_ie_len;
|
||||
u16 wep_tx_keyidx;
|
||||
struct enc_key wep_keys[4];
|
||||
u8 authtype_auto;
|
||||
|
||||
/* Wake On LAN */
|
||||
uint32_t wol_criteria;
|
||||
|
@ -835,6 +835,7 @@ static int lbs_init_adapter(struct lbs_private *priv)
|
||||
priv->is_auto_deep_sleep_enabled = 0;
|
||||
priv->wakeup_dev_required = 0;
|
||||
init_waitqueue_head(&priv->ds_awake_q);
|
||||
priv->authtype_auto = 1;
|
||||
|
||||
mutex_init(&priv->lock);
|
||||
|
||||
|
@ -1440,8 +1440,10 @@ static int lbs_set_encode(struct net_device *dev,
|
||||
set_bit(ASSOC_FLAG_WEP_TX_KEYIDX, &assoc_req->flags);
|
||||
|
||||
if (dwrq->flags & IW_ENCODE_RESTRICTED) {
|
||||
priv->authtype_auto = 0;
|
||||
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
|
||||
} else if (dwrq->flags & IW_ENCODE_OPEN) {
|
||||
priv->authtype_auto = 0;
|
||||
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
|
||||
}
|
||||
|
||||
@ -1620,8 +1622,10 @@ static int lbs_set_encodeext(struct net_device *dev,
|
||||
goto out;
|
||||
|
||||
if (dwrq->flags & IW_ENCODE_RESTRICTED) {
|
||||
priv->authtype_auto = 0;
|
||||
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
|
||||
} else if (dwrq->flags & IW_ENCODE_OPEN) {
|
||||
priv->authtype_auto = 0;
|
||||
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user