Tethering

Aktualizacje w Androidzie 13

Aktualizuj Więcej informacji
Wprowadzenie funkcji CrossDevice CrossDevice
Wprowadzenie tunelowania dzielonego Tunelowanie dzielone

Omówienie

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

Moduł tetheringu umożliwia producentom OEM w całym ekosystemie Androida korzystanie z jednej standardowej implementacji referencyjnej, która zapewnia te korzyści:

  • Dzięki aktualizacjom modułów użytkownicy mają spójne wrażenia na różnych urządzeniach z Androidem i mogą rozwiązywać problemy z interoperacyjnością.

  • Producenci OEM mogą spełniać wymagania operatorów, a jednocześnie obniżać koszty indywidualnych dostosowań (ponieważ nie potrzebują różnych implementacji tych samych wymagań na różne sposoby).

Tunelowanie dzielone

Aby obsługiwać przypadki użycia tunelowania dzielonego, w Androidzie 13 dodano nowy interfejs API do określania wykluczonych tras.

Podzielony tunel to konfiguracja, w której część ruchu przechodzi przez sieć VPN, a część nie. Częstym przykładem jest sytuacja, w której organizacja chce, aby ogólne przeglądanie internetu, 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 stało się dostępne tunelowanie dzielone, parametr VpnService.Builder umożliwiał klientowi VPN wskazanie, że tylko niektóre podsieci powinny być do niego kierowane (trasy include). Dzielone tunelowanie umożliwia określenie odwrotności: kierowanie całego ruchu do sieci VPN z wyjątkiem określonych podsieci (trasy wykluczające).

Sygnatura nowego interfejsu API tunelowania dzielonego 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. Zawiera interfejsy API i funkcje do wykrywania urządzeń, uwierzytelnionego połączenia i innych funkcji na różnych urządzeniach.

Motywacja na różnych urządzeniach

  • ściślejsza współpraca z partnerami OEM; Producenci OEM mogą zintegrować własny system kluczy konta z implementacją CrossDevice zamiast korzystać z rozwiązania Google.
  • Bardziej widoczne wdrożenie protokołu. Moduł CrossDevice jest dostępny na licencji open source, co zapewnia większą przejrzystość szczegółów implementacji i lepszą ochronę prywatności w przypadku wdrożenia technologii CrossDevice.

CrossDevice module boundary

Interfejsy CrossDevice API packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Usługi na różnych urządzeniach 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 plik APK.

Zależności CrossDevice

CrossDevice zależy od tych czynników:

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

Opcje dostosowywania na różnych urządzeniach

Planujemy umożliwić producentom OEM dostosowywanie interfejsu użytkownika do połowy arkusza za pomocą RRO. Nie planujemy dostosowywania tej funkcji.

Strategia testowania na różnych urządzeniach

Planujemy dodać testy pakietu CTS (Android Compatibility Test Suite), aby weryfikować funkcje na różnych urządzeniach, a także testy na różnych urządzeniach do MTS.

Przekierowanie tetheringu eBPF

Aby zapewnić szybkie udostępnianie internetu bez polegania na sprzętowym odciążaniu, Android 11 udostępnia rozwiązanie do odciążania oprogramowania do udostępniania internetu o nazwie eBPF do odciążania udostępniania internetu w przypadku pobierania IPv6 (ruch przychodzący na urządzenie, na którym udostępniany jest internet).

Od Androida 12 ta funkcja (w tym kod programu eBPF) jest w całości udostępniana przez moduł tetheringu, który obsługuje te elementy:

  • Pobieranie IPv6 (ruch do urządzenia podłączonego do tetheringu)
  • Przesyłanie IPv6 (ruch z urządzenia podłączonego do internetu)
  • Przesyłanie i pobieranie danych przez TCP/UDP w IPv4 (ruch do/z urządzenia podłączonego do internetu)
  • Odciążanie eBPF

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

Obsługa IPv4 i IPv6

Moduł tetheringu obsługuje stos podwójny IPv4 i IPv6.

  • W przypadku sieci IPv4 moduł konfiguruje translację adresów sieciowych (NAT) i przyjmuje protokół DHCP do przypisywania adresów IP.

  • W przypadku sieci IPv6 moduł przyjmuje bezstanową autokonfigurację adresu IPv6 (SLAAC) do przypisywania adresów IP.

Granica modułu

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

W przypadku Androida 11 i starszych wersji moduł Tethering zawiera w packages/modules/Tethering te pliki z Androida 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

Format modułu

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

Uwzględnij ConnectivityService

Od Androida 12 do pakietu APEX Tethering dodawany jest ConnectivityService kod, który implementuje centralny komponent łączności L3+. Zakres tetheringu rozszerza się na moduł łączności.

Zależności modułów

Moduł Tethering ma te zależności:

  • Publiczne i systemowe metody interfejsu API na serwerze systemowym
  • Stabilne interfejsy IPC AIDL komunikują się z serwerem systemowym.
  • tetheroffload HIDL (zdefiniowany w hardware/interfaces/tetheroffload/)
  • Serwer DHCP (część modułu Network Stack)

Dostosowywanie

Moduł Tethering nie obsługuje dostosowywania.

Testowanie

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