diff options
author | sam <sam@FreeBSD.org> | 2008-10-25 23:58:59 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2008-10-25 23:58:59 +0000 |
commit | 5a6374beb2912917cf6bad02c43fb8dacf788bb1 (patch) | |
tree | e00aa93649e6fec5dc68d69ae9fd4c5f708d9d77 /sys/net80211/ieee80211_ht.h | |
parent | f136c60eb32e2b6fc78c9c3396e0f43a8382b151 (diff) | |
download | FreeBSD-src-5a6374beb2912917cf6bad02c43fb8dacf788bb1.zip FreeBSD-src-5a6374beb2912917cf6bad02c43fb8dacf788bb1.tar.gz |
Sync BAR frame handling with out of tree work:
o correct BAR frame construction for AMPDU
o retransmit BAR frames until ACK'd or timeout (use tunables to
control behaviour, default is very aggressive)
o defer seq# update until BAR frame is ACK'd
o add BAR response handling callback for driver to interpose and
push new state to device or push pending aggregates
While here also:
o add backpointer to node in the per-tid tx aggregation data structure
o move ampdu tx state setup/teardown work to separate functions
Diffstat (limited to 'sys/net80211/ieee80211_ht.h')
-rw-r--r-- | sys/net80211/ieee80211_ht.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/net80211/ieee80211_ht.h b/sys/net80211/ieee80211_ht.h index 62d2f2e..49d3209 100644 --- a/sys/net80211/ieee80211_ht.h +++ b/sys/net80211/ieee80211_ht.h @@ -38,12 +38,14 @@ typedef uint16_t ieee80211_seq; struct ieee80211_tx_ampdu { + struct ieee80211_node *txa_ni; /* back pointer */ u_short txa_flags; #define IEEE80211_AGGR_IMMEDIATE 0x0001 /* BA policy */ #define IEEE80211_AGGR_XCHGPEND 0x0002 /* ADDBA response pending */ #define IEEE80211_AGGR_RUNNING 0x0004 /* ADDBA response received */ #define IEEE80211_AGGR_SETUP 0x0008 /* deferred state setup */ #define IEEE80211_AGGR_NAK 0x0010 /* peer NAK'd ADDBA request */ +#define IEEE80211_AGGR_BARPEND 0x0020 /* BAR response pending */ uint8_t txa_ac; uint8_t txa_token; /* dialog token */ int txa_lastsample; /* ticks @ last traffic sample */ @@ -54,8 +56,8 @@ struct ieee80211_tx_ampdu { ieee80211_seq txa_start; /* BA window left edge */ ieee80211_seq txa_seqpending; /* new txa_start pending BAR response */ uint16_t txa_wnd; /* BA window size */ - uint8_t txa_attempts; /* # ADDBA requests w/o a response */ - int txa_nextrequest;/* soonest to make next ADDBA request */ + uint8_t txa_attempts; /* # ADDBA/BAR requests w/o a response*/ + int txa_nextrequest;/* soonest to make next request */ struct callout txa_timer; void *txa_private; /* driver-private storage */ }; @@ -187,8 +189,8 @@ int ieee80211_ampdu_request(struct ieee80211_node *, struct ieee80211_tx_ampdu *); void ieee80211_ampdu_stop(struct ieee80211_node *, struct ieee80211_tx_ampdu *, int); -int ieee80211_send_bar(struct ieee80211_node *, - const struct ieee80211_tx_ampdu *); +int ieee80211_send_bar(struct ieee80211_node *, struct ieee80211_tx_ampdu *, + ieee80211_seq); int ieee80211_send_action(struct ieee80211_node *, int, int, uint16_t [4]); uint8_t *ieee80211_add_htcap(uint8_t *, struct ieee80211_node *); |