FreeBSD kernel WLAN code
ieee80211_ht.c File Reference
#include <sys/cdefs.h>
#include "opt_inet.h"
#include "opt_wlan.h"
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/systm.h>
#include <sys/endian.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/if_var.h>
#include <net/if_media.h>
#include <net/ethernet.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_action.h>
#include <net80211/ieee80211_input.h>
Include dependency graph for ieee80211_ht.c:

Go to the source code of this file.

Data Structures

struct  printranges
 

Macros

#define ADDRATE(x)
 
#define PROCESS   0 /* caller should process frame */
 
#define CONSUMED   1 /* frame consumed, caller does nothing */
 
#define PROCESS   0 /* caller should process frame */
 
#define CONSUMED   1 /* frame consumed, caller does nothing */
 
#define OPMODE(x)   _IEEE80211_SHIFTMASK(x, IEEE80211_HTINFO_OPMODE)
 
#define senderr(_x, _v)   do { vap->iv_stats._v++; ret = _x; goto bad; } while (0)
 
#define ADDSHORT(frm, v)
 
#define ADDSHORT(frm, v)
 
#define ADDSHORT(frm, v)
 
#define PROTMODE   (IEEE80211_HTINFO_OPMODE|IEEE80211_HTINFO_NONHT_PRESENT)
 

Functions

 __FBSDID ("$FreeBSD$")
 
 SYSCTL_PROC (_net_wlan, OID_AUTO, ampdu_age, CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_NEEDGIANT, &ieee80211_ampdu_age, 0, ieee80211_sysctl_msecs_ticks, "I", "AMPDU max reorder age (ms)")
 
 SYSCTL_INT (_net_wlan, OID_AUTO, recv_bar, CTLFLAG_RW, &ieee80211_recv_bar_ena, 0, "BAR frame processing (ena/dis)")
 
 SYSCTL_PROC (_net_wlan, OID_AUTO, addba_timeout, CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_NEEDGIANT, &ieee80211_addba_timeout, 0, ieee80211_sysctl_msecs_ticks, "I", "ADDBA request timeout (ms)")
 
 SYSCTL_PROC (_net_wlan, OID_AUTO, addba_backoff, CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_NEEDGIANT, &ieee80211_addba_backoff, 0, ieee80211_sysctl_msecs_ticks, "I", "ADDBA request backoff (ms)")
 
 SYSCTL_INT (_net_wlan, OID_AUTO, addba_maxtries, CTLFLAG_RW, &ieee80211_addba_maxtries, 0, "max ADDBA requests sent before backoff")
 
static void ieee80211_ht_init (void)
 
 SYSINIT (wlan_ht, SI_SUB_DRIVERS, SI_ORDER_FIRST, ieee80211_ht_init, NULL)
 
static int ieee80211_ampdu_enable (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap)
 
static int ieee80211_addba_request (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap, int dialogtoken, int baparamset, int batimeout)
 
static int ieee80211_addba_response (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap, int code, int baparamset, int batimeout)
 
static void ieee80211_addba_stop (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap)
 
static void null_addba_response_timeout (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap)
 
static void ieee80211_bar_response (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap, int status)
 
static void ampdu_tx_stop (struct ieee80211_tx_ampdu *tap)
 
static void bar_stop_timer (struct ieee80211_tx_ampdu *tap)
 
static int ampdu_rx_start (struct ieee80211_node *, struct ieee80211_rx_ampdu *, int baparamset, int batimeout, int baseqctl)
 
static void ampdu_rx_stop (struct ieee80211_node *, struct ieee80211_rx_ampdu *)
 
void ieee80211_ht_attach (struct ieee80211com *ic)
 
void ieee80211_ht_detach (struct ieee80211com *ic)
 
void ieee80211_ht_vattach (struct ieee80211vap *vap)
 
void ieee80211_ht_vdetach (struct ieee80211vap *vap)
 
static int ht_getrate (struct ieee80211com *ic, int index, enum ieee80211_phymode mode, int ratetype)
 
static void ht_rateprint (struct ieee80211com *ic, enum ieee80211_phymode mode, int ratetype)
 
static void ht_announce (struct ieee80211com *ic, enum ieee80211_phymode mode)
 
void ieee80211_ht_announce (struct ieee80211com *ic)
 
void ieee80211_init_suphtrates (struct ieee80211com *ic)
 
struct mbuf * ieee80211_decap_amsdu (struct ieee80211_node *ni, struct mbuf *m)
 
static void ampdu_rx_purge_slot (struct ieee80211_rx_ampdu *rap, int i)
 
static int ampdu_rx_add_slot (struct ieee80211_rx_ampdu *rap, int off, int tid, ieee80211_seq rxseq, struct ieee80211_node *ni, struct mbuf *m, const struct ieee80211_rx_stats *rxs)
 
static void ampdu_rx_purge (struct ieee80211_rx_ampdu *rap)
 
static void ieee80211_ampdu_rx_init_rap (struct ieee80211_node *ni, struct ieee80211_rx_ampdu *rap)
 
int ieee80211_ampdu_rx_start_ext (struct ieee80211_node *ni, int tid, int seq, int baw)
 
