Tethering

Updates in Android 13

Aktualisieren Weitere Informationen
CrossDevice eingeführt CrossDevice
Split-Tunneling eingeführt 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-Hotspot, Bluetooth usw.) und ihre Abhängigkeiten (Interaktion mit Tethering-Berechtigung, IpServer und offloadController). Dieses Modul ist aktualisierbar, d. h., es kann Funktionsupdates außerhalb des normalen Android-Releasezyklus erhalten.

Das Tethering-Modul ermöglicht es OEMs im gesamten Android-Ökosystem, eine einzelne, standardmäßige Referenzimplementierung zu verwenden, die die folgenden Vorteile bietet.

  • Endnutzer profitieren von einer einheitlichen Nutzung auf allen Android-Geräten und von Fehlerkorrekturen bei Interoperabilitätsproblemen durch Modulupdates.

  • OEMs können die Anforderungen von Mobilfunkanbietern erfüllen und gleichzeitig die Kosten für individuelle Anpassungen senken, da sie nicht verschiedene Implementierungen derselben Anforderungen auf unterschiedliche Weise benötigen.

Split-Tunneling

Zur Unterstützung von Split-Tunneling-Anwendungsfällen wird in Android 13 eine neue API zum Angeben von Ausschlussrouten hinzugefügt.

Split Tunneling bezieht sich auf die Konfiguration, bei der bestimmter Traffic über das VPN und anderer Traffic nicht über das VPN geleitet wird. Ein häufiges Beispiel ist, wenn eine Organisation möchte, dass allgemeines Surfen im Web, bandbreitenintensive (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). Beim Split-Tunneling können Sie das Gegenteil angeben: Sie können den gesamten Traffic über das VPN leiten, mit Ausnahme bestimmter Subnetze (Ausschlussrouten).

Die Signatur der neuen Split-Tunneling-API lautet:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

CrossDevice wurde in Android 13 eingeführt und soll geräteübergreifende Kommunikationstechnologien mithilfe von Standardprotokollen ermöglichen. Es bietet APIs und Funktionen für die Geräteerkennung, authentifizierte Verbindungen und andere geräteübergreifende Funktionen.

Geräteübergreifende Motivation

  • Engere Zusammenarbeit mit OEM-Partnern OEMs können ihr eigenes Kontoschlüsselsystem in die CrossDevice-Implementierung einbinden, anstatt die Lösung von Google zu verwenden.
  • Das Protokoll wird besser sichtbar implementiert. Das CrossDevice-Modul ist Open Source. Das bietet mehr Transparenz bei den Implementierungsdetails und einen besseren Datenschutz für die Implementierung von CrossDevice-Technologien.

CrossDevice-Modulgrenze

CrossDevice APIs In packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
CrossDevice Services In packages/modules/CrossDevice/service
  • NearbyService – Scanning API

CrossDevice-Paketformat

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

CrossDevice-Abhängigkeiten

CrossDevice hängt von Folgendem ab:

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

Optionen zur geräteübergreifenden Anpassung

Wir planen, OEMs die Möglichkeit zu geben, die Benutzeroberfläche für das halbe Blatt über RRO anzupassen. Es ist nicht geplant, die Funktionalität anzupassen.

Cross-Device-Teststrategie

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

eBPF-Tethering-Auslagerung

Um High-Speed-Tethering ohne Hardware-Offloads zu ermöglichen, bietet Android 11 eine Tethering-Software-Offload-Lösung namens eBPF-Tethering-Offload für IPv6-Downloads (Traffic, der an das getetherte 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 zum verbundenen Gerät)
  • IPv6-Upload (Traffic von verbundenem Gerät)
  • IPv4-TCP/UDP-Upload und ‑Download (Traffic zur/von der verbundenen Einheit)
  • eBPF-Auslagerung

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

Unterstützung von IPv4 und IPv6

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

  • Für IPv4-Netzwerke richtet das Modul die Netzwerkadressübersetzung (Network Address Translation, NAT) ein und verwendet das Dynamic Host Configuration Protocol (DHCP) für die Zuweisung von IP-Adressen.

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

Modulgrenze

Unter Android 12 und höher befinden sich alle Dateien/Ordner unter packages/modules/Connectivity im Bereich 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 verfügbar und kann auf Geräten mit Android 11 oder höher verwendet werden.

ConnectivityService einbinden

Ab Android 12 wird der ConnectivityService-Code, der die zentrale Komponente der L3+-Konnektivität implementiert, dem Tethering-APEX hinzugefügt. Der Bereich „Tethering“ wird auf ein Konnektivitätsmodul ausgeweitet.

Modulabhängigkeiten

Das Tethering-Modul hat die folgenden Abhängigkeiten:

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

Personalisierung

Das Tethering-Modul unterstützt keine Anpassung.

Testen

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