Vista geral

A funcionalidade de monitoramento e rastreamento de uso de dados por aplicativo/delegados 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 quota2 netfilter (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 determinados limites são atingidos. Quando o limite da cota for 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 chamador). O segundo componente de tag é usado para dar suporte à caracterização adicional do tráfego em categorias especificadas pelo desenvolvedor de aplicativos. Usando essas tags no nível do aplicativo, um aplicativo pode criar o perfil do tráfego em diversas subcategorias.

No caso de aplicativos que fornecem transferência de dados de rede como serviço, como gerenciador de download, 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.