Visão geral

A funcionalidade de monitoramento e rastreamento de uso de dados por aplicativo/delegada depende do módulo xt_qtaguid no kernel Linux Android-3.0 ( kernel/net/netfilter/xt_qtaguid ). A funcionalidade de marcação de soquete na estrutura ( 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 netfilter quota2 (originalmente parte de xtables-addons ) permite que a funcionalidade defina limites de cota nomeados e foi estendido para suportar a notificação do espaço do usuário quando certos limites são atingidos. Uma vez que o limite de cota é atingido, o módulo quota2 descarta todo o tráfego de rede subsequente. A estrutura também pode especificar regras adicionais para restringir o tráfego de dados em segundo plano para um aplicativo (consulte com.android.server.NetworkManagementSocketTagger.setKernelCounterSet e android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

Como funciona?

O módulo qtaguid netfilter rastreia o tráfego de rede por soquete para cada aplicativo usando o UID exclusivo do aplicativo proprietário. Existem dois componentes de tag associados a qualquer soquete no sistema. O primeiro é o UID que identifica exclusivamente o aplicativo responsável pela transferência de dados (o Linux permite atribuir a propriedade de cada soquete de rede ao UID do aplicativo de chamada). O segundo componente de tag é usado para dar suporte à caracterização adicional do tráfego nas categorias especificadas pelo desenvolvedor do aplicativo. Usando essas tags de nível de aplicativo, um aplicativo pode criar o perfil do tráfego em várias subcategorias.

No caso de aplicativos que fornecem transferência de dados de rede como um serviço, como 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 aplicativo solicitante usando o TrafficStats.setThreadStatsUid() chamada de função. O chamador deve ter a permissão “ android.permission.MODIFY_NETWORK_ACCOUNTING ” para reatribuir a propriedade do tráfego de rede.