Przegląd

Funkcja monitorowania i śledzenia wykorzystania danych dla poszczególnych aplikacji/delegowanych opiera się na module xt_qtaguid w jądrze systemu Linux Android-3.0 ( kernel/net/netfilter/xt_qtaguid ). Funkcjonalność oznaczania gniazd w frameworku ( system/core/libcutils/qtaguid.c ) opiera się głównie na istnieniu interfejsu /proc/net/xt_qtaguid/ctrl eksportowanego przez moduł jądra xt_qtaguid .

Moduł netfilter quota2 (pierwotnie część xtables-addons ) umożliwia ustawienie nazwanych limitów przydziałów i został rozszerzony o obsługę powiadamiania przestrzeni użytkownika o osiągnięciu określonych limitów. Po osiągnięciu limitu przydziału moduł quota2 odrzuca cały kolejny ruch sieciowy. Struktura może również określać dodatkowe reguły ograniczające ruch danych w tle dla aplikacji (patrz com.android.server.NetworkManagementSocketTagger.setKernelCounterSet i android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

Jak to działa?

Moduł qtaguid netfilter śledzi ruch sieciowy dla każdego gniazda dla każdej aplikacji, korzystając z unikalnego UID aplikacji będącej właścicielem. Z dowolnym gniazdem w systemie są powiązane dwa komponenty znacznika. Pierwszym z nich jest UID, który jednoznacznie identyfikuje aplikację odpowiedzialną za transmisję danych (Linux umożliwia przypisanie własności każdego gniazda sieciowego do UID wywołującej aplikacji). Drugi komponent tagu służy do dodatkowej charakteryzacji ruchu do kategorii określonych przez twórcę aplikacji. Używając tych tagów na poziomie aplikacji, aplikacja może profilować ruch w kilku podkategoriach.

W przypadku aplikacji zapewniających sieciowy transfer danych jako usługę, takich jak menedżer pobierania, usługa strumieniowego przesyłania multimediów itp., możliwe jest przypisanie własności sieciowego przesyłania danych do identyfikatora UID żądającej aplikacji za pomocą TrafficStats.setThreadStatsUid() wywołanie funkcji. Osoba wywołująca musi posiadać uprawnienie „ android.permission.MODIFY_NETWORK_ACCOUNTING ”, aby ponownie przypisać własność ruchu sieciowego.