From 1e9ec798a11bf9529d790fea488de26d668c043d Mon Sep 17 00:00:00 2001 From: Sam Leffler Date: Thu, 5 Feb 2009 20:39:53 +0000 Subject: [PATCH] o fix identification of ahdemo mode o split out code to get the bssid for use in the future o include more information in error diags when unable to collect sta info/stats --- tools/tools/net80211/wlanstats/wlanstats.c | 35 +++++++++++++++------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/tools/tools/net80211/wlanstats/wlanstats.c b/tools/tools/net80211/wlanstats/wlanstats.c index a48e11da40f8..f774384e42f9 100644 --- a/tools/tools/net80211/wlanstats/wlanstats.c +++ b/tools/tools/net80211/wlanstats/wlanstats.c @@ -390,9 +390,12 @@ wlan_getopmode(struct wlanstatfoo *wf0) strlcpy(ifmr.ifm_name, wf->ifr.ifr_name, sizeof(ifmr.ifm_name)); if (ioctl(wf->s, SIOCGIFMEDIA, &ifmr) < 0) err(1, "%s (SIOCGIFMEDIA)", wf->ifr.ifr_name); - if (ifmr.ifm_current & IFM_IEEE80211_ADHOC) - wf->opmode = IEEE80211_M_IBSS; /* XXX ahdemo */ - else if (ifmr.ifm_current & IFM_IEEE80211_HOSTAP) + if (ifmr.ifm_current & IFM_IEEE80211_ADHOC) { + if (ifmr.ifm_current & IFM_FLAG0) + wf->opmode = IEEE80211_M_AHDEMO; + else + wf->opmode = IEEE80211_M_IBSS; + } else if (ifmr.ifm_current & IFM_IEEE80211_HOSTAP) wf->opmode = IEEE80211_M_HOSTAP; else if (ifmr.ifm_current & IFM_IEEE80211_MONITOR) wf->opmode = IEEE80211_M_MONITOR; @@ -422,6 +425,15 @@ getlladdr(struct wlanstatfoo_p *wf) freeifaddrs(ifp); } +static int +getbssid(struct wlanstatfoo_p *wf) +{ + wf->ireq.i_type = IEEE80211_IOC_BSSID; + wf->ireq.i_data = wf->mac; + wf->ireq.i_len = IEEE80211_ADDR_LEN; + return ioctl(wf->s, SIOCG80211, &wf->ireq); +} + static void wlan_setstamac(struct wlanstatfoo *wf0, const uint8_t *mac) { @@ -436,11 +448,9 @@ wlan_setstamac(struct wlanstatfoo *wf0, const uint8_t *mac) getlladdr(wf); break; case IEEE80211_M_STA: - wf->ireq.i_type = IEEE80211_IOC_BSSID; - wf->ireq.i_data = wf->mac; - wf->ireq.i_len = IEEE80211_ADDR_LEN; - if (ioctl(wf->s, SIOCG80211, &wf->ireq) <0) - err(1, "%s (IEEE80211_IOC_BSSID)", wf->ireq.i_name); + if (getbssid(wf) < 0) + err(1, "%s (IEEE80211_IOC_BSSID)", + wf->ireq.i_name); break; } } else @@ -457,15 +467,18 @@ wlan_collect(struct wlanstatfoo_p *wf, wf->ireq.i_type = IEEE80211_IOC_STA_INFO; wf->ireq.i_data = (caddr_t) &wf->u_info; wf->ireq.i_len = sizeof(wf->u_info); - if (ioctl(wf->s, SIOCG80211, &wf->ireq) < 0) - warn("%s (IEEE80211_IOC_STA_INFO)", wf->ireq.i_name); + if (ioctl(wf->s, SIOCG80211, &wf->ireq) < 0) { + warn("%s:%s (IEEE80211_IOC_STA_INFO)", wf->ireq.i_name, + ether_ntoa((const struct ether_addr*) wf->mac)); + } IEEE80211_ADDR_COPY(nstats->is_u.macaddr, wf->mac); wf->ireq.i_type = IEEE80211_IOC_STA_STATS; wf->ireq.i_data = (caddr_t) nstats; wf->ireq.i_len = sizeof(*nstats); if (ioctl(wf->s, SIOCG80211, &wf->ireq) < 0) - warn("%s (IEEE80211_IOC_STA_STATS)", wf->ireq.i_name); + warn("%s:%s (IEEE80211_IOC_STA_STATS)", wf->ireq.i_name, + ether_ntoa((const struct ether_addr*) wf->mac)); wf->ifr.ifr_data = (caddr_t) stats; if (ioctl(wf->s, SIOCG80211STATS, &wf->ifr) < 0)