Skip to content

Commit

Permalink
[PATCH] ipw2200: ipw_wx_set_essid fix
Browse files Browse the repository at this point in the history
This patch cleanups the ipw_wx_set_essid code and forces a reassociation
when setting the essid to "any". I have tested this patch with iwconfig. It
makes ipw2200 compliant with all the cases mentioned in the iwconfig man
page. The commands

iwconfig iface essid any
iwconfig iface essid -- any
iwconfig iface essid off
iwconfig iface essid on

all seemed to work correctly. None of this worked before the patch.

Note, this patch treats

iwconfig iface essid
iwconfig iface essid ""

The same. It produces an error message: essid: Unknown host.
Since an essid of "" is not mentioned in the iwconfig man page.

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>
  • Loading branch information
Zhu Yi authored and John W. Linville committed Aug 29, 2006
1 parent c580f67 commit ab644b0
Showing 1 changed file with 17 additions and 22 deletions.
39 changes: 17 additions & 22 deletions drivers/net/wireless/ipw2200.c
Original file line number Diff line number Diff line change
Expand Up @@ -8837,28 +8837,23 @@ 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 = ""; /* ANY */
int length = 0;
mutex_lock(&priv->mutex);
if (wrqu->essid.flags && wrqu->essid.length) {
length = wrqu->essid.length - 1;
essid = extra;
}
if (length == 0) {
IPW_DEBUG_WX("Setting ESSID to ANY\n");
if ((priv->config & CFG_STATIC_ESSID) &&
!(priv->status & (STATUS_ASSOCIATED |
STATUS_ASSOCIATING))) {
IPW_DEBUG_ASSOC("Attempting to associate with new "
"parameters.\n");
priv->config &= ~CFG_STATIC_ESSID;
ipw_associate(priv);
}
mutex_unlock(&priv->mutex);
return 0;
}
char *essid;
int length;

mutex_lock(&priv->mutex);

if (!wrqu->essid.flags)
{
IPW_DEBUG_WX("Setting ESSID to ANY\n");
ipw_disassociate(priv);
priv->config &= ~CFG_STATIC_ESSID;
ipw_associate(priv);
mutex_unlock(&priv->mutex);
return 0;
}

length = min(length, IW_ESSID_MAX_SIZE);
length = min(wrqu->essid.length, IW_ESSID_MAX_SIZE);
essid = extra;

priv->config |= CFG_STATIC_ESSID;

Expand All @@ -8868,7 +8863,7 @@ static int ipw_wx_set_essid(struct net_device *dev,
return 0;
}

IPW_DEBUG_WX("Setting ESSID: '%s' (%d)\n", escape_essid(essid, length),
IPW_DEBUG_WX("Setting ESSID: '%s' (%d)\n", escape_essid(extra, length),
length);

priv->essid_len = length;
Expand Down

0 comments on commit ab644b0

Please sign in to comment.