O monitoramento e o rastreamento do uso de dados por app e delegado
dependem do módulo xt_qtaguid no kernel do Linux
android-3.0 (kernel/net/netfilter/xt_qtaguid
). A funcionalidade de inclusão de tags de soquete
no framework (system/core/libcutils/qtaguid.c
)
depende principalmente da existência da interface /proc/net/xt_qtaguid/ctrl
exportada pelo módulo do kernel xt_qtaguid
.
O módulo quota2
netfilter (originalmente parte do xtables-addons
) permite que a funcionalidade defina limites de cota nomeados e foi estendido para oferecer suporte à notificação do espaço do usuário quando determinados limites são atingidos. Quando o limite de cota é atingido, o módulo quota2
descarta todo o tráfego de rede subsequente. O framework também pode especificar outras regras para restringir o tráfego de dados em segundo plano de um app. Consulte com.android.server.NetworkManagementSocketTagger.setKernelCounterSet
e android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
.
Como funciona?
O módulo netfilter qtaguid
rastreia o tráfego de rede por soquete para cada app usando o UID exclusivo do app proprietário. Há dois componentes de tag associados a qualquer soquete no sistema. O primeiro é o UID, que identifica exclusivamente o app responsável pela transferência de dados. O Linux permite atribuir a propriedade de cada soquete de rede ao UID do app de chamada. O segundo componente de tag é usado
para oferecer suporte a mais caracterizações do tráfego em categorias
especificadas pelo desenvolvedor do app. Com essas tags no nível do app, um
aplicativo pode criar um perfil do tráfego em várias subcategorias.
No caso de apps que oferecem transferência de dados de rede como um
serviço, como o gerenciador de downloads, serviço de streaming de mídia etc.,
é possível atribuir a propriedade da transferência de dados de rede
ao UID do app solicitante usando a chamada de função
TrafficStats.setThreadStatsUid()
. O autor da chamada precisa ter a permissão
"android.permission.MODIFY_NETWORK_ACCOUNTING
" para
reatribuir a propriedade do tráfego de rede.