]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
[PATCH] ipw2200: Reassociate even if set the same essid.
authorZhu Yi <yi.zhu@intel.com>
Mon, 21 Aug 2006 03:37:26 +0000 (11:37 +0800)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 29 Aug 2006 21:06:32 +0000 (17:06 -0400)
This patch traps the case when the essid is being set to its
current value. If the essid is being set again and we are already
associated, chances are some other parameters have also been altered.
I think it is safer to do the re-association for this case.

Signed-off-by: Bill Moss <bmoss@clemson.edu>
Signed-off-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ipw2200.c

index 27e87d1b9f447bf9cd12cdc03f82ae76ffceb939..e929f880dea09c4bed2b41c05f7e6958e387cda4 100644 (file)
@@ -8837,7 +8837,6 @@ static int ipw_wx_set_essid(struct net_device *dev,
                            union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
-        char *essid;
         int length;
 
         mutex_lock(&priv->mutex);
@@ -8852,12 +8851,14 @@ static int ipw_wx_set_essid(struct net_device *dev,
                 return 0;
         }
 
-       length = min(wrqu->essid.length, IW_ESSID_MAX_SIZE);
-       essid = extra;
+       length = min((int)wrqu->essid.length, IW_ESSID_MAX_SIZE);
+       if (!extra[length - 1])
+               length--;
 
        priv->config |= CFG_STATIC_ESSID;
 
-       if (priv->essid_len == length && !memcmp(priv->essid, extra, length)) {
+       if (priv->essid_len == length && !memcmp(priv->essid, extra, length)
+           && (priv->status & (STATUS_ASSOCIATED | STATUS_ASSOCIATING))) {
                IPW_DEBUG_WX("ESSID set to current ESSID.\n");
                mutex_unlock(&priv->mutex);
                return 0;
@@ -8867,7 +8868,7 @@ static int ipw_wx_set_essid(struct net_device *dev,
                     length);
 
        priv->essid_len = length;
-       memcpy(priv->essid, essid, priv->essid_len);
+       memcpy(priv->essid, extra, priv->essid_len);
 
        /* Network configuration changed -- force [re]association */
        IPW_DEBUG_ASSOC("[re]association triggered due to ESSID change.\n");