Przegląd jądra

Funkcja monitorowania i śledzenia użycia danych przez poszczególne aplikacje i przez aplikacje, którym przekazano uprawnienia, opiera się na module xt_qtaguid w jądrze systemu Linux w wersji android-3.0 (kernel/net/netfilter/xt_qtaguid). Funkcja tagowania gniazd w platformie (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ł quota2 netfilter (pierwotnie część xtables-addons) umożliwia ustawianie nazwanych limitów przydziału i został rozszerzony o funkcję powiadamiania przestrzeni użytkownika o osiągnięciu określonych limitów. Gdy limit limitu zostanie osiągnięty, moduł quota2 odrzuci cały kolejny ruch w sieci. Platforma może też określać dodatkowe reguły ograniczające ruch danych w tle w przypadku aplikacji (patrz com.android.server.NetworkManagementSocketTagger.setKernelCounterSetandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND).

Jak to działa?

Moduł qtaguid netfilter śledzi ruch w sieci na poziomie gniazda w przypadku każdej aplikacji, używając unikalnego identyfikatora UID aplikacji. Z każdym gniazdem w systemie są powiązane 2 komponenty tagu. Pierwszy to 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 aplikacji wywołującej). Drugi komponent tagu służy do dodatkowej charakterystyki ruchu w aplikacji w kategoriach określonych przez dewelopera aplikacji. Za pomocą tych tagów na poziomie aplikacji może ona podzielić ruch na kilka podkategorii.

W przypadku aplikacji, które udostępniają przesyłanie danych w sieci jako usługę, np. menedżera pobierania, usługi strumieniowego przesyłania multimediów itp., można przypisać własność przesyłania danych w sieci do identyfikatora UID aplikacji wysyłającej żądanie za pomocą wywołania funkcji TrafficStats.setThreadStatsUid(). Osoba dzwoniąca musi mieć uprawnienie „android.permission.MODIFY_NETWORK_ACCOUNTING”, aby ponownie przypisać własność ruchu w sieci.