Обзор ядра

Функциональность мониторинга и отслеживания использования данных для каждого приложения и делегирования основана на модуле 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 » для повторного назначения права собственности на сетевой трафик.