Tethering

Updates bei Android 13

Aktualisieren Weitere Informationen
Einführung von „CrossDevice“ CrossDevice
Einführung von Split-Tunneling Split-Tunneling

Übersicht

Das Tethering-Modul teilt die Internetverbindung eines Android-Geräts mit anderen verbundenen Clientgeräten, die sich über WLAN, USB, Bluetooth oder Ethernet mit Tethering-Geräten verbinden können. Dieses Modul umfasst die Tethering-Komponente (USB, WLAN-Zugangspunkt, Bluetooth usw.) und ihre Abhängigkeiten (Interaktion mit der Tethering-Berechtigung, IpServer und offloadController). Dieses Modul kann aktualisiert werden, d. h., es kann außerhalb des normalen Android-Releasezyklus Funktionsupdates erhalten.

Mit dem Tethering-Modul können OEMs in der Android-Umgebung eine einzige Standardreferenzimplementierung verwenden, die folgende Vorteile bietet.

  • Endnutzer erhalten eine einheitliche Nutzung auf allen Android-Geräten und Fehlerkorrekturen für Interoperabilitätsprobleme durch Modulupdates.

  • OEMs können die Anforderungen der Mobilfunkanbieter erfüllen und gleichzeitig die Kosten für individuelle Anpassungen senken, da keine unterschiedlichen Implementierungen derselben Anforderungen erforderlich sind.

Split-Tunneling

Zur Unterstützung von Anwendungsfällen für Split-Tunneling wurde Android 13 eine neue API hinzugefügt, mit der auszuschließende Routen angegeben werden können.

Beim Split-Tunneling wird ein bestimmter Traffic über das VPN geleitet, während anderer Traffic nicht über das VPN geleitet wird. Ein häufiges Beispiel ist, wenn eine Organisation möchte, dass das allgemeine Surfen im Web, bandbreitenintensive Anwendungen (z. B. YouTube, Netflix) oder latenzempfindliche Anwendungen (z. B. Office 365) das VPN umgehen. Bevor Split-Tunneling verfügbar war, konnte der VPN-Client mit VpnService.Builder angeben, dass nur einige Subnetze an ihn weitergeleitet werden sollten (include-Routen). Mit Split-Tunneling können Sie das Gegenteil angeben: Alle Zugriffe werden mit Ausnahme bestimmter Subnetze an das VPN weitergeleitet (ausschließende Routen).

Die Signatur der neuen Split-Tunneling-API lautet:

public Builder excludeRoute(@NonNull IpPrefix prefix)

Geräteübergreifend

CrossDevice, das mit Android 13 eingeführt wurde, zielt darauf ab, geräteübergreifende Kommunikationstechnologien mithilfe von Standardprotokollen bereitzustellen. Sie bietet APIs und Funktionen für die Geräteerkennung, authentifizierte Verbindungen und andere geräteübergreifende Erfahrungen.

CrossDevice-Motivation

  • Engere Zusammenarbeit mit OEM-Partnern OEMs können ihr eigenes Kontoschlüsselsystem in die CrossDevice-Implementierung einbinden, anstatt die Lösung von Google verwenden zu müssen.
  • Die Implementierung des Protokolls ist jetzt besser sichtbar. Das CrossDevice-Modul ist Open Source und bietet mehr Transparenz bei den Implementierungsdetails und eine bessere Datenschutzstrategie für die Implementierung von CrossDevice-Technologien.

Geräteübergreifendes Modulende

Geräteübergreifende APIs In packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Geräteübergreifende Dienste In packages/modules/CrossDevice/service
  • NearbyService – Scanning API

CrossDevice-Paketformat

Die Hauptfunktion dieses Moduls ist in einem APEX-Paket enthalten. Die Ressourcen sind in einem APK verpackt.

Geräteübergreifende Abhängigkeiten

Die Funktion „CrossDevice“ hängt von folgenden Faktoren ab:

  • WLAN
  • Bluetooth
  • UWB
  • modules-utils-preconditions
  • Proto-Bibliotheken

Geräteübergreifende Anpassungsoptionen

Wir planen, OEMs die Anpassung der Benutzeroberfläche für die Halbzeitansicht bis zum RRO zu ermöglichen. Es ist nicht geplant, die Funktion anzupassen.

Strategie für geräteübergreifende Tests

Wir planen, CTS-Tests (Android Compatibility Test Suite) hinzuzufügen, um die geräteübergreifende Funktionalität zu überprüfen, und geräteübergreifende Tests in MTS.

eBPF-Tethering-Offload

Um Hochgeschwindigkeits-Tethering ohne Hardware-Offloads bereitzustellen, bietet Android 11 eine Software-Offload-Lösung für Tethering namens eBPF-Tethering-Offload für IPv6-Downloads (Traffic, der an das verbundene Gerät gesendet wird).

Ab Android 12 wird diese Funktion (einschließlich des eBPF-Programmcodes) vollständig vom Tethering-Modul bereitgestellt, das Folgendes unterstützt:

  • IPv6-Download (Traffic, der an das gekoppelte Gerät fließt)
  • IPv6-Upload (Traffic von einem gekoppelten Gerät)
  • IPv4-TCP/UDP-Upload und -Downstream (Traffic zum/vom gekoppelten Gerät)
  • eBPF-Offload

Diese Funktion ist standardmäßig aktiviert. Nutzer können die config_tether_enable_bpf_offload-Konfiguration über RRO auf „false“ setzen. Weitere Informationen finden Sie unter Anpassen.

IPv4- und IPv6-Unterstützung

Das Tethering-Modul unterstützt IPv4- und IPv6-Dual-Stack.

  • Bei IPv4-Netzwerken richtet das Modul Network Address Translation (NAT) ein und verwendet das dynamische Hostkonfigurationsprotokoll (Dynamic Host Configuration Protocol, DHCP) für die Zuweisung von IP-Adressen.

  • Bei IPv6-Netzwerken verwendet das Modul die IPv6 Stateless Address Autoconfiguration (SLAAC) für die IP‑Adresszuweisung.

Modulgrenze

Bei Android 12 und höher fallen alle Dateien und Ordner unter packages/modules/Connectivity in den Geltungsbereich des Tethering-Moduls.

Bei Android 11 und niedriger enthält das Tethering-Modul die folgenden Android 10-Dateien in packages/modules/Tethering.

  • 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

Modulformat

Das Tethering-Modul (com.android.tethering) ist im APEX-Format und für Geräte mit Android 11 oder höher verfügbar.

ConnectivityService einschließen

Ab Android 12 wird der ConnectivityService-Code, der die zentrale Komponente der L3+-Konnektivität implementiert, dem Tethering Apex hinzugefügt. Das Tethering wird in ein Konnektivitätsmodul aufgenommen.

Modulabhängigkeiten

Für das Tethering-Modul gelten die folgenden Abhängigkeiten:

  • Öffentliche und System-API-Methoden auf dem Systemserver
  • Stabile AIDL-IPCs-Schnittstelle mit dem Systemserver
  • tetheroffload HIDL (definiert in hardware/interfaces/tetheroffload/)
  • DHCP-Server (Teil des Netzwerkstacks)

Personalisierung

Das Tethering-Modul unterstützt keine Anpassungen.

Testen

Die Android Compatibility Test Suite (CTS) prüft die Funktionalität des Tethering-Moduls.