A funcionalidade de monitoramento e rastreamento de uso de dados por app e delegado
depende 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 netfilter quota2
(originalmente parte de xtables-addons
)
permite que a funcionalidade defina limites de cota nomeados e foi estendido para
notificar o espaço do usuário quando determinados limites forem 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
socket para cada app usando o UID exclusivo do
app proprietário. Há dois componentes de tag associados a qualquer
socket 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 uma caracterização adicional do tráfego em categorias
especificadas pelo desenvolvedor do app. Usando essas tags no nível do app, um
app 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, o 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.