テザリング オフロードによってテザリング トラフィックを 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 のテストが含まれています。