From a63e49b91c51d50606812cb31f18c2d96bc14bc4 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Thu, 23 Nov 2006 12:57:56 +0000 Subject: [PATCH] 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) Obtained-from: FreeBSD (sam@freebsd.org) --- sys/netproto/802_11/wlan/ieee80211_ioctl.c | 32 ++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/sys/netproto/802_11/wlan/ieee80211_ioctl.c b/sys/netproto/802_11/wlan/ieee80211_ioctl.c index 805b776ba3..cb9dde5b8b 100644 --- a/sys/netproto/802_11/wlan/ieee80211_ioctl.c +++ b/sys/netproto/802_11/wlan/ieee80211_ioctl.c @@ -29,8 +29,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/net80211/ieee80211_ioctl.c,v 1.25.2.11 2006/02/28 02:02:43 sam Exp $ - * $DragonFly: src/sys/netproto/802_11/wlan/ieee80211_ioctl.c,v 1.4 2006/09/05 00:55:48 dillon Exp $ + * $FreeBSD: src/sys/net80211/ieee80211_ioctl.c,v 1.25.2.12 2006/04/03 17:21:05 sam Exp $ + * $DragonFly: src/sys/netproto/802_11/wlan/ieee80211_ioctl.c,v 1.5 2006/11/23 12:57:56 sephe Exp $ */ /* @@ -1873,6 +1873,31 @@ found: return IS_UP_AUTO(ic) ? ENETRESET : 0; } +static int +ieee80211_ioctl_setstastats(struct ieee80211com *ic, struct ieee80211req *ireq) +{ + struct ieee80211_node *ni; + uint8_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) { @@ -2367,6 +2392,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; -- 2.41.0