void ieee80211_ampdu_rx_stop_ext (struct ieee80211_node *ni, int tid)
 
static __inline void ampdu_dispatch (struct ieee80211_node *ni, struct mbuf *m)
 
static int ampdu_dispatch_slot (struct ieee80211_rx_ampdu *rap, struct ieee80211_node *ni, int i)
 
static void ampdu_rx_moveup (struct ieee80211_rx_ampdu *rap, struct ieee80211_node *ni, int i, int winstart)
 
static void ampdu_rx_dispatch (struct ieee80211_rx_ampdu *rap, struct ieee80211_node *ni)
 
static void ampdu_rx_flush (struct ieee80211_node *ni, struct ieee80211_rx_ampdu *rap)
 
static void ampdu_rx_flush_upto (struct ieee80211_node *ni, struct ieee80211_rx_ampdu *rap, ieee80211_seq winstart)
 
int ieee80211_ampdu_reorder (struct ieee80211_node *ni, struct mbuf *m, const struct ieee80211_rx_stats *rxs)
 
void ieee80211_recv_bar (struct ieee80211_node *ni, struct mbuf *m0)
 
void ieee80211_ht_node_init (struct ieee80211_node *ni)
 
void ieee80211_ht_node_cleanup (struct ieee80211_node *ni)
 
void ieee80211_ht_node_age (struct ieee80211_node *ni)
 
static struct ieee80211_channelfindhtchan (struct ieee80211com *ic, struct ieee80211_channel *c, int htflags)
 
struct ieee80211_channelieee80211_ht_adjust_channel (struct ieee80211com *ic, struct ieee80211_channel *chan, int flags)
 
void ieee80211_ht_wds_init (struct ieee80211_node *ni)
 
void ieee80211_htinfo_notify (struct ieee80211vap *vap)
 
static void htinfo_update (struct ieee80211vap *vap)
 
void ieee80211_ht_node_join (struct ieee80211_node *ni)
 
void ieee80211_ht_node_leave (struct ieee80211_node *ni)
 
void ieee80211_htprot_update (struct ieee80211vap *vap, int protmode)
 
void ieee80211_ht_timeout (struct ieee80211vap *vap)
 
void ieee80211_parse_htcap (struct ieee80211_node *ni, const uint8_t *ie)
 
static void htinfo_parse (struct ieee80211_node *ni, const struct ieee80211_ie_htinfo *htinfo)
 
void ieee80211_parse_htinfo (struct ieee80211_node *ni, const uint8_t *ie)
 
static int htinfo_update_chw (struct ieee80211_node *ni, int htflags, int vhtflags)
 
static __inline int htcap_update_mimo_ps (struct ieee80211_node *ni)
 
static __inline void htcap_update_shortgi (struct ieee80211_node *ni)
 
static __inline void htcap_update_ldpc (struct ieee80211_node *ni)
 
void ieee80211_ht_updateparams (struct ieee80211_node *ni, const uint8_t *htcapie, const uint8_t *htinfoie)
 
static uint32_t ieee80211_vht_get_vhtflags (struct ieee80211_node *ni, uint32_t htflags)
 
int ieee80211_ht_updateparams_final (struct ieee80211_node *ni, const uint8_t *htcapie, const uint8_t *htinfoie)
 
void ieee80211_ht_updatehtcap (struct ieee80211_node *ni, const uint8_t *htcapie)
 
void ieee80211_ht_updatehtcap_final (struct ieee80211_node *ni)
 
int ieee80211_setup_htrates (struct ieee80211_node *ni, const uint8_t *ie, int flags)
 
void ieee80211_setup_basic_htrates (struct ieee80211_node *ni, const uint8_t *ie)
 
static void ampdu_tx_setup (struct ieee80211_tx_ampdu *tap)
 
static void addba_timeout (void *arg)
 
static void addba_start_timeout (struct ieee80211_tx_ampdu *tap)
 
static void addba_stop_timeout (struct ieee80211_tx_ampdu *tap)
 
int ieee80211_ampdu_tx_request_ext (struct ieee80211_node *ni, int tid)
 
int ieee80211_ampdu_tx_request_active_ext (struct ieee80211_node *ni, int tid, int status)
 
static int ht_recv_action_ba_addba_request (struct ieee80211_node *ni, const struct ieee80211_frame *wh, const uint8_t *frm, const uint8_t *efrm)
 
static int ht_recv_action_ba_addba_response (struct ieee80211_node *ni, const struct ieee80211_frame *wh, const uint8_t *frm, const uint8_t *efrm)
 
static int ht_recv_action_ba_delba (struct ieee80211_node *ni, const struct ieee80211_frame *wh, const uint8_t *frm, const uint8_t *efrm)
 
static int ht_recv_action_ht_txchwidth (struct ieee80211_node *ni, const struct ieee80211_frame *wh, const uint8_t *frm, const uint8_t *efrm)
 
static int ht_recv_action_ht_mimopwrsave (struct ieee80211_node *ni, const struct ieee80211_frame *wh, const uint8_t *frm, const uint8_t *efrm)
 
int ieee80211_ampdu_request (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap)
 
void ieee80211_ampdu_stop (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap, int reason)
 
