テザリング

Android 13 の更新

更新 詳細情報
CrossDevice を導入しました CrossDevice
スプリット トンネリングを導入しました スプリット トンネリング

概要

Tethering モジュールは、接続されている他のクライアント デバイス(Wi-Fi、USB、Bluetooth、イーサネット経由でテザリング デバイスに接続可能)と、Android デバイスのインターネット接続を共有します。このモジュールには、テザリング コンポーネント(USB、Wi-Fi アクセス ポイント、Bluetooth など)とその依存関係(テザリング利用資格、IpServeroffloadController の操作)が含まれます。このモジュールは更新可能です。つまり、通常の Android リリース サイクル外で機能のアップデートを受信できます。

Tethering モジュールにより、OEM は Android エコシステム全体で、単一の標準リファレンス実装を使用できます。これには次のような利点があります。

  • エンドユーザーが、Android デバイス全体で一貫したエクスペリエンスを得られ、モジュール アップデートを通じて相互運用性の問題を修正できる。

  • OEM が、携帯通信会社の要件を完全に満たしつつ、個別のカスタマイズのコストを削減できる(同じ要件を異なる方法で実装する必要がないため)。

スプリット トンネリング

スプリット トンネリングのユースケースをサポートするため、Android 13 にはルートの除外を指定する新しい API が追加されています。

スプリット トンネリングとは、特定のトラフィックは VPN を通過するがそれ以外のトラフィックは通過しない構成を指します。よくある例としては、一般的なネット サーフィン、帯域幅が重いサービス(YouTube や Netflix など)、レイテンシの影響を受けやすいアプリケーション(Office 365 など)に VPN をバイパスさせたい組織が使用する場合があります。スプリット トンネリングが利用可能になる前、VpnService.Builder は VPN クライアントに対して、一部のサブネットのみを VPN にルーティングする(ルートを含める)よう指示することを許可していました。スプリット トンネリングでは、その反対に、特定のサブネットを除くすべてのトラフィックを VPN にルーティングする(ルートを除外する)よう指示できます。

新しいスプリット トンネリング API の署名は次のとおりです。

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

Android 13 で導入された CrossDevice は、標準プロトコルを使用するクロスデバイス通信テクノロジーを提供することを目的としています。CrossDevice は、デバイスの検出、認証済み接続、およびその他のクロスデバイス エクスペリエンスのための API と機能を提供します。

CrossDevice の目的

  • OEM パートナーとのコラボレーションをより強化します。OEM は、Google のソリューションを使用しなくても、OEM 固有のアカウントキー システムを CrossDevice 実装と統合できます。
  • プロトコルの実装の可視化を促進します。CrossDevice モジュールはオープンソースであり、実装の詳細の可視性を高めるとともに、CrossDevice テクノロジーの実装に関するプライバシーを強化します。

CrossDevice のモジュール境界

CrossDevice API packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
CrossDevice サービス packages/modules/CrossDevice/service
  • NearbyService - スキャン API

CrossDevice のパッケージ形式

このモジュールの主要な機能は APEX パッケージに含まれています。リソースは APK にパッケージ化されています。

CrossDevice の依存関係

CrossDevice は以下に依存します。

  • WiFi
  • Bluetooth
  • UWB
  • modules-utils-preconditions
  • proto ライブラリ

CrossDevice のカスタマイズ オプション

OEM が RRO を使用してハーフシートの UI をカスタマイズできるようにする予定です。機能をカスタマイズする予定はありません。

CrossDevice のテスト戦略

CrossDevice の機能を検証する Android 互換性テストスイート(CTS)テストを追加し、クロスデバイス テストを MTS に組み込む予定です。

eBPF テザリング オフロード

Android 11 では、ハードウェア オフロードについて応答しない高速テザリングを提供するため、IPv6 ダウンロード(テザリング デバイスに流れ込むトラフィック)用に、eBPF テザリング オフロードと呼ばれるテザリング ソフトウェア オフロード ソリューションが提供されています。

Android 12 以降、この機能(eBPF プログラム コードを含む)全体は、以下をサポートする Tethering モジュールによって提供されます。

  • IPv6 ダウンロード(テザリング デバイスに流れ込むトラフィック)
  • IPv6 アップロード(テザリング デバイスから流れ出るトラフィック)
  • IPv4 TCP / UDP アップロードおよびダウンストリーム(テザリング デバイスとの間で流れるトラフィック)
  • eBPF オフロード

この機能はデフォルトで有効になっており、ユーザーは RRO で config_tether_enable_bpf_offload 構成をオーバーライドして false に設定できます。詳しくは、カスタマイズをご覧ください。

IPv4 と IPv6 のサポート

Tethering モジュールは、IPv4 と IPv6 のデュアル スタックをサポートしています。

  • IPv4 ネットワークの場合、モジュールはネットワーク アドレス変換(NAT)を設定し、IP アドレス割り当てに動的ホスト構成プロトコル(DHCP)を採用します。

  • IPv6 ネットワークの場合、モジュールは IP アドレス割り当てに IPv6 のステートレス アドレス自動設定(SLAAC)を採用します。

モジュールの境界

Android 12 以降では、packages/modules/Connectivity の下のすべてのファイルとフォルダは Tethering モジュールのスコープ内にあります。

Android 11 以前では、Tethering モジュールの packages/modules/Tethering に以下の Android 10 ファイルがあります。

  • frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java
  • frameworks/base/services/core/java/com/android/server/connectivity/tethering/
  • frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
  • frameworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.java
  • frameworks/base/services/net/java/android/net/{netlink,dhcp}/*
  • frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.java
  • frameworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidl
  • frameworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.java
  • frameworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.java
  • frameworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.java
  • frameworks/base/core/java/android/os/INetworkManagementService.aidl
  • frameworks/base/core/java/android/bluetooth/BluetoothPan.java
  • frameworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
  • packages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.java
  • packages/apps/Settings/src/com/android/settings/network/TetherProvisioningActivity.java

モジュールの形式

Tethering モジュール(com.android.tethering)は APEX 形式であり、Android 11 以降を搭載したデバイスで利用できます。

ConnectivityService の追加

Android 12 以降では、L3+ 接続の中心コンポーネントを実装する ConnectivityService コードが Tethering APEX に追加されています。Tethering モジュールのスコープが Connectivity モジュールに拡張されます。

モジュールの依存関係

Tethering モジュールには以下の依存関係があります。

  • システム サーバーの公開 API メソッドとシステム API メソッド
  • システム サーバーとの安定版 AIDL IPC インターフェース
  • tetheroffload HIDL(hardware/interfaces/tetheroffload/ で定義)
  • DHCP サーバー(Network Stack モジュールの一部)

カスタマイズ

Tethering モジュールはカスタマイズをサポートしていません。

テスト

Android 互換性テストスイート(CTS)は、Tethering モジュールの機能を検証します。