fixup list station support:
o add sanity check to avoid possible looping o use intended api for IEEE80211_IOC_STA_INFO o when operating in sta mode get the sta info for the ap
This commit is contained in:
parent
d1c85dae69
commit
76f6413d65
@ -974,19 +974,36 @@ DECL_CMD_FUNC(set80211scan, val, d)
|
||||
list_scan(s);
|
||||
}
|
||||
|
||||
static enum ieee80211_opmode get80211opmode(int s);
|
||||
|
||||
static void
|
||||
list_stations(int s)
|
||||
{
|
||||
uint8_t buf[24*1024];
|
||||
union {
|
||||
struct ieee80211req_sta_req req;
|
||||
uint8_t buf[24*1024];
|
||||
} u;
|
||||
enum ieee80211_opmode opmode = get80211opmode(s);
|
||||
struct ieee80211req ireq;
|
||||
uint8_t *cp;
|
||||
int len;
|
||||
|
||||
(void) memset(&ireq, 0, sizeof(ireq));
|
||||
(void) strncpy(ireq.i_name, name, sizeof(ireq.i_name));
|
||||
/* broadcast address =>'s get all stations */
|
||||
(void) memset(u.req.is_u.macaddr, 0xff, IEEE80211_ADDR_LEN);
|
||||
if (opmode == IEEE80211_M_STA) {
|
||||
/*
|
||||
* Get information about the associated AP.
|
||||
*/
|
||||
ireq.i_type = IEEE80211_IOC_BSSID;
|
||||
ireq.i_data = u.req.is_u.macaddr;
|
||||
ireq.i_len = IEEE80211_ADDR_LEN;
|
||||
(void) ioctl(s, SIOCG80211, &ireq);
|
||||
}
|
||||
ireq.i_type = IEEE80211_IOC_STA_INFO;
|
||||
ireq.i_data = buf;
|
||||
ireq.i_len = sizeof(buf);
|
||||
ireq.i_data = &u;
|
||||
ireq.i_len = sizeof(u);
|
||||
if (ioctl(s, SIOCG80211, &ireq) < 0)
|
||||
errx(1, "unable to get station information");
|
||||
len = ireq.i_len;
|
||||
@ -1005,12 +1022,14 @@ list_stations(int s)
|
||||
, "CAPS"
|
||||
, "FLAG"
|
||||
);
|
||||
cp = buf;
|
||||
cp = (uint8_t *) u.req.info;
|
||||
do {
|
||||
struct ieee80211req_sta_info *si;
|
||||
uint8_t *vp;
|
||||
|
||||
si = (struct ieee80211req_sta_info *) cp;
|
||||
if (si->isi_len < sizeof(*si))
|
||||
break;
|
||||
vp = (u_int8_t *)(si+1);
|
||||
printf("%s %4u %4d %3dM %4d %4d %6d %6d %-4.4s %-4.4s"
|
||||
, ether_ntoa((const struct ether_addr*) si->isi_macaddr)
|
||||
|
Loading…
Reference in New Issue
Block a user