static void bar_start_timer (struct ieee80211_tx_ampdu *tap)
 
static void bar_timeout (void *arg)
 
static void bar_tx_complete (struct ieee80211_node *ni, void *arg, int status)
 
int ieee80211_send_bar (struct ieee80211_node *ni, struct ieee80211_tx_ampdu *tap, ieee80211_seq seq)
 
static int ht_action_output (struct ieee80211_node *ni, struct mbuf *m)
 
static int ht_send_action_ba_addba (struct ieee80211_node *ni, int category, int action, void *arg0)
 
static int ht_send_action_ba_delba (struct ieee80211_node *ni, int category, int action, void *arg0)
 
static int ht_send_action_ht_txchwidth (struct ieee80211_node *ni, int category, int action, void *arg0)
 
static void ieee80211_set_mcsset (struct ieee80211com *ic, uint8_t *frm)
 
static uint8_t * ieee80211_add_htcap_body (uint8_t *frm, struct ieee80211_node *ni)
 
uint8_t * ieee80211_add_htcap (uint8_t *frm, struct ieee80211_node *ni)
 
static uint8_t * ieee80211_add_htcap_body_ch (uint8_t *frm, struct ieee80211vap *vap, struct ieee80211_channel *c)
 
uint8_t * ieee80211_add_htcap_ch (uint8_t *frm, struct ieee80211vap *vap, struct ieee80211_channel *c)
 
uint8_t * ieee80211_add_htcap_vendor (uint8_t *frm, struct ieee80211_node *ni)
 
static void ieee80211_set_basic_htrates (uint8_t *frm, const struct ieee80211_htrateset *rs)
 
void ieee80211_ht_update_beacon (struct ieee80211vap *vap, struct ieee80211_beacon_offsets *bo)
 
static uint8_t * ieee80211_add_htinfo_body (uint8_t *frm, struct ieee80211_node *ni)
 
uint8_t * ieee80211_add_htinfo (uint8_t *frm, struct ieee80211_node *ni)
 
uint8_t * ieee80211_add_htinfo_vendor (uint8_t *frm, struct ieee80211_node *ni)
 

Variables

const struct ieee80211_mcs_rates ieee80211_htrates [IEEE80211_HTRATE_MAXSIZE]
 
static int ieee80211_ampdu_age = -1
 
static int ieee80211_recv_bar_ena = 1
 
static int ieee80211_addba_timeout = -1
 
static int ieee80211_addba_backoff = -1
 
static int ieee80211_addba_maxtries = 3
 
static int ieee80211_bar_timeout = -1
 
static int ieee80211_bar_maxtries = 50
 
static ieee80211_recv_action_func ht_recv_action_ba_addba_request
 
static ieee80211_recv_action_func ht_recv_action_ba_addba_response
 
static ieee80211_recv_action_func ht_recv_action_ba_delba
 
static ieee80211_recv_action_func ht_recv_action_ht_mimopwrsave
 
static ieee80211_recv_action_func ht_recv_action_ht_txchwidth
 
static ieee80211_send_action_func ht_send_action_ba_addba
 
static ieee80211_send_action_func ht_send_action_ba_delba
 
static ieee80211_send_action_func ht_send_action_ht_txchwidth
 
static struct printranges ranges []
 

Macro Definition Documentation

◆ ADDRATE

#define ADDRATE (   x)
Value:
do { \
htrateset->rs_rates[htrateset->rs_nrates] = x; \
htrateset->rs_nrates++; \
} while (0)

◆ ADDSHORT [1/3]

#define ADDSHORT (   frm,
 
)
Value:
do { \
frm[0] = (v) & 0xff; \
frm[1] = (v) >> 8; \
frm += 2; \
} while (0)

Definition at line 3034 of file ieee80211_ht.c.

◆ ADDSHORT [2/3]

#define ADDSHORT (   frm,
 
)
Value:
do { \
frm[0] = (v) & 0xff; \
frm[1] = (v) >> 8; \
frm += 2; \
} while (0)

Definition at line 3034 of file ieee80211_ht.c.

◆ ADDSHORT [3/3]

#define ADDSHORT (   frm,
 
)
Value:
do { \
frm[0] = (v) & 0xff; \
frm[1] = (v) >> 8; \
frm += 2; \
} while (0)

Definition at line 3034 of file ieee80211_ht.c.

◆ CONSUMED [1/2]

#define CONSUMED   1 /* frame consumed, caller does nothing */

◆ CONSUMED [2/2]

#define CONSUMED   1 /* frame consumed, caller does nothing */

◆ OPMODE

#define OPMODE (   x)    _IEEE80211_SHIFTMASK(x, IEEE80211_HTINFO_OPMODE)

◆ PROCESS [1/2]

#define PROCESS   0 /* caller should process frame */

◆ PROCESS [2/2]

#define PROCESS   0 /* caller should process frame */

◆ PROTMODE

◆ senderr

#define senderr (   _x,
  _v 
)    do { vap->iv_stats._v++; ret = _x; goto bad; } while (0)

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ addba_start_timeout()

static void addba_start_timeout ( struct ieee80211_tx_ampdu tap)
static

Definition at line 2247 of file ieee80211_ht.c.

