Author: avos
Date: Tue May 17 16:38:18 2016
New Revision: 300063
URL: https://svnweb.freebsd.org/changeset/base/300063

Log:
  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

Modified:
  head/sys/net80211/ieee80211.c
  head/sys/net80211/ieee80211_ddb.c
  head/sys/net80211/ieee80211_var.h

Modified: head/sys/net80211/ieee80211.c
==============================================================================
--- head/sys/net80211/ieee80211.c       Tue May 17 15:36:40 2016        
(r300062)
+++ head/sys/net80211/ieee80211.c       Tue May 17 16:38:18 2016        
(r300063)
@@ -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

Modified: head/sys/net80211/ieee80211_ddb.c
==============================================================================
--- head/sys/net80211/ieee80211_ddb.c   Tue May 17 15:36:40 2016        
(r300062)
+++ head/sys/net80211/ieee80211_ddb.c   Tue May 17 16:38:18 2016        
(r300063)
@@ -69,6 +69,8 @@ static void _db_show_vap(const struct ie
 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_va
                        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 *
 }
 
 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;

Modified: head/sys/net80211/ieee80211_var.h
==============================================================================
--- head/sys/net80211/ieee80211_var.h   Tue May 17 15:36:40 2016        
(r300062)
+++ head/sys/net80211/ieee80211_var.h   Tue May 17 16:38:18 2016        
(r300063)
@@ -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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to