2017年3月26日日曜日

フレームアグリゲーション有効/無効時におけるiwlwifiの挙動

送信処理
  • DMA転送は1フレームごとに行われるため,フレームアグリゲーションの有無で処理は変わらない

送信完了処理
  • フレームアグリゲーション無効時
    • ACKフレームの結果を通知し,当該フレームをiwlwifiの送信キューから破棄する.
    • 必ず,1フレームごとに処理が行われる(1フレーム破棄/1回の送信完了処理)
  • フレームアグリゲーション有効時
    • デバイスから3種類の通知情報を受信する
      • フレームアグリゲーションの結果(※送信結果ではない)
        • アグリゲーションされたフレーム(確認した限りでは最大で5フレーム)のそれぞれの,転送結果,再送回数(転送回数?),etc...
        • デバイスへ転送時,つまりACKフレームの到着前に通知されるため,この段階では送信結果はわからない(コード中のコメントより)
      • Block-ACKの結果(送信結果)
        • 結果をもとに破棄可能なフレームを決定する
        • TCPと同じように宛先へ到達の確認が取れているフレームまでを破棄することが可能
          • 例:1,2,3,4を送信→3のみロス→1,2を破棄→3を次回の送信機会で最初に送信(再送)する
          • TCP+Sackみたいな感じ...
          • 無効時と同様にアグリゲーションされたフレームの再送にも上限回数があるっぽい
      • ACKフレームの結果(送信結果)
        • フレームアグリゲーション有効時でも単発のACKが帰ってきた場合は上記と処理が異なる
          • 単発か否かの判定はここ
            • フレームアグリゲーション無効時の場合は常にtx_resp->frame_countが1で,有効はおそらく1〜5
        • 破棄するフレームは,ACKフレームに該当するフレームとそれ以降連続して確認が取れているフレームまで
          • 例:1,2,3,4,5送信→3のみロス→1,2を破棄し3を再送→3をACK→3,4,5を破棄
        • アグリゲーションしたフレームの再送に上限回数があるのはヘッドラインオブブロッキングを防ぐため
        • 呼ばれる関数は無効時と同じであるが,1回の処理で複数のフレームを破棄するため処理が異なる

0 件のコメント:

コメントを投稿