Ignore this...screwed-up the subject...
Will post corrected version immediately...
John
On Fri, Feb 17, 2006 at 01:58:01PM -0500, John W. Linville wrote:
> The following changes since commit ab479995b191b4256183956c13caabb86331af8e:
> Linus Torvalds:
> Merge branch 'upstream-linus' of
> git://oss.oracle.com/home/sourcebo/git/ocfs2
>
> are found in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git
> upstream-fixes
>
> Dan Williams:
> wireless/atmel: fix setting TX key only in ENCODEEXT
> wireless/atmel: fix Open System authentication process bugs
>
> drivers/net/wireless/atmel.c | 98
> +++++++++++++++++++++++++-----------------
> 1 files changed, 59 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c
> index 98a76f1..dfc2401 100644
> --- a/drivers/net/wireless/atmel.c
> +++ b/drivers/net/wireless/atmel.c
> @@ -1872,7 +1872,7 @@ static int atmel_set_encodeext(struct ne
> struct atmel_private *priv = netdev_priv(dev);
> struct iw_point *encoding = &wrqu->encoding;
> struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
> - int idx, key_len;
> + int idx, key_len, alg = ext->alg, set_key = 1;
>
> /* Determine and validate the key index */
> idx = encoding->flags & IW_ENCODE_INDEX;
> @@ -1883,39 +1883,42 @@ static int atmel_set_encodeext(struct ne
> } else
> idx = priv->default_key;
>
> - if ((encoding->flags & IW_ENCODE_DISABLED) ||
> - ext->alg == IW_ENCODE_ALG_NONE) {
> - priv->wep_is_on = 0;
> - priv->encryption_level = 0;
> - priv->pairwise_cipher_suite = CIPHER_SUITE_NONE;
> - }
> + if (encoding->flags & IW_ENCODE_DISABLED)
> + alg = IW_ENCODE_ALG_NONE;
>
> - if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)
> + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
> priv->default_key = idx;
> + set_key = ext->key_len > 0 ? 1 : 0;
> + }
>
> - /* Set the requested key */
> - switch (ext->alg) {
> - case IW_ENCODE_ALG_NONE:
> - break;
> - case IW_ENCODE_ALG_WEP:
> - if (ext->key_len > 5) {
> - priv->wep_key_len[idx] = 13;
> - priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_128;
> - priv->encryption_level = 2;
> - } else if (ext->key_len > 0) {
> - priv->wep_key_len[idx] = 5;
> - priv->pairwise_cipher_suite = CIPHER_SUITE_WEP_64;
> - priv->encryption_level = 1;
> - } else {
> + if (set_key) {
> + /* Set the requested key first */
> + switch (alg) {
> + case IW_ENCODE_ALG_NONE:
> + priv->wep_is_on = 0;
> + priv->encryption_level = 0;
> + priv->pairwise_cipher_suite = CIPHER_SUITE_NONE;
> + break;
> + case IW_ENCODE_ALG_WEP:
> + if (ext->key_len > 5) {
> + priv->wep_key_len[idx] = 13;
> + priv->pairwise_cipher_suite =
> CIPHER_SUITE_WEP_128;
> + priv->encryption_level = 2;
> + } else if (ext->key_len > 0) {
> + priv->wep_key_len[idx] = 5;
> + priv->pairwise_cipher_suite =
> CIPHER_SUITE_WEP_64;
> + priv->encryption_level = 1;
> + } else {
> + return -EINVAL;
> + }
> + priv->wep_is_on = 1;
> + memset(priv->wep_keys[idx], 0, 13);
> + key_len = min ((int)ext->key_len,
> priv->wep_key_len[idx]);
> + memcpy(priv->wep_keys[idx], ext->key, key_len);
> + break;
> + default:
> return -EINVAL;
> }
> - priv->wep_is_on = 1;
> - memset(priv->wep_keys[idx], 0, 13);
> - key_len = min ((int)ext->key_len, priv->wep_key_len[idx]);
> - memcpy(priv->wep_keys[idx], ext->key, key_len);
> - break;
> - default:
> - return -EINVAL;
> }
>
> return -EINPROGRESS;
> @@ -3061,17 +3064,26 @@ static void authenticate(struct atmel_pr
> }
>
> if (status == C80211_MGMT_SC_Success && priv->wep_is_on) {
> + int should_associate = 0;
> /* WEP */
> if (trans_seq_no != priv->ExpectedAuthentTransactionSeqNum)
> return;
>
> - if (trans_seq_no == 0x0002 &&
> - auth->el_id == C80211_MGMT_ElementID_ChallengeText) {
> - send_authentication_request(priv, system,
> auth->chall_text, auth->chall_text_len);
> - return;
> + if (system == C80211_MGMT_AAN_OPENSYSTEM) {
> + if (trans_seq_no == 0x0002) {
> + should_associate = 1;
> + }
> + } else if (system == C80211_MGMT_AAN_SHAREDKEY) {
> + if (trans_seq_no == 0x0002 &&
> + auth->el_id == C80211_MGMT_ElementID_ChallengeText)
> {
> + send_authentication_request(priv, system,
> auth->chall_text, auth->chall_text_len);
> + return;
> + } else if (trans_seq_no == 0x0004) {
> + should_associate = 1;
> + }
> }
>
> - if (trans_seq_no == 0x0004) {
> + if (should_associate) {
> if(priv->station_was_associated) {
> atmel_enter_state(priv,
> STATION_STATE_REASSOCIATING);
> send_association_request(priv, 1);
> @@ -3084,11 +3096,13 @@ static void authenticate(struct atmel_pr
> }
> }
>
> - if (status == C80211_MGMT_SC_AuthAlgNotSupported) {
> + if (status == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG) {
> /* Do opensystem first, then try sharedkey */
> - if (system == C80211_MGMT_AAN_OPENSYSTEM) {
> + if (system == WLAN_AUTH_OPEN) {
> priv->CurrentAuthentTransactionSeqNum = 0x001;
> - send_authentication_request(priv,
> C80211_MGMT_AAN_SHAREDKEY, NULL, 0);
> + priv->exclude_unencrypted = 1;
> + send_authentication_request(priv, WLAN_AUTH_SHARED_KEY,
> NULL, 0);
> + return;
> } else if (priv->connect_to_any_BSS) {
> int bss_index;
>
> @@ -3439,10 +3453,13 @@ static void atmel_management_timer(u_lon
> priv->AuthenticationRequestRetryCnt = 0;
> restart_search(priv);
> } else {
> + int auth = C80211_MGMT_AAN_OPENSYSTEM;
> priv->AuthenticationRequestRetryCnt++;
> priv->CurrentAuthentTransactionSeqNum = 0x0001;
> mod_timer(&priv->management_timer, jiffies +
> MGMT_JIFFIES);
> - send_authentication_request(priv,
> C80211_MGMT_AAN_OPENSYSTEM, NULL, 0);
> + if (priv->wep_is_on && priv->exclude_unencrypted)
> + auth = C80211_MGMT_AAN_SHAREDKEY;
> + send_authentication_request(priv, auth, NULL, 0);
> }
> break;
>
> @@ -3541,12 +3558,15 @@ static void atmel_command_irq(struct atm
> priv->station_was_associated =
> priv->station_is_associated;
> atmel_enter_state(priv, STATION_STATE_READY);
> } else {
> + int auth = C80211_MGMT_AAN_OPENSYSTEM;
> priv->AuthenticationRequestRetryCnt = 0;
> atmel_enter_state(priv,
> STATION_STATE_AUTHENTICATING);
>
> mod_timer(&priv->management_timer, jiffies +
> MGMT_JIFFIES);
> priv->CurrentAuthentTransactionSeqNum = 0x0001;
> - send_authentication_request(priv,
> C80211_MGMT_AAN_SHAREDKEY, NULL, 0);
> + if (priv->wep_is_on &&
> priv->exclude_unencrypted)
> + auth = C80211_MGMT_AAN_SHAREDKEY;
> + send_authentication_request(priv, auth, NULL,
> 0);
> }
> return;
> }
> --
> John W. Linville
> [EMAIL PROTECTED]
--
John W. Linville
[EMAIL PROTECTED]
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html