diff options
author | sam <sam@FreeBSD.org> | 2004-12-31 20:32:40 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2004-12-31 20:32:40 +0000 |
commit | 341ffa612f66fc3213f4bedb7d13a5ccf12b7490 (patch) | |
tree | c263ca48d3f51731ab7dc189eb0251af3193d035 /sys/dev/ath/if_athvar.h | |
parent | 186275ec87e54f7c5c3e4ec75fbcb167bee25fcc (diff) | |
download | FreeBSD-src-341ffa612f66fc3213f4bedb7d13a5ccf12b7490.zip FreeBSD-src-341ffa612f66fc3213f4bedb7d13a5ccf12b7490.tar.gz |
Radiotap fixups:
o catch one place where we were not using ath_chan_change to
switch channels; this fixes a problem where the channel
settings were not being correctly reported in captured packets
o return unique channel identification in the channel flags;
ethereal gets confused if you return merged flags (e.g. ofdm,
cck, and 2Ghz) (this is workaround and should be removed if
we can ever cleanup radiotap consumers)
o correct short/long preamble flag state for rx and treat tx
the same--use a new hwflags array that gives us the data
based on the h/w rate index/cookie
o add gross hack to handle radiotap capture of frames that
come in with hardware padding; should be replaced by a
flag in the radiotap header and more smarts in the apps
that decode radiotap data
Diffstat (limited to 'sys/dev/ath/if_athvar.h')
-rw-r--r-- | sys/dev/ath/if_athvar.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/ath/if_athvar.h b/sys/dev/ath/if_athvar.h index ffc05f2..4585801 100644 --- a/sys/dev/ath/if_athvar.h +++ b/sys/dev/ath/if_athvar.h @@ -182,6 +182,7 @@ struct ath_softc { HAL_CHANNEL sc_curchan; /* current h/w channel */ u_int8_t sc_rixmap[256]; /* IEEE to h/w rate table ix */ u_int8_t sc_hwmap[32]; /* h/w rate ix to IEEE table */ + u_int8_t sc_hwflags[32]; /* " " " to radiotap flags */ u_int8_t sc_protrix; /* protection rate index */ u_int sc_txantenna; /* tx antenna (fixed or auto) */ HAL_INT sc_imask; /* interrupt mask copy */ @@ -199,10 +200,13 @@ struct ath_softc { } u_tx_rt; int sc_tx_th_len; union { - struct ath_rx_radiotap_header th; + struct { + struct ath_rx_radiotap_header th; + struct ieee80211_qosframe wh; + } u; u_int8_t pad[64]; } u_rx_rt; - int sc_rx_th_len; + int sc_rx_rt_len; struct task sc_fataltask; /* fatal int processing */ @@ -244,7 +248,9 @@ struct ath_softc { }; #define sc_if sc_arp.ac_if #define sc_tx_th u_tx_rt.th -#define sc_rx_th u_rx_rt.th +#define sc_rx u_rx_rt.u +#define sc_rx_th sc_rx.th +#define sc_rx_wh sc_rx.wh #define ATH_LOCK_INIT(_sc) \ mtx_init(&(_sc)->sc_mtx, device_get_nameunit((_sc)->sc_dev), \ |