References addba_timeout(), ieee80211_addba_timeout, IEEE80211_AGGR_XCHGPEND, ieee80211_tx_ampdu::txa_flags, ieee80211_tx_ampdu::txa_nextrequest, and ieee80211_tx_ampdu::txa_timer.

Referenced by ieee80211_addba_request(), and ieee80211_ampdu_tx_request_ext().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ addba_stop_timeout()

static void addba_stop_timeout ( struct ieee80211_tx_ampdu tap)
static

◆ addba_timeout()

static void addba_timeout ( void *  arg)
static

◆ ampdu_dispatch()

static __inline void ampdu_dispatch ( struct ieee80211_node ni,
struct mbuf *  m 
)
static

Definition at line 806 of file ieee80211_ht.c.

References ieee80211_input, and M_AMPDU_MPDU.

Referenced by ampdu_dispatch_slot(), and ieee80211_ampdu_reorder().

Here is the caller graph for this function:

◆ ampdu_dispatch_slot()

static int ampdu_dispatch_slot ( struct ieee80211_rx_ampdu rap,
struct ieee80211_node ni,
int  i 
)
static

Definition at line 814 of file ieee80211_ht.c.

References ampdu_dispatch(), ieee80211_rx_ampdu::rxa_mq, ieee80211_rx_ampdu::rxa_qbytes, and ieee80211_rx_ampdu::rxa_qframes.

Referenced by ampdu_rx_dispatch(), ampdu_rx_flush(), and ampdu_rx_flush_upto().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ampdu_rx_add_slot()

◆ ampdu_rx_dispatch()

static void ampdu_rx_dispatch ( struct ieee80211_rx_ampdu rap,
struct ieee80211_node ni 
)
static

◆ ampdu_rx_flush()

static void ampdu_rx_flush ( struct ieee80211_node ni,
struct ieee80211_rx_ampdu rap 
)
static

◆ ampdu_rx_flush_upto()

static void ampdu_rx_flush_upto ( struct ieee80211_node ni,
struct ieee80211_rx_ampdu rap,
ieee80211_seq  winstart 
)
static

◆ ampdu_rx_moveup()

static void ampdu_rx_moveup ( struct ieee80211_rx_ampdu rap,
struct ieee80211_node ni,
int  i,
int  winstart 
)
static

◆ ampdu_rx_purge()

static void ampdu_rx_purge ( struct ieee80211_rx_ampdu rap)
static

Definition at line 668 of file ieee80211_ht.c.

References ampdu_rx_purge_slot(), ieee80211_rx_ampdu::rxa_qbytes, ieee80211_rx_ampdu::rxa_qframes, and ieee80211_rx_ampdu::rxa_wnd.

Referenced by ampdu_rx_start(), ampdu_rx_stop(), and ieee80211_ampdu_rx_start_ext().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ampdu_rx_purge_slot()

static void ampdu_rx_purge_slot ( struct ieee80211_rx_ampdu rap,
int  i 
)
static

Definition at line 520 of file ieee80211_ht.c.

References ieee80211_rx_ampdu::rxa_mq, ieee80211_rx_ampdu::rxa_qbytes, and ieee80211_rx_ampdu::rxa_qframes.

Referenced by ampdu_rx_purge().

Here is the caller graph for this function:

◆ ampdu_rx_start()

static int ampdu_rx_start ( struct ieee80211_node ni,
struct ieee80211_rx_ampdu rap,
int  baparamset,
int  batimeout,
int  baseqctl 
)
static

◆ ampdu_rx_stop()

static void ampdu_rx_stop ( struct ieee80211_node ni,
struct ieee80211_rx_ampdu rap 
)
static

Definition at line 790 of file ieee80211_ht.c.

References ampdu_rx_purge(), IEEE80211_AGGR_RUNNING, IEEE80211_AGGR_WAITRX, IEEE80211_AGGR_XCHGPEND, and ieee80211_rx_ampdu::rxa_flags.

Referenced by ieee80211_ampdu_rx_stop_ext(), and ieee80211_ht_attach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ampdu_tx_setup()

static void ampdu_tx_setup ( struct ieee80211_tx_ampdu tap)
static

◆ ampdu_tx_stop()

◆ bar_start_timer()

static void bar_start_timer ( struct ieee80211_tx_ampdu tap)
static

Definition at line 2842 of file ieee80211_ht.c.

References bar_timeout(), ieee80211_bar_timeout, IEEE80211_MSG_11N, IEEE80211_NOTE, ieee80211_node::ni_vap, ieee80211_tx_ampdu::txa_ni, and ieee80211_tx_ampdu::txa_timer.

Referenced by bar_timeout(), and ieee80211_send_bar().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bar_stop_timer()

static void bar_stop_timer ( struct ieee80211_tx_ampdu tap)
static

Definition at line 2852 of file ieee80211_ht.c.

References IEEE80211_MSG_11N, IEEE80211_NOTE, ieee80211_node::ni_vap, ieee80211_tx_ampdu::txa_ni, and ieee80211_tx_ampdu::txa_timer.

Referenced by ampdu_tx_stop(), bar_tx_complete(), and ieee80211_send_bar().

Here is the caller graph for this function:

◆ bar_timeout()

