aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/libertas/dev.h1
-rw-r--r--drivers/net/wireless/libertas/wext.c26
2 files changed, 24 insertions, 3 deletions
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h
index acb889e25900..f6f3753da303 100644
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
@@ -58,6 +58,7 @@ struct lbs_802_11_security {
58 u8 WPA2enabled; 58 u8 WPA2enabled;
59 u8 wep_enabled; 59 u8 wep_enabled;
60 u8 auth_mode; 60 u8 auth_mode;
61 u32 key_mgmt;
61}; 62};
62 63
63/** Current Basic Service Set State Structure */ 64/** Current Basic Service Set State Structure */
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
index 11297dcf9fc3..6ebdd7f161f1 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -1598,8 +1598,20 @@ static int lbs_set_encodeext(struct net_device *dev,
1598 } 1598 }
1599 1599
1600out: 1600out:
1601 if (ret == 0) { /* key installation is time critical: postpone not! */ 1601 if (ret == 0) {
1602 lbs_do_association_work(priv); 1602 /* 802.1x and WPA rekeying must happen as quickly as possible,
1603 * especially during the 4-way handshake; thus if in
1604 * infrastructure mode, and either (a) 802.1x is enabled or
1605 * (b) WPA is being used, set the key right away.
1606 */
1607 if (assoc_req->mode == IW_MODE_INFRA &&
1608 ((assoc_req->secinfo.key_mgmt & IW_AUTH_KEY_MGMT_802_1X) ||
1609 (assoc_req->secinfo.key_mgmt & IW_AUTH_KEY_MGMT_PSK) ||
1610 assoc_req->secinfo.WPAenabled ||
1611 assoc_req->secinfo.WPA2enabled)) {
1612 lbs_do_association_work(priv);
1613 } else
1614 lbs_postpone_association_work(priv);
1603 } else { 1615 } else {
1604 lbs_cancel_association_work(priv); 1616 lbs_cancel_association_work(priv);
1605 } 1617 }
@@ -1707,13 +1719,17 @@ static int lbs_set_auth(struct net_device *dev,
1707 case IW_AUTH_TKIP_COUNTERMEASURES: 1719 case IW_AUTH_TKIP_COUNTERMEASURES:
1708 case IW_AUTH_CIPHER_PAIRWISE: 1720 case IW_AUTH_CIPHER_PAIRWISE:
1709 case IW_AUTH_CIPHER_GROUP: 1721 case IW_AUTH_CIPHER_GROUP:
1710 case IW_AUTH_KEY_MGMT:
1711 case IW_AUTH_DROP_UNENCRYPTED: 1722 case IW_AUTH_DROP_UNENCRYPTED:
1712 /* 1723 /*
1713 * libertas does not use these parameters 1724 * libertas does not use these parameters
1714 */ 1725 */
1715 break; 1726 break;
1716 1727
1728 case IW_AUTH_KEY_MGMT:
1729 assoc_req->secinfo.key_mgmt = dwrq->value;
1730 updated = 1;
1731 break;
1732
1717 case IW_AUTH_WPA_VERSION: 1733 case IW_AUTH_WPA_VERSION:
1718 if (dwrq->value & IW_AUTH_WPA_VERSION_DISABLED) { 1734 if (dwrq->value & IW_AUTH_WPA_VERSION_DISABLED) {
1719 assoc_req->secinfo.WPAenabled = 0; 1735 assoc_req->secinfo.WPAenabled = 0;
@@ -1793,6 +1809,10 @@ static int lbs_get_auth(struct net_device *dev,
1793 lbs_deb_enter(LBS_DEB_WEXT); 1809 lbs_deb_enter(LBS_DEB_WEXT);
1794 1810
1795 switch (dwrq->flags & IW_AUTH_INDEX) { 1811 switch (dwrq->flags & IW_AUTH_INDEX) {
1812 case IW_AUTH_KEY_MGMT:
1813 dwrq->value = priv->secinfo.key_mgmt;
1814 break;
1815
1796 case IW_AUTH_WPA_VERSION: 1816 case IW_AUTH_WPA_VERSION:
1797 dwrq->value = 0; 1817 dwrq->value = 0;
1798 if (priv->secinfo.WPAenabled) 1818 if (priv->secinfo.WPAenabled)