iwconfig was showing incorrect status messages when disassociated.
Patch fixes this by always checking for association status in
ioctl calls for getting ap address.
Signed-off-by: Abhijeet Kolekar <[email protected]>
---
net/mac80211/wext.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
index c2e2378..1a35562 100644
--- a/net/mac80211/wext.c
+++ b/net/mac80211/wext.c
@@ -501,9 +501,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
sdata = IEEE80211_DEV_TO_SUB_IF(dev);
if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
- ap_addr->sa_family = ARPHRD_ETHER;
- memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
- return 0;
+ if (sdata->u.sta.state == IEEE80211_ASSOCIATED) {
+ ap_addr->sa_family = ARPHRD_ETHER;
+ memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
+ return 0;
+ } else {
+ memset(&ap_addr->sa_data, 0, ETH_ALEN);
+ return 0;
+ }
} else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
ap_addr->sa_family = ARPHRD_ETHER;
memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);
--
1.5.2.5
On Fri, 2008-05-23 at 10:15 -0700, Abhijeet Kolekar wrote:
> iwconfig was showing incorrect status messages when disassociated.
> Patch fixes this by always checking for association status in
> ioctl calls for getting ap address.
>
> Signed-off-by: Abhijeet Kolekar <[email protected]>
I may not remember correctly, but I think you need to also report the
BSSID being associated with during assoc & auth stages with WEXT. So
the right check here is to return nothing if _disassocated_, but
otherwise return the BSSID that's currently pending or associated with.
Dan
> ---
> net/mac80211/wext.c | 11 ++++++++---
> 1 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
> index c2e2378..1a35562 100644
> --- a/net/mac80211/wext.c
> +++ b/net/mac80211/wext.c
> @@ -501,9 +501,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
> sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
> sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
> - ap_addr->sa_family = ARPHRD_ETHER;
> - memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
> - return 0;
> + if (sdata->u.sta.state == IEEE80211_ASSOCIATED) {
> + ap_addr->sa_family = ARPHRD_ETHER;
> + memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
> + return 0;
> + } else {
> + memset(&ap_addr->sa_data, 0, ETH_ALEN);
> + return 0;
> + }
> } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
> ap_addr->sa_family = ARPHRD_ETHER;
> memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);
On Fri, 2008-05-23 at 10:44 -0700, Abhijeet Kolekar wrote:
> On Fri, 2008-23-05 at 13:39 -0400, Dan Williams wrote:
> > On Fri, 2008-05-23 at 10:15 -0700, Abhijeet Kolekar wrote:
> > > iwconfig was showing incorrect status messages when disassociated.
> > > Patch fixes this by always checking for association status in
> > > ioctl calls for getting ap address.
> > >
> > > Signed-off-by: Abhijeet Kolekar <[email protected]>
> >
> > I may not remember correctly, but I think you need to also report the
> > BSSID being associated with during assoc & auth stages with WEXT. So
> > the right check here is to return nothing if _disassocated_, but
> > otherwise return the BSSID that's currently pending or associated with.
> >
> > Dan
> One question though, Do we need to report similar things with essid or
> WEXT will always return the essid regardless of the state.
I lied; ignore me. Patch is good.
Acked-by: Dan Williams <[email protected]>
> >
> > > ---
> > > net/mac80211/wext.c | 11 ++++++++---
> > > 1 files changed, 8 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
> > > index c2e2378..1a35562 100644
> > > --- a/net/mac80211/wext.c
> > > +++ b/net/mac80211/wext.c
> > > @@ -501,9 +501,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
> > > sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> > > if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
> > > sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
> > > - ap_addr->sa_family = ARPHRD_ETHER;
> > > - memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
> > > - return 0;
> > > + if (sdata->u.sta.state == IEEE80211_ASSOCIATED) {
> > > + ap_addr->sa_family = ARPHRD_ETHER;
> > > + memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
> > > + return 0;
> > > + } else {
> > > + memset(&ap_addr->sa_data, 0, ETH_ALEN);
> > > + return 0;
> > > + }
> > > } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
> > > ap_addr->sa_family = ARPHRD_ETHER;
> > > memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);
> >
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, 2008-23-05 at 13:39 -0400, Dan Williams wrote:
> On Fri, 2008-05-23 at 10:15 -0700, Abhijeet Kolekar wrote:
> > iwconfig was showing incorrect status messages when disassociated.
> > Patch fixes this by always checking for association status in
> > ioctl calls for getting ap address.
> >
> > Signed-off-by: Abhijeet Kolekar <[email protected]>
>
> I may not remember correctly, but I think you need to also report the
> BSSID being associated with during assoc & auth stages with WEXT. So
> the right check here is to return nothing if _disassocated_, but
> otherwise return the BSSID that's currently pending or associated with.
>
> Dan
One question though, Do we need to report similar things with essid or
WEXT will always return the essid regardless of the state.
>
> > ---
> > net/mac80211/wext.c | 11 ++++++++---
> > 1 files changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
> > index c2e2378..1a35562 100644
> > --- a/net/mac80211/wext.c
> > +++ b/net/mac80211/wext.c
> > @@ -501,9 +501,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev,
> > sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> > if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
> > sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
> > - ap_addr->sa_family = ARPHRD_ETHER;
> > - memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
> > - return 0;
> > + if (sdata->u.sta.state == IEEE80211_ASSOCIATED) {
> > + ap_addr->sa_family = ARPHRD_ETHER;
> > + memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
> > + return 0;
> > + } else {
> > + memset(&ap_addr->sa_data, 0, ETH_ALEN);
> > + return 0;
> > + }
> > } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
> > ap_addr->sa_family = ARPHRD_ETHER;
> > memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);
>