Odciążanie przez sprzęt tetheringu

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ą polecenia addDownstream/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.