テザリング

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Android 13 のアップデート

アップデート詳しくは
クロスデバイス導入クロスデバイス
スプリット トンネリングの導入スプリット トンネリング

概要

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

テザリング モジュールを使用すると、Android エコシステム全体の OEM が単一の標準参照実装を使用できるようになり、次の利点がもたらされます。

  • エンド ユーザーは、Android デバイス全体で一貫したエクスペリエンスを取得し、モジュールの更新を通じて相互運用性の問題を修正します。

  • OEM は、個々のカスタマイズのコストを削減しながら、通信事業者の要件を満たすことができます (同じ要件をさまざまな方法で実装する必要がないため)。

スプリット トンネリング

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

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

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

public Builder excludeRoute(@NonNull IpPrefix prefix)

クロスデバイス

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

クロスデバイスのモチベーション

  • OEM パートナーとの緊密な連携。 OEM は、Google のソリューションを使用する代わりに、独自のアカウント キー システムを CrossDevice の実装と統合できます。
  • プロトコルのより目に見える実装。 CrossDevice モジュールはオープン ソースであり、実装の詳細をより可視化し、CrossDevice テクノロジの実装に関するより良いプライバシー ストーリーを提供します。

CrossDevice モジュールの境界

クロスデバイス API packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
クロスデバイス サービスpackages/modules/CrossDevice/service
  • NearbyService - スキャン API

CrossDevice パッケージ形式

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

クロスデバイスの依存関係

CrossDevice は以下に依存します。

  • Wi-Fi
  • ブルートゥース
  • UWB
  • モジュール-ユーティリティ-前提条件
  • プロト ライブラリ

クロスデバイスのカスタマイズ オプション

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

クロスデバイス テスト戦略

Android Compatibility Test Suite (CTS) テストを追加してクロスデバイス機能を検証し、クロスデバイス テストを MTS に追加する予定です。

eBPF テザリング オフロード

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

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

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

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

IPv4 および IPv6 のサポート

テザリング モジュールは、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

モジュール形式

テザリング モジュール ( com.android.tethering ) は APEX 形式であり、Android 11 以降を実行しているデバイスで使用できます。

ConnectivityService を含める

Android 12 から、L3+ 接続の中心的なコンポーネントを実装するConnectivityServiceコードがテザリング APEX に追加されました。テザリングの範囲は、接続モジュールに拡張されます。

モジュールの依存関係

テザリング モジュールには、次の依存関係があります。

  • システム サーバーのパブリックおよびシステム API メソッド
  • システムサーバーとの安定した AIDL IPC インターフェイス
  • tetheroffload HIDL ( hardware/interfaces/tetheroffload/で定義)
  • DHCP サーバー (ネットワーク スタック モジュールの一部)

カスタマイズ

テザリング モジュールはカスタマイズをサポートしていません。

テスト

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