◆ bar_tx_complete()

static void bar_tx_complete ( struct ieee80211_node ni,
void *  arg,
int  status 
)
static

◆ findhtchan()

static struct ieee80211_channel * findhtchan ( struct ieee80211com ic,
struct ieee80211_channel c,
int  htflags 
)
static

Definition at line 1409 of file ieee80211_ht.c.

References ieee80211_channel::ic_flags, ieee80211_channel::ic_freq, IEEE80211_CHAN_HT, and ieee80211_find_channel().

Referenced by htinfo_update_chw(), ieee80211_add_htcap_body(), and ieee80211_ht_adjust_channel().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ht_action_output()

◆ ht_announce()

static void ht_announce ( struct ieee80211com ic,
enum ieee80211_phymode  mode 
)
static

Definition at line 394 of file ieee80211_ht.c.

References ht_rateprint(), ieee80211com::ic_htcaps, ic_printf(), IEEE80211_HTCAP_CHWIDTH40, IEEE80211_HTCAP_SHORTGI20, IEEE80211_HTCAP_SHORTGI40, and ieee80211_phymode_name.

Referenced by ieee80211_ht_announce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ht_getrate()

static int ht_getrate ( struct ieee80211com ic,
int  index,
enum ieee80211_phymode  mode,
int  ratetype 
)
static

Definition at line 322 of file ieee80211_ht.c.

References ieee80211_mcs_rates::ht20_rate_400ns, ieee80211_mcs_rates::ht20_rate_800ns, ieee80211_mcs_rates::ht40_rate_400ns, ieee80211_mcs_rates::ht40_rate_800ns, ieee80211_htrates, ieee80211_rate2media(), and IEEE80211_RATE_MCS.

Referenced by ht_rateprint().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ht_rateprint()

static void ht_rateprint ( struct ieee80211com ic,
enum ieee80211_phymode  mode,
int  ratetype 
)
static

Definition at line 366 of file ieee80211_ht.c.

References ht_getrate(), printranges::htcapflags, ieee80211com::ic_htcaps, ic_printf(), ieee80211com::ic_txstream, printranges::maxmcs, maxrate(), printranges::minmcs, ranges, printranges::ratetype, and printranges::txstream.

Referenced by ht_announce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ht_recv_action_ba_addba_request()

◆ ht_recv_action_ba_addba_response()

◆ ht_recv_action_ba_delba()

◆ ht_recv_action_ht_mimopwrsave()

static int ht_recv_action_ht_mimopwrsave ( struct ieee80211_node ni,
const struct ieee80211_frame wh,
const uint8_t *  frm,
const uint8_t *  efrm 
)
static

◆ ht_recv_action_ht_txchwidth()

static int ht_recv_action_ht_txchwidth ( struct ieee80211_node ni,
const struct ieee80211_frame wh,
const uint8_t *  frm,
const uint8_t *  efrm 
)
static

◆ ht_send_action_ba_addba()

◆ ht_send_action_ba_delba()

◆ ht_send_action_ht_txchwidth()

◆ htcap_update_ldpc()

static __inline void htcap_update_ldpc ( struct ieee80211_node ni)
static

◆ htcap_update_mimo_ps()

static __inline int htcap_update_mimo_ps ( struct ieee80211_node ni)
static

◆ htcap_update_shortgi()

◆ htinfo_parse()

◆ htinfo_update()

◆ htinfo_update_chw()

◆ ieee80211_add_htcap()

uint8_t * ieee80211_add_htcap ( uint8_t *  frm,
struct ieee80211_node ni 
)

Definition at line 3360 of file ieee80211_ht.c.

References ieee80211_add_htcap_body(), and IEEE80211_ELEMID_HTCAP.

Referenced by ieee80211_alloc_proberesp(), ieee80211_beacon_construct(), and ieee80211_send_mgmt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_add_htcap_body()

◆ ieee80211_add_htcap_body_ch()

◆ ieee80211_add_htcap_ch()

uint8_t * ieee80211_add_htcap_ch ( uint8_t *  frm,
struct ieee80211vap vap,
struct ieee80211_channel c 
)

Definition at line 3449 of file ieee80211_ht.c.

References ieee80211_add_htcap_body_ch(), and IEEE80211_ELEMID_HTCAP.

Referenced by ieee80211_probereq_ie().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_add_htcap_vendor()

uint8_t * ieee80211_add_htcap_vendor ( uint8_t *  frm,
struct ieee80211_node ni 
)

Definition at line 3462 of file ieee80211_ht.c.

References BCM_OUI, BCM_OUI_HTCAP, ieee80211_add_htcap_body(), and IEEE80211_ELEMID_VENDOR.

Referenced by ieee80211_alloc_proberesp(), ieee80211_beacon_construct(), and ieee80211_send_mgmt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_add_htinfo()

uint8_t * ieee80211_add_htinfo ( uint8_t *  frm,
struct ieee80211_node ni 
)

Definition at line 3590 of file ieee80211_ht.c.

References ieee80211_add_htinfo_body(), and IEEE80211_ELEMID_HTINFO.

Referenced by ieee80211_alloc_proberesp(), ieee80211_beacon_construct(), and ieee80211_send_mgmt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_add_htinfo_body()

