Ticket #969: madwifi-domlme.patch

File madwifi-domlme.patch, 2.5 kB (added by tharvey, 6 years ago)

patch to fix issue

  • net80211/ieee80211_node.c

    old new  
    16621662void 
    16631663ieee80211_iterate_nodes(struct ieee80211_node_table *nt, ieee80211_iter_func *f, void *arg) 
    16641664{ 
     1665        ieee80211_iterate_dev_nodes(NULL, nt, f, arg); 
     1666} 
     1667EXPORT_SYMBOL(ieee80211_iterate_nodes); 
     1668 
     1669void 
     1670ieee80211_iterate_dev_nodes(struct net_device *dev, struct ieee80211_node_table *nt, ieee80211_iter_func *f, void *arg) 
     1671{ 
    16651672        struct ieee80211_node *ni; 
    16661673        u_int gen; 
    16671674 
     
    16701677restart: 
    16711678        IEEE80211_NODE_LOCK(nt); 
    16721679        TAILQ_FOREACH(ni, &nt->nt_node, ni_list) { 
    1673                 if (ni->ni_scangen != gen) { 
     1680                if (dev != NULL && ni->ni_vap->iv_dev != dev)  
     1681                        continue;  /* skip node not for this vap */ 
     1682                if (ni->ni_scangen) { 
    16741683                        ni->ni_scangen = gen; 
    16751684                        (void) ieee80211_ref_node(ni); 
    16761685                        IEEE80211_NODE_UNLOCK(nt); 
     
    16831692 
    16841693        IEEE80211_SCAN_UNLOCK_IRQ(nt); 
    16851694} 
    1686 EXPORT_SYMBOL(ieee80211_iterate_nodes); 
     1695EXPORT_SYMBOL(ieee80211_iterate_dev_nodes); 
    16871696 
    16881697void 
    16891698ieee80211_dump_node(struct ieee80211_node_table *nt, struct ieee80211_node *ni) 
  • net80211/ieee80211_node.h

    old new  
    298298typedef void ieee80211_iter_func(void *, struct ieee80211_node *); 
    299299void ieee80211_iterate_nodes(struct ieee80211_node_table *, 
    300300        ieee80211_iter_func *, void *); 
     301void ieee80211_iterate_dev_nodes(struct net_device *,  
     302        struct ieee80211_node_table *, ieee80211_iter_func *, void *); 
    301303 
    302304void    ieee80211_dump_node(struct ieee80211_node_table *, 
    303305        struct ieee80211_node *); 
  • net80211/ieee80211_wireless.c

    old new  
    31343134                        if (!IEEE80211_ADDR_EQ(mlme->im_macaddr, vap->iv_dev->broadcast)) { 
    31353135                                ni = ieee80211_find_node(&ic->ic_sta, 
    31363136                                        mlme->im_macaddr); 
    3137                                 if (ni == NULL) 
     3137                                if (ni == NULL) { 
     3138                                        ieee80211_free_node(ni); 
    31383139                                        return -EINVAL; 
    3139                                 domlme(mlme, ni); 
     3140                                } 
     3141                                if (dev == ni->ni_vap->iv_dev) 
     3142                                        domlme(mlme, ni); 
    31403143                                ieee80211_free_node(ni); 
    31413144                        } else 
    3142                                 ieee80211_iterate_nodes(&ic->ic_sta, domlme, mlme); 
     3145                                ieee80211_iterate_dev_nodes(dev, &ic->ic_sta, domlme, mlme); 
    31433146                        break; 
    31443147                default: 
    31453148                        return -EINVAL;