Odciążanie przez sprzęt tetheringu

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łącz setLocalPrefixes, 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.