◆ ieee80211_add_htinfo_vendor()

uint8_t * ieee80211_add_htinfo_vendor ( uint8_t *  frm,
struct ieee80211_node ni 
)

Definition at line 3602 of file ieee80211_ht.c.

References BCM_OUI, BCM_OUI_HTINFO, ieee80211_add_htinfo_body(), and IEEE80211_ELEMID_VENDOR.

Referenced by ieee80211_alloc_proberesp(), ieee80211_beacon_construct(), and ieee80211_send_mgmt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_addba_request()

static int ieee80211_addba_request ( struct ieee80211_node ni,
struct ieee80211_tx_ampdu tap,
int  dialogtoken,
int  baparamset,
int  batimeout 
)
static

Definition at line 2278 of file ieee80211_ht.c.

References _IEEE80211_MASKSHIFT, addba_start_timeout(), IEEE80211_AGGR_BAWMAX, IEEE80211_AGGR_IMMEDIATE, IEEE80211_BAPS_BUFSIZ, ieee80211_tx_ampdu::txa_flags, ieee80211_tx_ampdu::txa_token, and ieee80211_tx_ampdu::txa_wnd.

Referenced by ieee80211_ht_attach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_addba_response()

◆ ieee80211_addba_stop()

static void ieee80211_addba_stop ( struct ieee80211_node ni,
struct ieee80211_tx_ampdu tap 
)
static

Definition at line 2387 of file ieee80211_ht.c.

References addba_stop_timeout(), IEEE80211_AGGR_AMSDU, IEEE80211_AGGR_RUNNING, ieee80211_tx_ampdu::txa_attempts, and ieee80211_tx_ampdu::txa_flags.

Referenced by ieee80211_ht_attach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_ampdu_enable()

◆ ieee80211_ampdu_reorder()

int ieee80211_ampdu_reorder ( struct ieee80211_node ni,
struct mbuf *  m,
const struct ieee80211_rx_stats rxs 
)

◆ ieee80211_ampdu_request()

◆ ieee80211_ampdu_rx_init_rap()

static void ieee80211_ampdu_rx_init_rap ( struct ieee80211_node ni,
struct ieee80211_rx_ampdu rap 
)
static

Definition at line 683 of file ieee80211_ht.c.

References IEEE80211_AGGR_BAWMAX, and ieee80211_rx_ampdu::rxa_mq.

Referenced by ampdu_rx_start(), ieee80211_ampdu_rx_start_ext(), and ieee80211_ht_node_init().

Here is the caller graph for this function:

◆ ieee80211_ampdu_rx_start_ext()

◆ ieee80211_ampdu_rx_stop_ext()

void ieee80211_ampdu_rx_stop_ext ( struct ieee80211_node ni,
int  tid 
)

Definition at line 777 of file ieee80211_ht.c.

References ampdu_rx_stop(), and ieee80211_node::ni_rx_ampdu.

Here is the call graph for this function:

◆ ieee80211_ampdu_stop()

◆ ieee80211_ampdu_tx_request_active_ext()

int ieee80211_ampdu_tx_request_active_ext ( struct ieee80211_node ni,
int  tid,
int  status 
)

◆ ieee80211_ampdu_tx_request_ext()

int ieee80211_ampdu_tx_request_ext ( struct ieee80211_node ni,
int  tid 
)

Definition at line 2299 of file ieee80211_ht.c.

References addba_start_timeout(), ampdu_tx_setup(), IEEE80211_AGGR_SETUP, ieee80211_node::ni_tx_ampdu, and ieee80211_tx_ampdu::txa_flags.

Here is the call graph for this function:

◆ ieee80211_bar_response()

◆ ieee80211_decap_amsdu()

struct mbuf * ieee80211_decap_amsdu ( struct ieee80211_node ni,
struct mbuf *  m 
)

◆ ieee80211_ht_adjust_channel()

◆ ieee80211_ht_announce()

void ieee80211_ht_announce ( struct ieee80211com ic)

Definition at line 416 of file ieee80211_ht.c.

References ht_announce(), ieee80211com::ic_modecaps, ic_printf(), ieee80211com::ic_rxstream, ieee80211com::ic_txstream, IEEE80211_MODE_11NA, and IEEE80211_MODE_11NG.

Referenced by ieee80211_announce().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_ht_attach()

◆ ieee80211_ht_detach()

void ieee80211_ht_detach ( struct ieee80211com ic)

Definition at line 250 of file ieee80211_ht.c.

Referenced by ieee80211_ifdetach().

Here is the caller graph for this function:

◆ ieee80211_ht_init()

◆ ieee80211_ht_node_age()

◆ ieee80211_ht_node_cleanup()

◆ ieee80211_ht_node_init()

◆ ieee80211_ht_node_join()

void ieee80211_ht_node_join ( struct ieee80211_node ni)

Definition at line 1577 of file ieee80211_ht.c.

References htinfo_update(), IEEE80211_LOCK_ASSERT, IEEE80211_NODE_HT, ieee80211vap::iv_ht40_sta_assoc, ieee80211vap::iv_ht_sta_assoc, ieee80211vap::iv_ic, ieee80211_node::ni_chw, ieee80211_node::ni_flags, and ieee80211_node::ni_vap.

