Odciążanie sprzętu tetheringu

Odciążanie tetheringu umożliwia urządzeniom oszczędzanie energii i poprawę wydajności poprzez odciążenie ruchu związanego z tetheringiem (przez USB, Wi-Fi) do sprzętu. Ruch związany z tetheringiem jest odciążany poprzez zapewnienie bezpośredniej ścieżki pomiędzy modemem a urządzeniami peryferyjnymi, z pominięciem procesora aplikacji.

Dane techniczne

Począwszy od Androida 8.1, urządzenia mogą korzystać z funkcji odciążania tetheringu, aby odciążyć przekazywanie protokołu IPv4, IPv6 lub IPv4+IPv6 do sprzętu.

Funkcja odciążania nie wymaga odciążania wszystkich pakietów. Framework jest w stanie obsłużyć dowolny pakiet w oprogramowaniu. Pakiety kontrolne są zazwyczaj przetwarzane w oprogramowaniu. Ponieważ porty IPv4 są współdzielone przez ruch na uwięzi i ruch urządzeń, pakiety konfiguracji/rozrywania sesji IPv4 (na przykład SYN/SYN+ACK, FIN) muszą być przetwarzane w oprogramowaniu, aby jądro mogło skonstruować stan przepływu. Framework zapewnia płaszczyznę sterowania i maszyny stanowe. Dostarcza również sprzętowi informacji o interfejsach/prefiksach wyższego i niższego szczebla.

W przypadku protokołu IPv4 sprzęt umożliwia pakietom konfiguracyjnym sesji translacji adresów sieciowych IPv4 (NAT) dotarcie do procesora. Jądro tworzy wpisy NAT, a implementacja HAL obserwuje wpisy z deskryptorów plików dostarczonych przez platformę i obsługuje te przepływy sprzętowo. Oznacza to, że implementacja HAL nie wymaga CAP_NET_* , ponieważ HAL jest otwierany przez gniazda NF_NETLINK_CONNTRACK ze środowiska. Okresowo sprzęt wysyła aktualizacje stanu NAT dla aktualnie aktywnych przepływów do platformy, która odświeża odpowiednie wpisy stanu śledzenia połączenia jądra.

W przypadku protokołu IPv6 środowisko programuje listę prefiksów docelowych protokołu IPv6, do których ruch nie może być przeciążany. Wszystkie inne pakiety na uwięzi można odciążyć.

W przypadku rozliczania użycia danych ankiety dotyczące użycia danych NetworkStatsService powodują, że platforma żąda statystyk ruchu ze sprzętu. Struktura przekazuje również sprzętowi limity wykorzystania danych za pośrednictwem warstwy HAL.

Wymagania sprzętowe

Aby zaimplementować odciążanie tetheringu, sprzęt musi mieć możliwość przekazywania pakietów IP między modemem a Wi-Fi/USB bez przesyłania ruchu przez główny procesor.

Realizacja

Aby włączyć funkcję odciążania tetheringu, należy zaimplementować dwie następujące po niej warstwę HAL ( IOffloadConfig ) i warstwę kontrolną HAL ( IOffloadControl ).

Konfiguracja HAL: IOffloadConfig

IOffloadConfig HAL rozpoczyna implementację odciążania tetheringu. Struktura zapewnia implementację HAL z wstępnie podłączonymi gniazdami NF_NETLINK_CONNTRACK , których implementacja może używać do obserwacji przepływów IPv4. Należy przyspieszać jedynie przepływy przesyłane dalej.

Sterowanie HAL: IOffloadControl

IOffloadControl HAL kontroluje implementację odciążania. Należy wdrożyć następujące metody:

  • Rozpocznij/zatrzymaj odciążanie sprzętu: Użyj initOffload/stopOffload i wyłącz lokalne adresy IP lub inne sieci z odciążania za pomocą setLocalPrefixes .
  • Ustaw interfejs nadrzędny, adres IPv4 i bramy IPv6: Użyj setUpstreamParameters i skonfiguruj zakresy adresów IP podrzędnych za pomocą addDownstream/removeDownstream .
  • Rozliczanie wykorzystania danych: Użyj getForwardedStats/setDataLimit .

Twój dostawca HAL musi również wysyłać wywołania zwrotne za pośrednictwem interfejsu ITetheringOffloadCallback , który informuje strukturę o:

  • Zdarzenia asynchroniczne, takie jak rozpoczęcie i zatrzymanie odciążania (OffloadCallbackEvent)
  • Aktualizacje limitu czasu NAT, które muszą być wysyłane okresowo, aby wskazać, że określony przepływ IPv4 zawiera ruch i nie może być zamykany przez jądro

Walidacja

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