IEEE80211_RADIOTAP(9) | FreeBSD Kernel Developer's Manual | IEEE80211_RADIOTAP(9) |
名称
ieee80211_radiotap — 802.11 デバイスパケット獲得 (キャプチャ) サポート書式
#include < net80211/ieee80211_var.h>
void
ieee80211_radiotap_attach( struct ieee80211com *, struct ieee80211_radiotap_header *th, int tlen, uint32_t tx_radiotap, struct ieee80211_radiotap_header *rh, int rlen, uint32_t rx_radiotap);
int
ieee80211_radiotap_active_vap( struct ieee80211vap *);
int
ieee80211_radiotap_active( struct ieee80211com *);
void
ieee80211_radiotap_tx( struct ieee80211vap *, struct mbuf *);
解説
net80211 レイヤ (層) は、 tcpdump(1) のようなツールによって理解される radiotap と呼ばれるデバイス独立のパケット獲得 (キャプチャ) 形式のサポートを含んでいる 802.11 ドライバによって使用されます。この機能は、通常の 802.11 フレーム構造の一部でない情報を含む 802.11 トラフィックを獲得するために設計されています。radiotap は、組み込みシステムで CPU とメモリ帯域幅を保存する必要性に対して拡張可能な捕獲形式である、ハードウェア独立の要求にバランスをとるように設計されていました。これらの問題は、オプションの捕獲フィールドの存在を示す拡張可能なビットマップが後に続いた標準の前置きから成る形式となりました。 radiotap をサポートする net80211 デバイスドライバは、 net80211 で共有される 2 つのパックされた構造を定義しています。これらの構造は、最初に ieee80211_radiotap_header 構造で、それに続く適切な順序のフィールドを伴うインスタンスとどのフィールドが存在するかを示し、ドライバによって書き込まれる it_present ビットマップのビットを設定するマクロを組み込んでいます。その結果、この情報は、成功した ieee80211_ifattach() 要求の後で ieee80211_radiotap_attach() の呼び出しを通して提供されます。
radiotap のセットアップで、ドライバは、 (制御が、パケットがデバイスに手渡される前に、 net80211 レイヤ (層) に返されないので) ちょうどフレームの送信/受信のためのパケットごとの捕獲状態を書き込む必要があり、転送パスで捕獲状態をディスパッチします。オーバヘッドを最小にするために、1 つ以上のプロセスが積極的にデータを獲得するときのみ、この作業は、行われるべきです。これは、 ieee80211_radiotap_active_vap() と ieee80211_radiotap_active() の 1 つでチェックされます。転送パスにおいて、獲得作業は、次のようになります:
if (ieee80211_radiotap_active_vap(vap)) { ... /* record transmit state */ ieee80211_radiotap_tx(vap, m); /* capture transmit event */ }
受信パスの間に、捕獲は net80211 で操作されますが、状態は、フレームをディスパッチする前に、獲得されなければなりません:
if (ieee80211_radiotap_active(ic)) { ... /* record receive state */ } ... ieee80211_input(...); /* packet capture handled in net80211 */
次のフィールドは、 net80211 に提供されたバッファに現れるべきである順序で、 radiotap に対して定義されています。
- IEEE80211_RADIOTAP_TSFT
- このフィールドは、MAC の 802.11 Time Synchronization Function (TSF) のマイクロ秒単位の符号なし 64 ビットの値を含みます。理論的には、受信されたフレームごとに、この値は、MPDU の最初のビットが MAC に届いたとき、記録されます。実際には、ハードウェアは TSF にスナップショットをとります、そうでなければ、このデータが、ドライバの調整なしで正確であると仮定することができません。
- IEEE80211_RADIOTAP_FLAGS
-
このフィールドは、これらのビットフラグの 1 つ以上を含んでいる、単一の符号なし 8 ビット値を含んでいます:
- IEEE80211_RADIOTAP_F_CFP
- フレームは、Contention Free Period (CFP) の間に送信/受信されます。
- IEEE80211_RADIOTAP_F_SHORTPRE
- フレームは、短い前置きで送信/受信されます。
- IEEE80211_RADIOTAP_F_WEP
- フレームは、暗号化されました。
- IEEE80211_RADIOTAP_F_FRAG
- フレームは、802.11 断片でした。
- IEEE80211_RADIOTAP_F_FCS
- フレームの内容は、FCS を含んでいます。
- IEEE80211_RADIOTAP_F_DATAPAD
- 潜在的にフレームの内容は、32 ビットの境界にペイロードを整列するために 802.11 ヘッダとペイロードされたデータの間に詰め物があります。
- IEEE80211_RADIOTAP_F_BADFCS
- フレームは、無効の FCS で受信されました。
- IEEE80211_RADIOTAP_F_SHORTGI
- フレームは、Short Guard Interval で送信/受信されました。
- IEEE80211_RADIOTAP_RATE
- このフィールドは、データ速度である単一の符号なし 8 ビット値を含んでいます。古い速度は、500Kbps 単位です。 (802.11n/HT チャネルで使用される) MCS 速度は、設定された高位ビットがあり、下位 7 ビットには、MCS があります。
- IEEE80211_RADIOTAP_CHANNEL
-
このフィールドは、2 つの符号なし 16 ビット値を含んでいます。最初の値は、フレームが送信/受信されたチャネルのための中心の周波数です。 2 番目の値は、チャネルの特性を指定するフラグを含むビットマップです。
このフィールドは、 IEEE80211_RADIOTAP_XCHANNEL を支持して推奨されませんが、古いデバイスのために捕獲ファイルで空間を節約するのに使用されます。
- IEEE80211_RADIOTAP_DBM_ANTSIGNAL
- このフィールドは、アンテナで RF 信号電力を示す単一の符号付き 8 ビット値を、 1mW からの差分でデシベル単位で、含んでいます、
- IEEE80211_RADIOTAP_DBM_ANTNOISE
- このフィールドは、アンテナで RF 雑音電力を示す単一の符号付き 8 ビット値を、 1mW からの差分でデシベル単位で、含んでいます、
- IEEE80211_RADIOTAP_DBM_TX_POWER
- 1mW 参照からの差分でデシベルとして表現される転送電力。このフィールドは、単一の符号付き 8 ビット値です。これは、アンテナのポートで測定された絶対的な電力レベルです。
- IEEE80211_RADIOTAP_ANTENNA
- このフィールドは、どのアンテナがフレームを転送するか、または受信するために使用されたかを指定する単一の符号なし 8 ビット値を含んでいます。アンテナの番号付けは、デバイス特有ですが、通常、主要なアンテナには、最も下位の番号があります。転送において、0 の値は、通常、アンテナの選択がデバイスに残されているかを意味するように思われます。
- IEEE80211_RADIOTAP_DB_ANTSIGNAL
- このフィールドは、任意の固定された参照からの差分でデシベル単位で、アンテナで RF シグナル電力を示す単一の符号なり 8 ビット値を含んでいます。
- IEEE80211_RADIOTAP_DB_ANTNOISE
- このフィールドは、任意の固定された参照からの差分でデシベル単位で、アンテナで RF 雑音電力を示す単一の符号ない 8 ビット値を含んでいます。
- IEEE80211_RADIOTAP_XCHANNEL
- このフィールドは、次の 4 つの値を含んでいます: チャネル属性について説明するフラグの 32 ビット符号なしビットマップ、 (通常チャネルセンタの) MHz 単位の 16 ビット符号なし周波数、 8 ビット符号なし IEEE チャネル番号と .5 dBm 単位の最大の規制の転送電力キャップを保持する符号付き 8 ビット値 (合計 8 バイト)。チャネルフラグは、次で定義されます: < net80211/_ieee80211.h> (部分集合だけが < net80211/ieee80211_radiotap.h> で見つけられます)。この特性は、 IEEE80211_RADIOTAP_CHANNEL に取って代わり、すべてのチャネル属性を完全に表現する唯一の方法であり、チャネル周波数と IEEE チャネル番号の間のマッピングです。
使用例
radiotap は、Intersil Prism ドライバのために定義を受信します:
#define WI_RX_RADIOTAP_PRESENT \ ((1 << IEEE80211_RADIOTAP_TSFT) \ (1 << IEEE80211_RADIOTAP_FLAGS) | \ (1 << IEEE80211_RADIOTAP_RATE) | \ (1 << IEEE80211_RADIOTAP_CHANNEL) | \ (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL) | \ (1 << IEEE80211_RADIOTAP_DB_ANTNOISE)) struct wi_rx_radiotap_header { struct ieee80211_radiotap_header wr_ihdr; uint64_t wr_tsf; uint8_t wr_flags; uint8_t wr_rate; uint16_t wr_chan_freq; uint16_t wr_chan_flags; uint8_t wr_antsignal; uint8_t wr_antnoise; } __packed;
そして、Atheros ドライバのために定義を転送します:
#define ATH_TX_RADIOTAP_PRESENT ( \ (1 << IEEE80211_RADIOTAP_TSFT) | \ (1 << IEEE80211_RADIOTAP_FLAGS) | \ (1 << IEEE80211_RADIOTAP_RATE) | \ (1 << IEEE80211_RADIOTAP_DBM_TX_POWER) | \ (1 << IEEE80211_RADIOTAP_ANTENNA) | \ (1 << IEEE80211_RADIOTAP_XCHANNEL) | \ 0) struct ath_tx_radiotap_header { struct ieee80211_radiotap_header wt_ihdr; uint64_t wt_tsf; uint8_t wt_flags; uint8_t wt_rate; uint8_t wt_txpower; uint8_t wt_antenna; uint32_t wt_chan_flags; uint16_t wt_chan_freq; uint8_t wt_chan_ieee; int8_t wt_chan_maxpow; } __packed;
歴史
ieee80211_radiotap の定義は、 NetBSD 1.5 ではじめて登場しました。作者
このマニュアルページのオリジナルバージョンは、 <bms@FreeBSD.org>と <darron@kewl.org>によって書かれました。August 4, 2009 | FreeBSD |