Referenced by ieee80211_node_join().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_ht_node_leave()

void ieee80211_ht_node_leave ( struct ieee80211_node ni)

Definition at line 1595 of file ieee80211_ht.c.

References htinfo_update(), IEEE80211_LOCK_ASSERT, IEEE80211_NODE_HT, ieee80211vap::iv_ht40_sta_assoc, ieee80211vap::iv_ht_sta_assoc, ieee80211vap::iv_ic, ieee80211_node::ni_chw, ieee80211_node::ni_flags, and ieee80211_node::ni_vap.

Referenced by ieee80211_node_leave().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_ht_timeout()

void ieee80211_ht_timeout ( struct ieee80211vap vap)

Definition at line 1655 of file ieee80211_ht.c.

References htinfo_update(), IEEE80211_DPRINTF, IEEE80211_FHT_NONHT_PR, IEEE80211_LOCK_ASSERT, IEEE80211_MSG_11N, IEEE80211_NONHT_PRESENT_AGE, ieee80211_time_after, ieee80211vap::iv_flags_ht, ieee80211vap::iv_ic, and ieee80211vap::iv_lastnonht.

Referenced by ieee80211_vap_timeout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_ht_update_beacon()

◆ ieee80211_ht_updatehtcap()

void ieee80211_ht_updatehtcap ( struct ieee80211_node ni,
const uint8_t *  htcapie 
)

Definition at line 2058 of file ieee80211_ht.c.

References htcap_update_ldpc(), htcap_update_mimo_ps(), htcap_update_shortgi(), IEEE80211_HTC_SMPS, ieee80211_parse_htcap(), ieee80211vap::iv_htcaps, and ieee80211_node::ni_vap.

Referenced by hostap_recv_mgmt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_ht_updatehtcap_final()

◆ ieee80211_ht_updateparams()

void ieee80211_ht_updateparams ( struct ieee80211_node ni,
const uint8_t *  htcapie,
const uint8_t *  htinfoie 
)

◆ ieee80211_ht_updateparams_final()

int ieee80211_ht_updateparams_final ( struct ieee80211_node ni,
const uint8_t *  htcapie,
const uint8_t *  htinfoie 
)

◆ ieee80211_ht_vattach()

◆ ieee80211_ht_vdetach()

void ieee80211_ht_vdetach ( struct ieee80211vap vap)

Definition at line 317 of file ieee80211_ht.c.

Referenced by ieee80211_vap_detach().

Here is the caller graph for this function:

◆ ieee80211_ht_wds_init()

◆ ieee80211_htinfo_notify()

◆ ieee80211_htprot_update()

void ieee80211_htprot_update ( struct ieee80211vap vap,
int  protmode 
)

◆ ieee80211_init_suphtrates()

void ieee80211_init_suphtrates ( struct ieee80211com ic)

◆ ieee80211_parse_htcap()

void ieee80211_parse_htcap ( struct ieee80211_node ni,
const uint8_t *  ie 
)

◆ ieee80211_parse_htinfo()

void ieee80211_parse_htinfo ( struct ieee80211_node ni,
const uint8_t *  ie 
)

Definition at line 1712 of file ieee80211_ht.c.

References htinfo_parse(), and IEEE80211_ELEMID_VENDOR.

Referenced by ieee80211_init_neighbor(), and ieee80211_sta_join().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ieee80211_recv_bar()

◆ ieee80211_send_bar()

◆ ieee80211_set_basic_htrates()

static void ieee80211_set_basic_htrates ( uint8_t *  frm,
const struct ieee80211_htrateset rs 
)
static

Definition at line 3478 of file ieee80211_ht.c.

References IEEE80211_HTRATE_MAXSIZE, IEEE80211_RATE_BASIC, IEEE80211_RATE_VAL, ieee80211_htrateset::rs_nrates, and ieee80211_htrateset::rs_rates.

Referenced by ieee80211_add_htinfo_body().

Here is the caller graph for this function:

◆ ieee80211_set_mcsset()

static void ieee80211_set_mcsset ( struct ieee80211com ic,
uint8_t *  frm 
)
static

◆ ieee80211_setup_basic_htrates()

◆ ieee80211_setup_htrates()

◆ ieee80211_vht_get_vhtflags()

◆ null_addba_response_timeout()

static void null_addba_response_timeout ( struct ieee80211_node ni,
struct ieee80211_tx_ampdu tap 
)
static

Definition at line 2267 of file ieee80211_ht.c.

Referenced by ieee80211_ht_attach().

Here is the caller graph for this function:

◆ SYSCTL_INT() [1/2]

SYSCTL_INT ( _net_wlan  ,
OID_AUTO  ,
addba_maxtries  ,
CTLFLAG_RW  ,
ieee80211_addba_maxtries,
,
"max ADDBA requests sent before backoff"   
)

◆ SYSCTL_INT() [2/2]

SYSCTL_INT ( _net_wlan  ,
OID_AUTO  ,
recv_bar  ,
CTLFLAG_RW  ,
ieee80211_recv_bar_ena,
,
"BAR frame processing (ena/dis)"   
)

