Обзор

Функциональность мониторинга и отслеживания использования отдельных приложений/делегированных данных зависит от модуля xt_qtaguid в ядре Linux android-3.0 ( kernel/net/netfilter/xt_qtaguid ). Функциональность тегирования сокетов в фреймворке ( system/core/libcutils/qtaguid.c ) в основном зависит от наличия интерфейса /proc/net/xt_qtaguid/ctrl , экспортируемого модулем ядра xt_qtaguid .

Модуль quota2 netfilter (первоначально являвшийся частью xtables-addons ) позволяет функциональным возможностям устанавливать именованные пределы квот и был расширен для поддержки уведомления пользовательского пространства при достижении определенных пределов. Как только предел квоты достигнут, модуль quota2 отбрасывает весь последующий сетевой трафик. Платформа также может указать дополнительные правила для ограничения фонового трафика данных для приложения (см. com.android.server.NetworkManagementSocketTagger.setKernelCounterSet и android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

Как это работает?

Модуль qtaguid netfilter отслеживает сетевой трафик для каждого сокета для каждого приложения, используя уникальный UID приложения-владельца. С любым сокетом в системе связаны два компонента тега. Первый — это UID, который однозначно идентифицирует приложение, ответственное за передачу данных (Linux позволяет приписывать владение каждым сетевым сокетом UID вызывающего приложения). Второй компонент тега используется для поддержки дополнительной характеристики трафика по категориям, указанным разработчиком приложения. Используя эти теги уровня приложения, приложение может разделить трафик на несколько подкатегорий.

В случае приложений, предоставляющих передачу данных по сети как услугу, таких как диспетчер загрузки, служба потоковой передачи мультимедиа и т. д., можно приписать право собственности на передачу данных по сети к UID запрашивающего приложения, используя TrafficStats.setThreadStatsUid() вызов функции. Вызывающий должен иметь разрешение « android.permission.MODIFY_NETWORK_ACCOUNTING », чтобы переназначить владельца сетевого трафика.