aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/net80211/ieee80211_ioctl.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c
index 363b19420040..412114823f4d 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;