On Fri, Jul 12, 2019 at 11:11:19AM +0200, Johannes Berg wrote: > > [External Email]: This email arrived from an external source - Please exercise caution when opening any attachments or clicking on links. > > > Suggested approach to handle non-transmitting BSS entries is simplified in the > > following sense. If new entries have been already created after channel switch, > > only transmitting bss will be updated using IEs of new entry for the same > > transmitting bss. Non-transmitting bss entries will be updated as soon as > > new mgmt frames are received. Updating non-transmitting bss entries seems > > too expensive: nested nontrans_list traversing is needed since we can not > > rely on the same order of old and new non-transmitting entries. > > That sounds like a reasonable trade-off. I do wonder though what happens > if we're connected to a non-transmitting BSS? Well, here I rely upon the assumption that CSA IEs of non-transmitting BSS are handled correctly by mac80211 or any FullMAC firmware. And if we are connected to non-transmitting BSS rather than transmitting one, the following code in the beginning of new cfg80211_update_assoc_bss_entry function is supposed to care about this use-case: + /* use transmitting bss */ + if (cbss->pub.transmitted_bss) + cbss = container_of(cbss->pub.transmitted_bss, + struct cfg80211_internal_bss, + pub); In other words, regardless of which BSS we are connected to, the whole hierarchy of non-transmitting BSS entries will be updated, including their channels and location in rb-tree. Regards, Sergey