Przekierowywanie danych przez tethering umożliwia urządzeniom oszczędzanie energii i zwiększanie wydajności przez przekierowywanie ruchu przez tethering (przez USB lub Wi-Fi) na sprzęt. Ruch tetheringu jest odciążony 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 przekierowywania połączeń, aby przekierowywać pakiety IPv4, IPv6 lub IPv4+IPv6 na sprzęt.
Funkcja przenoszenia nie musi przenosić wszystkich pakietów. Platforma jest w stanie obsługiwać dowolny pakiet w oprogramowaniu. Pakiety sterujące są zwykle przetwarzane przez oprogramowanie. Porty IPv4 są współdzielone między ruchem z podłączonego urządzenia i ruchu z urządzenia, dlatego pakiety konfiguracji/zakończenia sesji IPv4 (np. SYN/SYN+ACK, FIN) muszą być przetwarzane w oprogramowaniu, aby jądro mogło tworzyć stan przepływu. Platforma zapewnia platformę sterującą i maszyny stanów. Udostępnia też sprzętowi informacje o interfejsach i prefiksach w kierunku strumienia danych.
W przypadku IPv4 sprzęt umożliwia dotarcie do procesora pakietów konfiguracji sesji IPv4 (NAT). Rdzeń tworzy wpisy NAT, a implementacja HAL obserwuje wpisy z opisów plików udostępnionych przez framework i przetwarza te przepływy w sprzęcie. Oznacza to, że implementacja HAL nie wymaga CAP_NET_*
, ponieważ HAL otrzymuje z ramy NF_NETLINK_CONNTRACK
gniazd. Sprzęt wysyła okresowo do platformy aktualizacje stanu NAT dla aktualnie aktywnych przepływów, co odświeża odpowiednie wpisy stanu śledzenia połączeń jądra.
W przypadku IPv6 framework programuje listę prefiksów docelowych IPv6, do których nie należy przekierowywać ruchu. Wszystkie inne pakiety mogą być przenoszone.
W przypadku rozliczania wykorzystania danych NetworkStatsService
ankiety dotyczące wykorzystania danych powodują, że framework prosi o statystyki ruchu z urządzenia. Platforma przekazuje też limity wykorzystania danych do sprzętu za pomocą interfejsu HAL.
Wymagania sprzętowe
Aby korzystać z obciążenia tetheringu, sprzęt musi mieć możliwość przekierowywania pakietów IP między modemem a Wi-Fi/USB bez wysyłania ruchu przez główny procesor.
Implementacja
Aby włączyć funkcję przenoszenia danych przez tethering, musisz zaimplementować te 2 elementy: konfigurację HAL (IOffloadConfig
) i element sterujący HAL (IOffloadControl
).
Config HAL: IOffloadConfig
IOffloadConfig
HAL uruchamia implementację przenoszenia danych przez tethering. Framework 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. Przyspieszyć można tylko przekierowane ścieżki.
Control HAL: IOffloadControl
IOffloadControl
HAL kontroluje implementację przenoszenia. Należy zaimplementować te metody:
- Rozpoczynanie i zatrzymywanie przenoszenia danych na sprzęt: użyj
initOffload/stopOffload
i wyłączsetLocalPrefixes
, aby wykluczyć z przenoszenia adresy IP lokalnych lub inne sieci. - Ustaw interfejs źródłowy, adres IPv4 i bramy IPv6: użyj
setUpstreamParameters
i skonfiguruj zakresy adresów IP docelowych za pomocąaddDownstream/removeDownstream
. - Uwzględnianie wykorzystania danych: użyj
getForwardedStats/setDataLimit
.
Dostawca HAL musi też wysyłać wywołania zwrotne przez interfejs ITetheringOffloadCallback
, który informuje platformę o:
- Zdarzenia asynchroniczne, takie jak uruchamianie i zatrzymywanie przenoszenia (zdarzenie OffloadCallbackEvent).
- aktualizacje limitu czasu NAT, które muszą być wysyłane okresowo, aby wskazać, że konkretny przepływ IPv4 zawiera ruch i nie może być zamknięty przez jądro;
Weryfikacja
Aby sprawdzić implementację funkcji przenoszenia danych przez tethering, użyj testów ręcznych lub automatycznych, aby sprawdzić, czy tethering i hotspot Wi-Fi działają zgodnie z oczekiwaniami. Pakiet testów dostawcy (VTS) zawiera testy interfejsów HAL do obsługi tetheringu.