Przegląd jądra

Funkcja monitorowania i śledzenia wykorzystania danych w poszczególnych aplikacjach oraz w przypadku delegowania opiera się na module xt_qtaguid w jądrze Linuksa w wersji 3.0 (kernel/net/netfilter/xt_qtaguid). Funkcja oznaczania gniazd w ramce (system/core/libcutils/qtaguid.c) opiera się głównie na istnieniu interfejsu /proc/net/xt_qtaguid/ctrl wyeksportowanego przez moduł jądra xt_qtaguid.

Moduł netfilter (pierwotnie część xtables-addons) umożliwia ustawianie limitów kwoty z nazwami i został rozszerzony, aby obsługiwać powiadomienia przestrzeni użytkownika po osiągnięciu określonych limitów.quota2 Gdy limit kwoty zostanie osiągnięty, moduł quota2 odrzuca cały następny ruch sieciowy. Możesz też określić dodatkowe reguły, aby ograniczyć ruch danych w tle w aplikacji (patrz com.android.server.NetworkManagementSocketTagger.setKernelCounterSetandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND).

Jak to działa?

Moduł netfilter qtaguid śledzi ruch sieciowy na podstawie gniazda w przypadku każdej aplikacji, używając unikalnego identyfikatora UID tej aplikacji. Z każdym gniazdem w systemie powiązane są 2 składniki tagu. Pierwszym z nich jest identyfikator UID, który jednoznacznie identyfikuje aplikację odpowiedzialną za przesyłanie danych (Linux umożliwia przypisanie własności każdego gniazda sieciowego do identyfikatora UID wywołującej aplikacji). Drugi komponent tagu służy do dodatkowego określania ruchu w kategoriach określonych przez dewelopera aplikacji. Za pomocą tych tagów na poziomie aplikacji aplikacja może profilować ruch w kilka podkategorii.

W przypadku aplikacji, które zapewniają przesyłanie danych w sieci jako usługę, takich jak menedżer pobierania czy usługa przesyłania strumieniowego multimediów, można przypisać własność przesyłanych danych do identyfikatora UID aplikacji przesyłającej za pomocą wywołania funkcji TrafficStats.setThreadStatsUid(). Aby przypisać prawo własności do ruchu sieciowego, element wywołujący musi mieć uprawnienie „android.permission.MODIFY_NETWORK_ACCOUNTING”.