テザリング時のハードウェア オフロード

テザリング オフロードによってテザリング トラフィックを USB または Wi-Fi 経由でハードウェアにオフロードすると、デバイスの電力消費を抑えてパフォーマンスを向上できます。モデムと周辺機器の間の直接経路を指定してアプリ プロセッサをバイパスすることで、テザリング トラフィックをオフロードします。

仕様

Android 8.1 以降のデバイスでは、テザリング オフロードを使用して、IPv4、IPv6、または IPv4 + IPv6 転送をハードウェアにオフロードできます。

オフロード機能ですべてのパケットをオフロードする必要はありません。フレームワークはソフトウェア内のあらゆるパケットを処理できます。通常、コントロール パケットはソフトウェアで処理されます。IPv4 ポートはテザリング トラフィックとデバイス トラフィックで共有されるため、カーネルがフロー状態を構築できるように、IPv4 セッションのセットアップとティアダウン パケット(SYN/SYN + ACK、FIN など)はソフトウェアで処理される必要があります。フレームワークはコントロール プレーンとステートマシンを提供します。また、ハードウェアにアップストリームとダウンストリームのインターフェースやプレフィックスに関する情報も提供します。

IPv4 の場合、ハードウェアによって IPv4 ネットワーク アドレス変換(NAT)セッションのセットアップ パケットが CPU に送られます。カーネルが NAT エントリを作成し、HAL 実装はフレームワーク提供のファイル記述子をもとにエントリを監視して、ハードウェアでこれらのフローを処理します。つまり、HAL は開かれた NF_NETLINK_CONNTRACK ソケットをフレームワークから取得するため、HAL 実装に CAP_NET_* は不要です。ハードウェアは現在アクティブなフローの NAT 状態の更新をフレームワークに定期的に送信し、フレームワークは対応するカーネル接続の追跡状態エントリを更新します。

IPv6 の場合、トラフィックをオフロードできない IPv6 宛先プレフィックスのリストがフレームワークによってプログラムされます。他のテザリング パケットはすべてオフロードできます。

データ利用明細については、NetworkStatsService のデータ使用量ポーリングにより、フレームワークがハードウェアにトラフィック統計情報をリクエストします。また、フレームワークはデータ使用量の上限を HAL 経由でハードウェアに伝えます。

ハードウェア要件

テザリング オフロードを実装するには、ハードウェアがメイン プロセッサを介してトラフィックを送信しなくても、モデムと Wi-Fi または USB の間で IP パケットを転送できる必要があります。

実装

テザリング オフロード機能を有効にするには、以下の設定 HAL(IOffloadConfig)とコントロール HAL(IOffloadControl)の両方を実装する必要があります。

設定 HAL: IOffloadConfig

IOffloadConfig HAL は、テザリング オフロードの実装を開始します。フレームワークは、事前に接続された NF_NETLINK_CONNTRACK ソケットを HAL 実装に提供します。実装では、これを使用して IPv4 フローを監視できます。促進されるのは転送フローのみです。

コントロール HAL: IOffloadControl

IOffloadControl HAL はオフロードの実装を制御します。次のメソッドを実装する必要があります。

  • オフロード ハードウェアの開始と停止: initOffload/stopOffload を使用し、setLocalPrefixes を指定してローカル IP アドレスやその他のネットワークをオフロードから除外します。
  • アップストリーム インターフェース、IPv4 アドレス、IPv6 ゲートウェイの設定: setUpstreamParameters を使用し、addDownstream/removeDownstream を指定してダウンストリーム IP アドレスの範囲を設定します。
  • データ利用明細: getForwardedStats/setDataLimit を使用します。

ベンダー HAL も ITetheringOffloadCallback インターフェースを介してコールバックを送信し、フレームワークに以下を通知する必要があります。

  • オフロードの開始や停止などの非同期イベント(OffloadCallbackEvent)
  • 特定の IPv4 フローにトラフィックが含まれているためカーネルによって閉じられないことを示すために、定期的に送信する必要がある NAT タイムアウトの更新

検証

テザリング オフロードの実装を検証するには、手動テストまたは自動テストを使用して、テザリングと Wi-Fi アクセス ポイントが想定どおりに機能することを確認します。ベンダー テストスイート(VTS)には、テザリング オフロード HAL のテストが含まれています。