◆ SYSCTL_PROC() [1/3]

SYSCTL_PROC ( _net_wlan  ,
OID_AUTO  ,
addba_backoff  ,
CTLTYPE_INT|CTLFLAG_RW|  CTLFLAG_NEEDGIANT,
ieee80211_addba_backoff,
,
ieee80211_sysctl_msecs_ticks  ,
"I"  ,
"ADDBA request backoff (ms)"   
)

◆ SYSCTL_PROC() [2/3]

SYSCTL_PROC ( _net_wlan  ,
OID_AUTO  ,
addba_timeout  ,
CTLTYPE_INT|CTLFLAG_RW|  CTLFLAG_NEEDGIANT,
ieee80211_addba_timeout,
,
ieee80211_sysctl_msecs_ticks  ,
"I"  ,
"ADDBA request timeout (ms)"   
)

◆ SYSCTL_PROC() [3/3]

SYSCTL_PROC ( _net_wlan  ,
OID_AUTO  ,
ampdu_age  ,
CTLTYPE_INT|CTLFLAG_RW|  CTLFLAG_NEEDGIANT,
ieee80211_ampdu_age,
,
ieee80211_sysctl_msecs_ticks  ,
"I"  ,
"AMPDU max reorder age (ms)"   
)

◆ SYSINIT()

SYSINIT ( wlan_ht  ,
SI_SUB_DRIVERS  ,
SI_ORDER_FIRST  ,
ieee80211_ht_init  ,
NULL   
)

Variable Documentation

◆ ht_recv_action_ba_addba_request

ieee80211_recv_action_func ht_recv_action_ba_addba_request
static

Definition at line 164 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ht_recv_action_ba_addba_response

ieee80211_recv_action_func ht_recv_action_ba_addba_response
static

Definition at line 165 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ht_recv_action_ba_delba

ieee80211_recv_action_func ht_recv_action_ba_delba
static

Definition at line 166 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ht_recv_action_ht_mimopwrsave

ieee80211_recv_action_func ht_recv_action_ht_mimopwrsave
static

Definition at line 167 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ht_recv_action_ht_txchwidth

ieee80211_recv_action_func ht_recv_action_ht_txchwidth
static

Definition at line 168 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ht_send_action_ba_addba

ieee80211_send_action_func ht_send_action_ba_addba
static

Definition at line 170 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ht_send_action_ba_delba

ieee80211_send_action_func ht_send_action_ba_delba
static

Definition at line 171 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ht_send_action_ht_txchwidth

ieee80211_send_action_func ht_send_action_ht_txchwidth
static

Definition at line 172 of file ieee80211_ht.c.

Referenced by ieee80211_ht_init().

◆ ieee80211_addba_backoff

int ieee80211_addba_backoff = -1
static

Definition at line 152 of file ieee80211_ht.c.

Referenced by ieee80211_ampdu_request(), and ieee80211_ht_init().

◆ ieee80211_addba_maxtries

int ieee80211_addba_maxtries = 3
static

Definition at line 157 of file ieee80211_ht.c.

Referenced by ieee80211_ampdu_enable(), and ieee80211_ampdu_request().

◆ ieee80211_addba_timeout

int ieee80211_addba_timeout = -1
static

Definition at line 147 of file ieee80211_ht.c.

Referenced by addba_start_timeout(), and ieee80211_ht_init().

◆ ieee80211_ampdu_age

int ieee80211_ampdu_age = -1
static

◆ ieee80211_bar_maxtries

int ieee80211_bar_maxtries = 50
static

Definition at line 162 of file ieee80211_ht.c.

Referenced by bar_timeout().

◆ ieee80211_bar_timeout

int ieee80211_bar_timeout = -1
static

Definition at line 161 of file ieee80211_ht.c.

Referenced by bar_start_timer(), and ieee80211_ht_init().

◆ ieee80211_htrates

const struct ieee80211_mcs_rates ieee80211_htrates[IEEE80211_HTRATE_MAXSIZE]

Definition at line 57 of file ieee80211_ht.c.

Referenced by get_sta_info(), ht_getrate(), ieee80211_media_setup(), and maxrate().

◆ ieee80211_recv_bar_ena

int ieee80211_recv_bar_ena = 1
static

Definition at line 143 of file ieee80211_ht.c.

Referenced by ieee80211_recv_bar().

◆ ranges

struct printranges ranges[]
static
Initial value:
= {
{ 0, 7, 1, 0, 0 },
{ 8, 15, 2, 0, 0 },
{ 16, 23, 3, 0, 0 },
{ 24, 31, 4, 0, 0 },
{ 32, 0, 1, 2, IEEE80211_HTC_TXMCS32 },
{ 33, 38, 2, 0, IEEE80211_HTC_TXUNEQUAL },
{ 39, 52, 3, 0, IEEE80211_HTC_TXUNEQUAL },
{ 53, 76, 4, 0, IEEE80211_HTC_TXUNEQUAL },
{ 0, 0, 0, 0, 0 },
}
#define IEEE80211_HTC_TXMCS32
Definition: _ieee80211.h:531
#define IEEE80211_HTC_TXUNEQUAL
Definition: _ieee80211.h:530

Referenced by ht_rateprint().