summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authoravos <avos@FreeBSD.org>2016-05-17 16:38:18 +0000
committeravos <avos@FreeBSD.org>2016-05-17 16:38:18 +0000
commit864a1457f8487590d62a94e29ec4f5449334a4a6 (patch)
tree20440b4e95b3fbcf31b367bb93126f4e9c5a0002 /sys/net80211
parent239f1cd9839b9b81ae122442defb8ba3d9d7a9a3 (diff)
downloadFreeBSD-src-864a1457f8487590d62a94e29ec4f5449334a4a6.zip
FreeBSD-src-864a1457f8487590d62a94e29ec4f5449334a4a6.tar.gz
net80211: unbreak 'show all vaps(/a)' ddb command
Replace ifnet list lookup (which is broken since r287197, because IFT_IEEE80211 type is not used anymore) with iteration on ieee80211com list. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D6419
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211.c11
-rw-r--r--sys/net80211/ieee80211_ddb.c38
-rw-r--r--sys/net80211/ieee80211_var.h2
3 files changed, 31 insertions, 20 deletions
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c
index d2b254a..453f119 100644
--- a/sys/net80211/ieee80211.c
+++ b/sys/net80211/ieee80211.c
@@ -406,6 +406,17 @@ ieee80211_find_com(const char *name)
return (ic);
}
+void
+ieee80211_iterate_coms(ieee80211_com_iter_func *f, void *arg)
+{
+ struct ieee80211com *ic;
+
+ mtx_lock(&ic_list_mtx);
+ LIST_FOREACH(ic, &ic_head, ic_next)
+ (*f)(arg, ic);
+ mtx_unlock(&ic_list_mtx);
+}
+
/*
* Default reset method for use with the ioctl support. This
* method is invoked after any state change in the 802.11
diff --git a/sys/net80211/ieee80211_ddb.c b/sys/net80211/ieee80211_ddb.c
index de7a243..f758875 100644
--- a/sys/net80211/ieee80211_ddb.c
+++ b/sys/net80211/ieee80211_ddb.c
@@ -69,6 +69,8 @@ static void _db_show_vap(const struct ieee80211vap *, int, int);
static void _db_show_com(const struct ieee80211com *,
int showvaps, int showsta, int showmesh, int showprocs);
+static void _db_show_all_vaps(void *, struct ieee80211com *);
+
static void _db_show_node_table(const char *tag,
const struct ieee80211_node_table *);
static void _db_show_channel(const char *tag, const struct ieee80211_channel *);
@@ -161,8 +163,6 @@ DB_SHOW_COMMAND(com, db_show_com)
DB_SHOW_ALL_COMMAND(vaps, db_show_all_vaps)
{
- VNET_ITERATOR_DECL(vnet_iter);
- const struct ifnet *ifp;
int i, showall = 0;
for (i = 0; modif[i] != '\0'; i++)
@@ -172,24 +172,7 @@ DB_SHOW_ALL_COMMAND(vaps, db_show_all_vaps)
break;
}
- VNET_FOREACH(vnet_iter) {
- TAILQ_FOREACH(ifp, &V_ifnet, if_list)
- if (ifp->if_type == IFT_IEEE80211) {
- const struct ieee80211com *ic = ifp->if_l2com;
-
- if (!showall) {
- const struct ieee80211vap *vap;
- db_printf("%s: com %p vaps:",
- ifp->if_xname, ic);
- TAILQ_FOREACH(vap, &ic->ic_vaps,
- iv_next)
- db_printf(" %s(%p)",
- vap->iv_ifp->if_xname, vap);
- db_printf("\n");
- } else
- _db_show_com(ic, 1, 1, 1, 1);
- }
- }
+ ieee80211_iterate_coms(_db_show_all_vaps, &showall);
}
#ifdef IEEE80211_SUPPORT_MESH
@@ -683,6 +666,21 @@ _db_show_com(const struct ieee80211com *ic, int showvaps, int showsta,
}
static void
+_db_show_all_vaps(void *arg, struct ieee80211com *ic)
+{
+ int showall = *(int *)arg;
+
+ if (!showall) {
+ const struct ieee80211vap *vap;
+ db_printf("%s: com %p vaps:", ic->ic_name, ic);
+ TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next)
+ db_printf(" %s(%p)", vap->iv_ifp->if_xname, vap);
+ db_printf("\n");
+ } else
+ _db_show_com(ic, 1, 1, 1, 1);
+}
+
+static void
_db_show_node_table(const char *tag, const struct ieee80211_node_table *nt)
{
int i;
diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h
index f94a15a..3c33f0a 100644
--- a/sys/net80211/ieee80211_var.h
+++ b/sys/net80211/ieee80211_var.h
@@ -714,6 +714,8 @@ void ieee80211_drain(struct ieee80211com *);
void ieee80211_chan_init(struct ieee80211com *);
struct ieee80211com *ieee80211_find_vap(const uint8_t mac[IEEE80211_ADDR_LEN]);
struct ieee80211com *ieee80211_find_com(const char *name);
+typedef void ieee80211_com_iter_func(void *, struct ieee80211com *);
+void ieee80211_iterate_coms(ieee80211_com_iter_func *, void *);
int ieee80211_media_change(struct ifnet *);
void ieee80211_media_status(struct ifnet *, struct ifmediareq *);
int ieee80211_ioctl(struct ifnet *, u_long, caddr_t);
OpenPOWER on IntegriCloud