EN JA
IEEE80211_OUTPUT(9)
IEEE80211_OUTPUT(9) FreeBSD Kernel Developer's Manual IEEE80211_OUTPUT(9)

名称

ieee80211_outputソフトウェア 802.11 スタック出力関数

書式

#include < net80211/ieee80211_var.h>

int
M_WME_GETAC( struct mbuf *);

int
M_SEQNO_GET( struct mbuf *);

struct ieee80211_key *
ieee80211_crypto_encap( struct ieee80211_node *, struct mbuf *);

void
ieee80211_process_callback( struct ieee80211_node *, struct mbuf *, int);

解説

802.11 のデバイスドライバをサポートする net80211 レイヤ (層) は、フレームを転送するために必要な作業のほとんどを扱います。通常、ドライバは、転送優先度で分類され割り当てられた完全にカプセル化された 802.11 フレームを受信します。後は、暗号カプセル化、任意のハードウェア特有の状態の準備とデバイスへのパケットを押し出すことだけです。外向きのフレームは、 net80211 レイヤ (層) (例えば、管理フレーム) によって生成されるか、または ifnet(9) 転送キューを通して上位のレイヤから伝えられます。データフレームは、集合、 802.11 カプセル化を扱う net80211 を通して転送フローのために伝えられ、次にその転送キューを通してドライバへのフレームをディスパッチします。

転送のためのドライバに到達するフレームによって、2 つの制御パスがあります。データパケットは、デバイスの if_snd キューに入れられ、ドライバの if_start メソッドが呼び出されます。他のフレームは、(ドライバによって行われないなら) キューに入れることなしに ic_raw_xmit メソッドをして伝えられます。生は転送パスは、(アクセスポイントとして動作するとき) bpf(4) とアイドルステーションをプローブする (調べる) ために net80211 によって生成された NullData フレームを通してそれらを注入するユーザアプリケーションからデータフレームをインクルードします。

net80211 は、データフレームの取り扱いのためのすべての関連するブックキーピングと管理を取り扱います。データフレームは、 IEEE80211_S_RUN 状態で vap のために単に転送されます。例えば、CAC または CSA がアクティブであるとき、下方に送信されたフレームをチェックする必要はありません。同様に、 net80211 は、バックグラウンドスキャンと電源節約モードのような活動を取り扱い、“full power”で BSS チャネルで動作しないなら、フレームは、ドライバに送信されません。

転送のためにドライバに渡されたすべてのフレームは、 m_pkthdr.rcvif フィールドのノードテーブルエントリへの参照を保持します。ノードは、フレームの宛先に関連しています。通常、それは、受信側のエントリですが、場合によっては、それは、プレースホルダエントリまたは (メッシュネットワークでのような) “next hop station” (次の中継点ステーション) であるかもしれません。すべての場合において、参照は、転送作業が終了するとき、 ieee80211_free_node() で再要求されなければなりません。覚えておく規則は、次の通りです: net80211 は、 mbuf のための責任と転送のため渡される各フレームがあるドライバへ“node reference” (ノード参照) を渡します。

パケットの分類

転送のために net80211 によって渡されたすべてのフレームは、受信ステーションに割り付けられた任意の vlan タグ、そして/または、IP または IPv6 ヘッダで任意の Diffserv 設定に基づく優先度を割り当てられます。 vlan と Diffserv 優先度の両方が、存在しているなら、2 つのより高いものが使用されます。また、WME/WMM が使用されているなら、(ステーションモードの) 任意の ACM ポリシも強制されます。結果の AC は、mbuf にアタッチされ、 M_WME_GETAC() マクロを使用して読み戻されます。

PAE/EAPOL フレームは、 M_EAPOL mbuf フラグでタグ付けをされます。ドライバは、通常、管理フレームのための転送速度を使用することによって、慎重にそれらを転送するべきです。マルチキャスト/ブロードキャスト (同報通信) フレームは、 M_MCAST mbuf フラグでマークされます。直後に続くより多くのフレームがあるステーションの電源節約キューから出てくるフレームのは、 M_MORE_DATA mbuf フラグでマークされます。そのようなフレームは、ドライバの if_snd キューに連続して入れられ、ドライバは、それらをデバイスに渡すとき、順序を保持するべきです。

断片化されたフレーム

net80211 レイヤ (層) は、ドライバが、 IEEE80211_C_TXFRAG がケーパビリティをマークするなら、 iv_fragthreshold の設定に従って、データフレームを断片化します。断片化されたフレームは、 m_nextpkt とともに継れた断片でデバイス転送キューに置かれます。各フレームは、 M_FRAG mbuf フラグでマークされ、1 番目と最終は、それぞれ M_FIRSTFRAGM_LASTFRAG でマークされます。ドライバは、すべての断片を処理するか、または何も処理しないと予想されます。

転送コールバック

net80211 によって送信されたフレームは、それらの転送が完了したとき、コールバックが行われるべきであることを示すために M_TXCB mbuf フラグでタグ付けされます。コールバックは、エラーが起こったなら、最後のパラメータを 0 以外に設定し、そうでなければ、0 に設定されて、 ieee80211_process_callback() を使用して行われます。 net80211 は、ドライバが状態を決定できないかもしれないことを理解していることに注意してください。 1 つの ACK フレームが受信され、および/または、デバイスがハードウェアで転送要求をキューに入れられるなら、デバイスは、報告しません、そして、フレームが成功してキューに入れられたどうかの状態のみを報告します。

関連項目

bpf(4), ieee80211(9), ifnet(9)
March 29, 2010 FreeBSD