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
This commit is contained in:
parent
6c8a518fd3
commit
c1fbfec8ba
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user