Odciążanie przez sprzęt tetheringu

Przekierowywanie danych przez tethering umożliwia urządzeniom oszczędzanie energii i zwiększanie wydajności poprzez 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łączenia, 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. Zawiera też informacje o interfejsach i prefiksach w kierunku strumienia danych.

W przypadku IPv4 sprzęt umożliwia pakietom konfiguracji sesji IPv4 (translacji adresów sieciowych) dotarcie do procesora. Rdzeń tworzy wpisy NAT, a implementacja HAL obserwuje wpisy z opisów plików udostępnionych przez framework i przetwarza te przepływy na 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 można było korzystać z przekierowywania 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 strumienie.

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łącz setLocalPrefixes, aby wykluczyć z przenoszenia adresy IP lokalnych lub inne sieci.
  • Ustaw interfejs w górę łańcucha, adres IPv4 i bramy IPv6: użyj setUpstreamParameters i skonfiguruj zakresy adresów IP w dół łańcucha za pomocą addDownstream/removeDownstream.
  • Ujęcie wykorzystania danych: 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 zostać 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.