Opis

Funkcja monitorowania i śledzenia użycia danych delegowanych/aplikacji opiera się na module xt_qtaguid w jądrze systemu Android 3.0 ( kernel/net/netfilter/xt_qtaguid ). Funkcjonalność tagowania gniazd w strukturze ( 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ł quota2 netfilter (pierwotnie część xtables-addons ) umożliwia ustawianie nazwanych limitów kwot i został rozszerzony o obsługę powiadamiania przestrzeni użytkownika po osiągnięciu określonych limitów. Po osiągnięciu limitu przydziału moduł quota2 odrzuca cały następny 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 na poziomie gniazda dla każdej aplikacji przy użyciu unikalnego UID aplikacji będącej właścicielem. Z dowolnym gniazdem w systemie są powiązane dwa komponenty znaczników. Pierwszy to UID, który jednoznacznie identyfikuje aplikację odpowiedzialną za transfer danych (Linux umożliwia przypisanie własności każdego gniazda sieciowego do UID aplikacji wywołującej). Drugi składnik tagu służy do obsługi dodatkowej charakteryzacji ruchu w kategoriach określonych przez programistę aplikacji. Używając tych znaczników poziomu aplikacji, aplikacja może profilować ruch na kilka podkategorii.

W przypadku aplikacji, które zapewniają transfer danych sieciowych jako usługę, takich jak menedżer pobierania, usługa strumieniowania multimediów itp., możliwe jest przypisanie własności transferu danych sieciowych do UID aplikacji żądającej za pomocą TrafficStats.setThreadStatsUid() wywołanie funkcji. Dzwoniący musi posiadać uprawnienie „ android.permission.MODIFY_NETWORK_ACCOUNTING ”, aby ponownie przypisać własność ruchu sieciowego.