svn commit: r188187 - head/tools/tools/net80211/wlanstats

Sam Leffler sam at FreeBSD.org
Thu Feb 5 12:39:54 PST 2009


Author: sam
Date: Thu Feb  5 20:39:53 2009
New Revision: 188187
URL: http://svn.freebsd.org/changeset/base/188187

Log:
  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

Modified:
  head/tools/tools/net80211/wlanstats/wlanstats.c

Modified: head/tools/tools/net80211/wlanstats/wlanstats.c
==============================================================================
--- head/tools/tools/net80211/wlanstats/wlanstats.c	Thu Feb  5 20:37:07 2009	(r188186)
+++ head/tools/tools/net80211/wlanstats/wlanstats.c	Thu Feb  5 20:39:53 2009	(r188187)
@@ -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, 
 			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)


More information about the svn-src-head mailing list