summaryrefslogtreecommitdiffstats
path: root/tools/tools
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-02-05 20:39:53 +0000
committersam <sam@FreeBSD.org>2009-02-05 20:39:53 +0000
commitc1fbfec8ba6ae5ffa04c79aac88addb62c178fec (patch)
tree6ff77b6ce0bf6e8abf3914978018f7f203708151 /tools/tools
parent6c8a518fd3df42771b399580fa72789769059f60 (diff)
downloadFreeBSD-src-c1fbfec8ba6ae5ffa04c79aac88addb62c178fec.zip
FreeBSD-src-c1fbfec8ba6ae5ffa04c79aac88addb62c178fec.tar.gz
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
Diffstat (limited to 'tools/tools')
-rw-r--r--tools/tools/net80211/wlanstats/wlanstats.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/tools/tools/net80211/wlanstats/wlanstats.c b/tools/tools/net80211/wlanstats/wlanstats.c
index a48e11d..f774384 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)
OpenPOWER on IntegriCloud