freebsd-dev/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 Revert r220907 and r220915. 2011-04-22 00:44:27 +00:00
ieee80211_acl.c Remove now redundant mac argument. 2011-12-17 10:32:31 +00:00
ieee80211_action.c Added Self-protected action category (including MPM). 2012-05-01 15:35:10 +00:00
ieee80211_action.h
ieee80211_adhoc.c Fix some corner cases in the net80211 sequence number retransmission 2011-05-04 02:23:59 +00:00
ieee80211_adhoc.h
ieee80211_ageq.c Fix memset sizeofs 2011-07-07 15:41:40 +00:00
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 sysctl(9) cleanup checkpoint: amd64 GENERIC builds cleanly. 2011-01-12 19:53:50 +00:00
ieee80211_amrr.h net80211 rate control framework (net80211 ratectl). 2010-04-07 15:29:13 +00:00
ieee80211_crypto_ccmp.c - Introduce IEEE80211_KEY_NOREPLAY, a per-key flag to ignore replay 2010-07-01 20:50:12 +00:00
ieee80211_crypto_none.c
ieee80211_crypto_tkip.c - Introduce IEEE80211_KEY_NOREPLAY, a per-key flag to ignore replay 2010-07-01 20:50:12 +00:00
ieee80211_crypto_wep.c
ieee80211_crypto.c
ieee80211_crypto.h - Introduce IEEE80211_KEY_NOREPLAY, a per-key flag to ignore replay 2010-07-01 20:50:12 +00:00
ieee80211_ddb.c Implemented so that Mesh forwarding information lifetime is dynamic. 2012-05-01 15:47:30 +00:00
ieee80211_dfs.c Add a DFS debugging mode which is useful when doing automated DFS 2012-01-31 00:03:49 +00:00
ieee80211_dfs.h Add a DFS debugging mode which is useful when doing automated DFS 2012-01-31 00:03:49 +00:00
ieee80211_freebsd.c Correct the ordering of tid/crypto ic_name. 2012-03-27 04:15:38 +00:00
ieee80211_freebsd.h Make this code a little more portable by wrapping the mtx calls into 2010-04-14 18:29:40 +00:00
ieee80211_hostap.c Remove now redundant mac argument. 2011-12-17 10:32:31 +00:00
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 Fix some corner cases in the net80211 sequence number retransmission 2011-05-04 02:23:59 +00:00
ieee80211_ioctl.c Add the ability to kick an existing mesh node without waiting for it 2012-01-11 17:10:27 +00:00
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 Mark MALLOC_DEFINEs static that have no corresponding MALLOC_DECLAREs. 2011-11-07 06:44:47 +00:00
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 Remove now redundant mac argument. 2011-12-17 10:32:31 +00:00
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 Some device drivers calculate various timing related things based on 2010-11-13 14:59:54 +00:00
ieee80211_ratectl.c Instead of using the AMRR ratectl algo as default for drivers which have 2010-11-06 18:17:20 +00:00
ieee80211_ratectl.h The ni_rctls checks are used to verify that a ratectl algo has set up 2010-11-14 09:59:52 +00:00
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 Remove GNU-style struct initialization. 2010-06-12 07:02:43 +00:00
ieee80211_rssadapt.h net80211 rate control framework (net80211 ratectl). 2010-04-07 15:29:13 +00:00
ieee80211_scan_sta.c When setting a fixed channel on adapters with 11n support the scan 2011-08-08 16:29:07 +00:00
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 Add 802.11h quiet time element support into net80211. 2011-11-08 04:00:24 +00:00
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 Fix the situation where net80211 is built with IEEE80211_SUPPORT_TDMA but a module 2012-01-15 19:45:23 +00:00
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 Fix some corner cases in the net80211 sequence number retransmission 2011-05-04 02:23:59 +00:00
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