diff options
author | sam <sam@FreeBSD.org> | 2006-03-27 05:22:35 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2006-03-27 05:22:35 +0000 |
commit | 4d87d66b1c601dcb1df3198ae3e59566af238f3c (patch) | |
tree | d979537f67ed874a76e9927dd8b65f339fe458b5 /sys/net80211 | |
parent | e299a616482bfb358e6bfa05585edfae267322f7 (diff) | |
download | FreeBSD-src-4d87d66b1c601dcb1df3198ae3e59566af238f3c.zip FreeBSD-src-4d87d66b1c601dcb1df3198ae3e59566af238f3c.tar.gz |
implement set(IEEE80211_IOC_STA_STATS) for hostapd; for
now just make it clear station statistics (could read
a stat block and assign to caller can do partial changes)
Reviewed by: avatar (previous version)
MFC after: 1 week
Diffstat (limited to 'sys/net80211')
-rw-r--r-- | sys/net80211/ieee80211_ioctl.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c index 363b194..4121148 100644 --- a/sys/net80211/ieee80211_ioctl.c +++ b/sys/net80211/ieee80211_ioctl.c @@ -2005,6 +2005,31 @@ found: } static int +ieee80211_ioctl_setstastats(struct ieee80211com *ic, struct ieee80211req *ireq) +{ + struct ieee80211_node *ni; + u_int8_t macaddr[IEEE80211_ADDR_LEN]; + int error; + + /* + * NB: we could copyin ieee80211req_sta_stats so apps + * could make selective changes but that's overkill; + * just clear all stats for now. + */ + if (ireq->i_len < IEEE80211_ADDR_LEN) + return EINVAL; + error = copyin(ireq->i_data, macaddr, IEEE80211_ADDR_LEN); + if (error != 0) + return error; + ni = ieee80211_find_node(&ic->ic_sta, macaddr); + if (ni == NULL) + return EINVAL; /* XXX */ + memset(&ni->ni_stats, 0, sizeof(ni->ni_stats)); + ieee80211_free_node(ni); + return 0; +} + +static int ieee80211_ioctl_setstatxpow(struct ieee80211com *ic, struct ieee80211req *ireq) { struct ieee80211_node *ni; @@ -2498,6 +2523,9 @@ ieee80211_ioctl_set80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re case IEEE80211_IOC_MACCMD: error = ieee80211_ioctl_setmaccmd(ic, ireq); break; + case IEEE80211_IOC_STA_STATS: + error = ieee80211_ioctl_setstastats(ic, ireq); + break; case IEEE80211_IOC_STA_TXPOW: error = ieee80211_ioctl_setstatxpow(ic, ireq); break; |