Przekierowanie tetheringu umożliwia urządzeniom oszczędzanie energii i zwiększanie wydajności przez przekierowanie ruchu tetheringu (przez USB, Wi-Fi) do sprzętu. Ruch związany z tetheringiem jest odciążany przez zapewnienie bezpośredniej ścieżki między modemem a urządzeniami peryferyjnymi z pominięciem procesora aplikacji.
Specyfikacja
Od Androida 8.1 urządzenia mogą używać funkcji tethering offload do przekazywania adresów IPv4, IPv6 lub IPv4+IPv6 do sprzętu.
Funkcja odciążania nie musi odciążać wszystkich pakietów. Platforma jest w stanie obsługiwać dowolny pakiet w oprogramowaniu. Pakiety sterujące są zwykle przetwarzane w oprogramowaniu. Ponieważ porty IPv4 są współdzielone między ruchem z tetheringu a ruchem z urządzenia, pakiety konfiguracji/zamykania sesji IPv4 (np. SYN/SYN+ACK, FIN) muszą być przetwarzane w oprogramowaniu, aby jądro mogło utworzyć stan przepływu. Framework zapewnia platformę sterującą i automaty stanowe. Dostarcza też sprzętowi informacji o interfejsach i prefiksach wysyłania i odbierania.
W przypadku IPv4 sprzęt umożliwia dotarcie do procesora pakietów konfiguracji sesji translacji adresów sieciowych IPv4 (NAT). Jądro tworzy wpisy NAT, a implementacja HAL obserwuje wpisy z deskryptorów plików dostarczonych przez platformę i obsługuje te przepływy w sprzęcie. Oznacza to, że implementacja HAL nie wymaga CAP_NET_*
, ponieważ HAL otrzymuje otwarte gniazda NF_NETLINK_CONNTRACK
z frameworka. Okresowo sprzęt wysyła do platformy aktualizacje stanu NAT dla obecnie aktywnych przepływów, co odświeża odpowiednie wpisy stanu śledzenia połączeń jądra.
W przypadku IPv6 platforma programuje listę prefiksów docelowych IPv6, do których nie należy przekierowywać ruchu. Wszystkie pozostałe pakiety tetheringu można przenieść.
W przypadku rozliczania wykorzystania danych NetworkStatsService
odpytywanie o wykorzystanie danych powoduje, że platforma wysyła do sprzętu prośbę o statystyki ruchu. Framework przekazuje też limity wykorzystania danych do sprzętu za pomocą HAL.
Wymagania sprzętowe
Aby wdrożyć odciążanie tetheringu, sprzęt musi być w stanie przekazywać pakiety IP między modemem a Wi-Fi/USB bez przesyłania ruchu przez główny procesor.
Implementacja
Aby włączyć funkcję odciążania tetheringu, musisz zaimplementować zarówno HAL konfiguracji (IOffloadConfig
), jak i HAL sterowania (IOffloadControl
).
Konfiguracja HAL: IOffloadConfig
IOffloadConfig
HAL rozpoczyna implementację odciążania tetheringu. Platforma udostępnia implementacji HAL wstępnie połączone gniazda NF_NETLINK_CONNTRACK
, których implementacja może używać do obserwowania przepływów IPv4. Przyspieszone muszą być tylko przekazywane przepływy.
Interfejs HAL sterowania: IOffloadControl
IOffloadControl
HAL kontroluje implementację odciążania. Musisz zaimplementować te metody:
- Włączanie i wyłączanie sprzętu do przenoszenia zadań: użyj
initOffload/stopOffload
i wyłącz przenoszenie zadań w przypadku lokalnych adresów IP lub innych sieci za pomocąsetLocalPrefixes
. - Ustaw interfejs nadrzędny, adres IPv4 i bramy IPv6: użyj polecenia
setUpstreamParameters
i skonfiguruj zakresy adresów IP podrzędnych za pomocą poleceniaaddDownstream/removeDownstream
. - Rozliczanie wykorzystania danych: użyj
getForwardedStats/setDataLimit
.
HAL dostawcy musi też wysyłać wywołania zwrotne przez interfejs ITetheringOffloadCallback
, które informują platformę o tych kwestiach:
- zdarzenia asynchroniczne, takie jak rozpoczęcie i zakończenie przenoszenia (OffloadCallbackEvent);
- aktualizacje limitu czasu NAT, które muszą być okresowo wysyłane, aby wskazać, że określony przepływ IPv4 zawiera ruch i nie może zostać zamknięty przez jądro;
Weryfikacja
Aby sprawdzić, czy implementacja odciążania tetheringu jest prawidłowa, użyj testów ręcznych lub automatycznych, aby zweryfikować, czy tethering i hotspot Wi-Fi działają zgodnie z oczekiwaniami. Vendor Test Suite (VTS) zawiera testy interfejsów HAL odciążania tetheringu.