Funkcja monitorowania i śledzenia wykorzystania danych w poszczególnych aplikacjach oraz w przypadku delegowania zależy od modułu 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
) zależy głównie od istnienia interfejsu /proc/net/xt_qtaguid/ctrl
wyeksportowanego przez moduł jądra xt_qtaguid
.
Moduł netfilter quota2
(pierwotnie część modułu xtables-addons
) umożliwia ustawienie limitów kwoty z nazwami i został rozszerzony o obsługę powiadamiania przestrzeni użytkownika po osiągnięciu określonych limitów. 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.setKernelCounterSet
i android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
).
Jak to działa?
Moduł netfilter qtaguid
śledzi ruch sieciowy na podstawie każdego 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łania danych w sieci do identyfikatora UID aplikacji przesyłającej żądanie 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
”.