freebsd-dev/sys/net80211
Adrian Chadd e8de31cace net80211: Fix traffic hang on STA/AP VAPs on a multi-VAP interface
This took an embarrasingly long time to find.

The state changes for a radio with a STA /and/ AP VAP gets a bit messy.
The AP maps are marked as waiting, waiting for the STA AP to find a
channel to use before the AP VAPs become active.

However, the code path that clears the OACTIVE flag on a VAP only runs
during a successful run of ieee80211_newstate_cb().

So here is how it goes:

* the STA VAP goes down and needs to scan;
* the AP vap goes RUN->INIT; but it doesn't YET call ieee80211_newstate_cb();
* meanwhile - a send on the AP VAP causes the VAP to set the OACTIVE flag here;
* then the STA VAP finishes scan and goes to RUN;
* which will call wakeupwaiting() as part of the STA VAP transition to RUN;
* .. then the AP VAP goes INIT->RUN directly via a call to hostap_newstate
  in wakeupwaiting rather than it being through the deferred path;
* /then/ the ieee80211_newstate_cb() is called, but it sees the state go
  RUN->RUN;
* .. which results in the OACTIVE flag never being cleared.

This clears the OACTIVE flag when a VAP transitions RUN->RUN; the
driver layer or net80211 layer can set it if required in a subsequent
transmit.

Differential Revision: https://reviews.freebsd.org/D34920

Reviewed by: bz
2022-04-21 22:49:01 -07:00
..
_ieee80211.h net80211: correct types for nf and rssi 2022-04-01 22:30:02 +00:00
ieee80211_acl.c
ieee80211_action.c
ieee80211_action.h
ieee80211_adhoc.c net80211: fix -Wunused-but-set-variable warnings 2021-11-24 17:39:19 +00:00
ieee80211_adhoc.h
ieee80211_ageq.c
ieee80211_ageq.h
ieee80211_alq.c
ieee80211_alq.h
ieee80211_amrr.c
ieee80211_amrr.h
ieee80211_crypto_ccmp.c
ieee80211_crypto_none.c
ieee80211_crypto_tkip.c
ieee80211_crypto_wep.c net80211: fix -Wunused-but-set-variable warnings 2021-11-24 17:39:19 +00:00
ieee80211_crypto.c
ieee80211_crypto.h
ieee80211_ddb.c net80211: fix debug printf 2021-12-23 15:21:32 +00:00
ieee80211_dfs.c
ieee80211_dfs.h
ieee80211_freebsd.c
ieee80211_freebsd.h
ieee80211_hostap.c net80211: fix -Wunused-but-set-variable warnings 2021-11-24 17:39:19 +00:00
ieee80211_hostap.h
ieee80211_ht.c net80211: fix -Wunused-but-set-variable warnings 2021-11-24 17:39:19 +00:00
ieee80211_ht.h
ieee80211_hwmp.c net80211(4): Fix a typo in a sysctl description 2021-12-04 12:09:17 +01:00
ieee80211_input.c net80211: improve error handling from ieee80211_parse_beacon() 2022-04-07 20:50:39 +00:00
ieee80211_input.h net80211: mitigation against A-MSDU design flaw 2021-09-30 14:50:45 +00:00
ieee80211_ioctl.c net80211: fix build for 526370fb85 2021-10-08 11:21:44 +00:00
ieee80211_ioctl.h
ieee80211_mesh.c net80211: reject mixed plaintext/encrypted fragments 2021-09-30 14:47:41 +00:00
ieee80211_mesh.h
ieee80211_monitor.c
ieee80211_monitor.h
ieee80211_node.c net80211: introduce (*iv_update_bss)() 2022-03-22 18:51:43 +00:00
ieee80211_node.h net80211: add a driver-private pointer to struct ieee80211_node 2021-10-31 19:08:28 +00:00
ieee80211_output.c net80211: adjust a printf to toeee80211_note 2021-12-26 17:26:58 +00:00
ieee80211_phy.c
ieee80211_phy.h
ieee80211_power.c net80211(4): Fix a typo in a source code comment 2022-04-09 09:13:53 +02:00
ieee80211_power.h
ieee80211_proto.c net80211: Fix traffic hang on STA/AP VAPs on a multi-VAP interface 2022-04-21 22:49:01 -07:00
ieee80211_proto.h
ieee80211_radiotap.c
ieee80211_radiotap.h net80211: radiotap add another define 2021-11-18 14:59:04 +00:00
ieee80211_ratectl_none.c
ieee80211_ratectl.c
ieee80211_ratectl.h
ieee80211_regdomain.c
ieee80211_regdomain.h
ieee80211_rssadapt.c
ieee80211_rssadapt.h
ieee80211_scan_sta.c
ieee80211_scan_sw.c
ieee80211_scan_sw.h
ieee80211_scan.c
ieee80211_scan.h net80211: improve error handling from ieee80211_parse_beacon() 2022-04-07 20:50:39 +00:00
ieee80211_sta.c net80211: fix -Wunused-but-set-variable warnings 2021-11-24 17:39:19 +00:00
ieee80211_sta.h
ieee80211_superg.c
ieee80211_superg.h
ieee80211_tdma.c
ieee80211_tdma.h
ieee80211_var.h net80211: introduce (*iv_update_bss)() 2022-03-22 18:51:43 +00:00
ieee80211_vht.c
ieee80211_vht.h
ieee80211_wds.c net80211: introduce (*iv_update_bss)() 2022-03-22 18:51:43 +00:00
ieee80211_wds.h
ieee80211_wps.h
ieee80211_xauth.c
ieee80211.c net80211: enhance (disabled) debugging 2022-02-14 22:16:59 +00:00
ieee80211.h