Odciążanie przez sprzęt tetheringu

Odciążanie tetheringu umożliwia urządzeniom oszczędzanie energii i zwiększanie wydajności dzięki odciążeniu ruchu tetheringu (przez USB, Wi-Fi) do sprzętu. Ruch tetheringu jest przekierowywany 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ć odciążenia tetheringu do przekierowywania do sprzętu ruchu IPv4, IPv6 lub IPv4+IPv6.

Funkcja odciążania nie musi odciążać wszystkich pakietów. Platforma może obsługiwać dowolny pakiet w oprogramowaniu. Pakiety sterujące są zwykle przetwarzane w oprogramowaniu. Ponieważ porty IPv4 są współdzielone między ruchem tetheringu a ruchem 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. Platforma udostępnia platformę sterującą i maszyny stanowe. Dostarcza też sprzętowi informacje o interfejsach/prefiksach wysyłania i odbierania.

W przypadku IPv4 sprzęt umożliwia dotarcie do procesora pakietów konfiguracji sesji translacji adresów sieciowych (NAT) IPv4. 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 z platformy otwarte gniazda NF_NETLINK_CONNTRACK. Sprzęt okresowo wysyła do platformy aktualizacje stanu NAT dla aktualnie aktywnych przepływów, co powoduje odświeżenie odpowiednich wpisów stanu śledzenia połączeń jądra.

W przypadku IPv6 platforma programuje listę prefiksów docelowych IPv6, do których nie można przekierowywać ruchu. Wszystkie inne pakiety tetheringu można przekierowywać.

W przypadku rozliczania użycia danych odpytywanie użycia danych przez NetworkStatsService powoduje, że platforma wysyła do sprzętu prośbę o statystyki ruchu. Platforma przekazuje też do sprzętu limity użycia danych za pomocą HAL.

Wymagania sprzętowe

Aby zaimplementować odciążenie tetheringu, sprzęt musi być w stanie przekierowywać pakiety IP między modemem a Wi-Fi/USB bez wysyłania ruchu przez główny procesor.

Implementacja

Aby włączyć funkcję przekierowania tetheringu, musisz zaimplementować 2 HAL: HAL konfiguracji (IOffloadConfig) i HAL sterowania (IOffloadControl).

HAL konfiguracji: IOffloadConfig

HAL IOffloadConfig uruchamia implementację przekierowania 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. Przyspieszyć należy tylko przekierowane przepływy.

HAL sterowania: IOffloadControl

HAL IOffloadControl steruje implementacją przekierowania. Musisz zaimplementować te metody:

  • Uruchamianie/zatrzymywanie sprzętu przekierowania: użyj initOffload/stopOffload i wyłącz przekierowanie dla lokalnych adresów IP lub innych sieci za pomocą setLocalPrefixes.
  • Ustawianie interfejsu wysyłania, adresu IPv4 i bram IPv6: użyj setUpstreamParameters i skonfiguruj zakresy adresów IP odbierania za pomocą addDownstream/removeDownstream.
  • Rozliczanie użycia danych: użyj getForwardedStats/setDataLimit.

HAL dostawcy musi też wysyłać wywołania zwrotne za pomocą interfejsu ITetheringOffloadCallback, który informuje platformę o:

  • zdarzeniach asynchronicznych, takich jak rozpoczęcie i zatrzymanie przekierowania (OffloadCallbackEvent);
  • aktualizacjach limitu czasu NAT, które muszą być wysyłane okresowo, aby wskazać, że określony przepływ IPv4 zawiera ruch i nie może zostać zamknięty przez jądro.

Weryfikacja

Aby zweryfikować implementację przekierowania tetheringu, użyj testów ręcznych lub automatycznych, aby sprawdzić, czy tethering i hotspot Wi-Fi działają zgodnie z oczekiwaniami. Pakiet Vendor Test Suite (VTS) zawiera testy HAL przekierowania tetheringu.