> Date: Thu, 21 Jan 2016 19:06:51 +0100
> From: Stefan Sperling <s...@stsp.name>
> 
> The ADDBA frames use a timeout value in units of TU (802.11 time unit).
> ba->ba_timeout_val is in usec and has already been multiplied by TU
> (e.h. in ieee80211_recv_addba_req()).
> We need to divide by TU when copying out to the frame.
> 
> ok?

ok kettenis@

> Index: ieee80211_output.c
> ===================================================================
> RCS file: /cvs/src/sys/net80211/ieee80211_output.c,v
> retrieving revision 1.107
> diff -u -p -r1.107 ieee80211_output.c
> --- ieee80211_output.c        12 Jan 2016 09:28:09 -0000      1.107
> +++ ieee80211_output.c        21 Jan 2016 17:49:40 -0000
> @@ -1430,7 +1430,7 @@ ieee80211_get_addba_req(struct ieee80211
>       if ((ic->ic_htcaps & IEEE80211_HTCAP_DELAYEDBA) == 0)
>               params |= IEEE80211_ADDBA_BA_POLICY; /* use immediate BA */
>       LE_WRITE_2(frm, params); frm += 2;
> -     LE_WRITE_2(frm, ba->ba_timeout_val); frm += 2;
> +     LE_WRITE_2(frm, ba->ba_timeout_val / IEEE80211_DUR_TU); frm += 2;
>       LE_WRITE_2(frm, ba->ba_winstart); frm += 2;
>  
>       m->m_pkthdr.len = m->m_len = frm - mtod(m, u_int8_t *);
> @@ -1470,7 +1470,7 @@ ieee80211_get_addba_resp(struct ieee8021
>               params |= ba->ba_winsize << 6;
>       LE_WRITE_2(frm, params); frm += 2;
>       if (status == 0)
> -             LE_WRITE_2(frm, ba->ba_timeout_val);
> +             LE_WRITE_2(frm, ba->ba_timeout_val / IEEE80211_DUR_TU);
>       else
>               LE_WRITE_2(frm, 0);
>       frm += 2;
> 
> 

Reply via email to