1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-18 10:35:55 +00:00
freebsd/sys/net80211
Adrian Chadd 545c886250 Fix some corner cases in the ieee80211_send_bar() handling.
* If the first call succeeded but failed to transmit, a timer would
  reschedule it via bar_timeout().  Unfortunately bar_timeout() didn't
  check the return value from the ieee80211_send_bar() reattempt and
  if that failed (eg the driver ic_raw_xmit() failed), it would never
  re-arm the timer.

* If BARPEND is cleared (which ieee80211_send_bar() will do if it can't
  TX), then re-arming the timer isn't enough - once bar_timeout() occurs,
  it'll see BARPEND is 0 and not run through the rest of the routine.
  So when rearming the timer, also set that flag.

* If the TX wasn't occuring, bar_tx_complete() wouldn't be called and the
  driver callback wouldn't be called either.  So the driver had no idea
  that the BAR TX attempt had failed.  In the ath(4) case, TX would stay
  paused.

  (There's no callback to indicate that BAR TX had failed or not;
  only a "BAR TX was attempted".  That's a separate, later problem.)

  So call the driver callback (ic_bar_response()) before the ADDBA session
  is torn down, so it has a chance of being notified that things didn't
  quite go to plan.

I've verified that yes, this does suspend traffic for ath(4), retry BAR
TX even if the driver is failing ic_raw_xmit(), and then eventually giving
up and sending a DELBA.  I'll address the "out of ath_buf" issue in ath(4)
in a subsequent commit - this commit just fixes the edge case where any
driver is (way) out of internal buffers/descriptors and fails frame TX.

PR:		kern/168170
Reviewed by:	bschmidt
MFC after:	1 month
2012-05-22 19:37:12 +00:00
..
_ieee80211.h
ieee80211_acl.c
ieee80211_action.c Added Self-protected action category (including MPM). 2012-05-01 15:35:10 +00:00
ieee80211_action.h
ieee80211_adhoc.c
ieee80211_adhoc.h
ieee80211_ageq.c
ieee80211_ageq.h
ieee80211_alq.c Re-commit this - store the alq payload in network order. 2012-03-21 03:19:50 +00:00
ieee80211_alq.h .. revert out a local change that I hadn't yet completely finished fleshing 2012-03-18 21:54:59 +00:00
ieee80211_amrr.c
ieee80211_amrr.h
ieee80211_crypto_ccmp.c
ieee80211_crypto_none.c
ieee80211_crypto_tkip.c
ieee80211_crypto_wep.c
ieee80211_crypto.c
ieee80211_crypto.h
ieee80211_ddb.c Implemented so that Mesh forwarding information lifetime is dynamic. 2012-05-01 15:47:30 +00:00
ieee80211_dfs.c
ieee80211_dfs.h
ieee80211_freebsd.c Correct the ordering of tid/crypto ic_name. 2012-03-27 04:15:38 +00:00
ieee80211_freebsd.h
ieee80211_hostap.c
ieee80211_hostap.h
ieee80211_ht.c Fix some corner cases in the ieee80211_send_bar() handling. 2012-05-22 19:37:12 +00:00
ieee80211_ht.h Migrate the net80211 TX aggregation state to be from per-AC to per-TID. 2012-04-15 20:29:39 +00:00
ieee80211_hwmp.c Update HWMP Proactive code and mesh route flags. 2012-05-01 16:18:38 +00:00
ieee80211_input.c Added Self-protected action category (including MPM). 2012-05-01 15:35:10 +00:00
ieee80211_input.h
ieee80211_ioctl.c
ieee80211_ioctl.h PREQ discovery update. 2012-05-01 16:16:20 +00:00
ieee80211_mesh.c PREQ discovery update. 2012-05-01 16:16:20 +00:00
ieee80211_mesh.h PREQ discovery update. 2012-05-01 16:16:20 +00:00
ieee80211_monitor.c
ieee80211_monitor.h
ieee80211_node.c Create a new task to handle 802.11n channel width changes. 2012-03-25 03:11:57 +00:00
ieee80211_node.h Migrate the net80211 TX aggregation state to be from per-AC to per-TID. 2012-04-15 20:29:39 +00:00
ieee80211_output.c Mesh forwarding with proxy support. 2012-05-01 15:56:26 +00:00
ieee80211_phy.c
ieee80211_phy.h
ieee80211_power.c
ieee80211_power.h
ieee80211_proto.c Create a new task to handle 802.11n channel width changes. 2012-03-25 03:11:57 +00:00
ieee80211_proto.h
ieee80211_radiotap.c Add missing \n's. 2012-03-08 23:46:42 +00:00
ieee80211_radiotap.h Add a radiotap vendor header definition. 2012-02-24 05:33:11 +00:00
ieee80211_ratectl_none.c
ieee80211_ratectl.c
ieee80211_ratectl.h
ieee80211_regdomain.c Add basic HT channel setup to ieee80211_init_channels(), this will be 2012-04-03 17:48:42 +00:00
ieee80211_regdomain.h
ieee80211_rssadapt.c
ieee80211_rssadapt.h
ieee80211_scan_sta.c
ieee80211_scan.c Attempt to catch scan cancellations at exactly the wrong time from occuring. 2012-03-02 02:53:43 +00:00
ieee80211_scan.h
ieee80211_sta.c Create a new task to handle 802.11n channel width changes. 2012-03-25 03:11:57 +00:00
ieee80211_sta.h
ieee80211_superg.c Migrate the net80211 TX aggregation state to be from per-AC to per-TID. 2012-04-15 20:29:39 +00:00
ieee80211_superg.h
ieee80211_tdma.c
ieee80211_tdma.h
ieee80211_var.h Create a new task to handle 802.11n channel width changes. 2012-03-25 03:11:57 +00:00
ieee80211_wds.c
ieee80211_wds.h
ieee80211_xauth.c
ieee80211.c Create a new task to handle 802.11n channel width changes. 2012-03-25 03:11:57 +00:00
ieee80211.h Net80211s update: Mesh Gate Announcement and removal of Portal Announcement. 2012-05-01 16:14:18 +00:00