Tethering

Aktualizacje w Androidzie 13

Aktualizacja Więcej informacji
Wprowadzono CrossDevice Urządzenie krzyżowe
Wprowadzono dzielone tunelowanie Tunelowanie dzielone

Przegląd

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

Moduł Tethering umożliwia producentom OEM w całym ekosystemie Androida korzystanie z jednej, standardowej implementacji referencyjnej, która zapewnia następujące korzyści.

  • Użytkownicy końcowi uzyskują spójne środowisko na wszystkich urządzeniach z systemem Android i poprawki problemów ze współdziałaniem dzięki aktualizacjom modułów.

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

Tunelowanie dzielone

Aby obsługiwać przypadki użycia dzielonego tunelowania, do systemu Android 13 dodano nowy interfejs API umożliwiający określenie wykluczających tras.

Tunelowanie dzielone odnosi się do konfiguracji, w której określony ruch przechodzi przez VPN, a inny nie. Typowym przykładem jest sytuacja, gdy organizacja chce, aby ogólne surfowanie po Internecie, aplikacje wymagające dużej przepustowości (na przykład YouTube, Netflix) lub wrażliwe na opóźnienia (na przykład Office 365 ) omijały VPN. Zanim udostępniono tunelowanie dzielone, VpnService.Builder umożliwiał klientowi VPN wskazanie, że powinny być do niego kierowane tylko niektóre podsieci ( w tym trasy). Dzięki tunelowaniu dzielonemu możesz określić odwrotność: skierować cały ruch do VPN, z wyjątkiem określonych podsieci ( z wyłączeniem tras).

Sygnatura nowego API dzielonego tunelowania to:

public Builder excludeRoute(@NonNull IpPrefix prefix)

Urządzenie krzyżowe

CrossDevice, wprowadzony w systemie Android 13, ma na celu zapewnienie technologii komunikacji między urządzeniami przy użyciu standardowych protokołów. Zapewnia interfejsy API i funkcje umożliwiające wykrywanie urządzeń, uwierzytelniane połączenia i inne doświadczenia na różnych urządzeniach.

Motywacja na różnych urządzeniach

  • Ściślejsza współpraca z partnerami OEM. Producenci OEM mogą zintegrować swój własny system kluczy do kont z implementacją CrossDevice, zamiast korzystać z rozwiązania Google.
  • Bardziej widoczna implementacja protokołu. Moduł CrossDevice jest modułem typu open source, zapewniającym lepszy wgląd w szczegóły implementacji i lepszą historię prywatności przy wdrażaniu technologii CrossDevice.

Granica modułu CrossDevice

Interfejsy API różnych urządzeń W packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Usługi między urządzeniami W packages/modules/CrossDevice/service
  • NearbyService - 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 między urządzeniami

CrossDevice zależy od następujących czynników:

  • WiFi
  • Bluetooth
  • UWB
  • moduły-narzędzia-warunki wstępne
  • Biblioteki Proto

Opcje dostosowywania na różnych urządzeniach

Planujemy umożliwić producentom OEM dostosowywanie interfejsu użytkownika w przypadku połowy arkusza poprzez RRO. Nie ma planu dostosowywania funkcjonalności.

Strategia testowania na różnych urządzeniach

Planujemy dodać testy pakietu Android Compatibility Test Suite (CTS), aby zweryfikować funkcjonalność CrossDevice, oraz testy na różnych urządzeniach w MTS.

Odciążenie tetheringu eBPF

Aby zapewnić szybkie tethering bez odpowiadania na odciążenia sprzętowe, Android 11 udostępnia oprogramowanie do odciążania tetheringu o nazwie eBPF tethering offload na potrzeby pobierania IPv6 (ruch przepływający do urządzenia na uwięzi).

Od Androida 12 tę funkcjonalność (w tym kod programu eBPF) w całości zapewnia moduł Tethering, który obsługuje:

  • Pobieranie IPv6 (ruch kierowany do urządzenia na uwięzi)
  • Przesyłanie IPv6 (ruch płynący z urządzenia na uwięzi)
  • Przesyłanie i pobieranie protokołu IPv4 TCP/UDP (ruch przepływający do/z urządzenia na uwięzi)
  • Odciążenie eBPF

Ta funkcja jest domyślnie włączona. Użytkownicy mogą zmienić konfigurację config_tether_enable_bpf_offload na false przez RRO. Aby uzyskać więcej informacji, zobacz Dostosowywanie .

Obsługa protokołu IPv4 i IPv6

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

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

  • W przypadku sieci IPv6 moduł wykorzystuje bezstanową autokonfigurację adresu IPv6 (SLAAC) w celu przydzielania adresu IP.

Granica modułu

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

W przypadku Androida 11 i starszych moduł Tethering zawiera następujące pliki Androida 10 w 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ł Tethering ( com.android.tethering ) jest w formacie APEX i jest dostępny dla urządzeń z systemem Android 11 lub nowszym.

Dołącz usługę ConnectivityService

Od wersji Androida 12 do Tethering APEX dodano kod ConnectivityService , który implementuje centralny komponent łączności L3+. Zakres Tetheringu rozszerza się o moduł Łączności.

Zależności modułów

Moduł Tethering ma następujące zależności:

  • Metody API publiczne i systemowe 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ł Tethering nie obsługuje dostosowywania.

Testowanie

Pakiet testów zgodności systemu Android (CTS) weryfikuje funkcjonalność modułu Tethering.