Tethering

Aktualizacje w Androidzie 13

Aktualizuj Więcej informacji
Wprowadzono wiele urządzeń CrossDevice
Wprowadziliśmy tunelowanie podzielone. Dzielone tunelowanie

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 wydawniczym 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 dzielonego tunelowania, do Androida 13 dodaliśmy nowy interfejs API umożliwiający wykluczanie tras.

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).

Podpis nowego interfejsu API do dzielonego tunelowania wygląda tak:

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. Zapewnia interfejsy API i funkcje umożliwiające wykrywanie urządzeń, uwierzytelnianie połączeń i inne funkcje 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 W: 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 dostosowania na różnych urządzeniach

Planujemy umożliwić producentom OEM dostosowywanie interfejsu na potrzeby półpliku za pomocą RRO. Nie planujemy dostosować 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 przewodnikiem bez korzystania z przesyłania danych na potrzeby sprzętu, Android 11 udostępnia rozwiązanie do przesyłania danych na potrzeby połączenia z przewodnikiem o nazwie eBPF offload tethering for IPv6 download (przesyłanie danych na potrzeby połączenia z przewodnikiem w ramach IPv6) (ruchu danych do urządzenia z przewodnikiem).

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 (ruchu do urządzenia połączonego przez Bluetooth)
  • Przesyłanie IPv6 (ruch z urządzenia połączonego przez Bluetooth)
  • Przesyłanie i pobieranie adresów IPv4 TCP/UDP (ruch przepływający do/z urządzenia powiązanego)
  • Odciążanie 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 Androidzie 12 i nowszych wszystkie pliki/foldery w sekcji packages/modules/Connectivity są objęte modułem Tethering.

W przypadku Androida 11 i starszych w pliku packages/modules/Tethering w module Tethering znajdują się 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ł udostępniania połączenia (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 kod ConnectivityService, który wdraża centralny komponent łączności L3+, jest dodawany do funkcji tetheringu w APEX. Zakres tetheringu zostaje poszerzony o moduł połączeń.

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

Android Compatibility Test Suite (CTS) sprawdza działanie modułu Tethering.