Tethering

Aktualizacje w Androidzie 13

Aktualizuj Więcej informacji
Wprowadzono CrossDevice CrossDevice
Wprowadziliśmy tunelowanie podzielone. Tunelowanie podzielone

Omówienie

Moduł tetheringu udostępnia połączenie internetowe urządzenia z Androidem innym połączonym urządzeniom klienckim, które mogą łączyć się z urządzeniami tetheringu przez Wi-Fi, USB, Bluetooth lub Ethernet. Ten moduł obejmuje komponent tetheringu (USB, punkt dostępu Wi-Fi, Bluetooth itp.) oraz jego zależności (interakcje z uprawnieniami tetheringu, IpServeroffloadController). Moduł ten można aktualizować, co oznacza, że może on otrzymywać aktualizacje funkcji poza normalnym cyklem publikowania Androida.

Moduł udostępniania połączenia umożliwia OEM-om w całym ekosystemie Androida korzystanie z jednego standardowego implementowania referencyjnego, który zapewnia te korzyści.

  • Użytkownicy mają dostęp do spójnych funkcji na różnych urządzeniach z Androidem, a aktualizacje modułów rozwiązują problemy z współdziałaniem.

  • Producenci OEM mogą spełniać wymagania operatorów, a także obniżać koszty związane z indywidualnym dostosowywaniem (ponieważ nie muszą stosować różnych implementacji tych samych wymagań na różne sposoby).

Tunelowanie podzielone

Aby obsługiwać przypadki użycia tunelowania podzielonego, do Androida 13 dodano nowy interfejs API, który umożliwia określanie tras wykluczenia.

Tunelowanie podzielone to konfiguracja, w której pewien ruch przechodzi przez sieć VPN, a inny nie. Typowym przykładem jest sytuacja, w której organizacja chce, aby ogólne przeglądanie stron internetowych, aplikacje wymagające dużej przepustowości (np. YouTube, Netflix) lub aplikacje wrażliwe na opóźnienia (np. Office 365) omijały sieć VPN. Zanim udostępniono tunelowanie podzielone, klient VPN mógł wskazać, że tylko niektóre podsieci mają być do niego kierowane (include routes).VpnService.Builder Dzięki tunelowaniu podzielonemu możesz określić odwrotną kolejność: kierować cały ruch do sieci VPN z wyjątkiem określonych podsieci (wyklucz trasy).

Sygnatura nowego interfejsu API tunelowania podzielonego to:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

CrossDevice, wprowadzony w Androidzie 13, ma na celu udostępnianie technologii komunikacji między urządzeniami przy użyciu standardowych protokołów. Udostępnia interfejsy API i funkcje do wykrywania urządzeń, uwierzytelniania połączeń i innych funkcji obsługi na różnych urządzeniach.

Motywacja na różnych urządzeniach

  • ściślej współpracować z partnerami OEM; Producenci OEM mogą zintegrować własny system kluczy kont z implementacją CrossDevice, zamiast korzystać z rozwiązania Google.
  • bardziej widoczna implementacja protokołu; Moduł CrossDevice jest oparty na otwartym kodzie źródłowym, co zapewnia większą przejrzystość szczegółów implementacji i lepszą ochronę prywatności w przypadku wdrażania technologii CrossDevice.

Granica modułu CrossDevice

Interfejsy CrossDevice API packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Usługi cross-device packages/modules/CrossDevice/service
  • NearbyService – interfejs API skanowania;

Format pakietu CrossDevice

Główna funkcja tego modułu jest zawarta w pakiecie APEX. Zasoby są spakowane w pliku APK.

Zależności cross-device

Funkcja CrossDevice zależy od tych czynników:

  • Wi-Fi
  • Bluetooth
  • UWB
  • modules-utils-preconditions
  • Biblioteki prototypowe

Opcje dostosowywania w CrossDevice

Planujemy umożliwić OEM dostosowywanie interfejsu na potrzeby półpliku za pomocą RRO. Nie planujemy dostosowywać tej funkcji.

Strategia testowania na wielu urządzeniach

Planujemy dodać testy z pakietu Compatibility Test Suite (CTS) na Androida, aby sprawdzić działanie funkcji cross-device, oraz dodać testy cross-device do MTS.

odciążenie tetheringu eBPF.

Aby zapewnić szybkie połączenie z internetem bez korzystania z przesyłania danych na potrzeby sprzętu, Android 11 udostępnia rozwiązanie oparte na oprogramowaniu o nazwie eBPF tethering offload dla pobierania IPv6 (ruchu kierowanego na urządzenie z połączeniem tetheringowym).

Od Androida 12 ta funkcja (w tym kod programu eBPF) jest całkowicie obsługiwana przez moduł tworzenia połączeń, który umożliwia:

  • Pobieranie IPv6 (ruch kierowany na urządzenie połączone przez kabel)
  • Przesyłanie IPv6 (ruch z urządzenia połączonego przez Bluetooth)
  • Przesyłanie i przesyłanie dalej IPv4 TCP/UDP (ruch do/z urządzenia połączonego)
  • odciążanie przez eBPF.

Ta funkcja jest domyślnie włączona. Użytkownicy mogą zastąpić konfigurację config_tether_enable_bpf_offload wartością Fałsz za pomocą RRO. Więcej informacji znajdziesz w sekcji Dostosowywanie.

Obsługa IPv4 i IPv6

Moduł tetheringu obsługuje skomplikowany stos IPv4 i IPv6.

  • W przypadku sieci IPv4 moduł konfiguruje translację adresów sieciowych (NAT) i używa protokołu DHCP do przypisywania adresów IP.

  • W przypadku sieci IPv6 moduł stosuje automatyczną konfigurację adresów bezstanowych IPv6 (SLAAC) do przypisywania adresów IP.

Granica modułu

W przypadku Androida 12 i nowszych wszystkie pliki/foldery w folderze packages/modules/Connectivity znajdują się w zakresie działania modułu Tethering.

W przypadku Androida 11 lub starszego moduł tetheringu zawiera te pliki Androida 10 w folderze 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

Format modułu

Moduł udostępniania połączenia (com.android.tethering) jest w formacie APEX i jest dostępny na urządzeniach z Androidem 11 lub nowszym.

Dołącz ConnectivityService

Od Androida 12 kod ConnectivityService, który wdraża centralny komponent łączności L3+, jest dodawany do funkcji tetheringu w APEX. Zakres działania funkcji tetheringu rozszerza się na moduł łączności.

Zależności modułu

Moduł tetheringu ma te zależności:

  • Publiczne i systemowe metody interfejsu API na serwerze systemowym
  • stabilny interfejs AIDL IPC z serwerem systemowym;
  • tetheroffload HIDL (zdefiniowany w hardware/interfaces/tetheroffload/)
  • Serwer DHCP (część modułu Network Stack)

Dostosowywanie

Moduł tetheringu nie obsługuje dostosowywania.

Testowanie

Pakiet testów zgodności z Androidem (CTS) sprawdza funkcjonalność modułu tetheringu.