Resumen,Resumen

La funcionalidad de monitoreo y seguimiento del uso de datos por aplicación/delegado se basa en el módulo xt_qtaguid en el kernel de Android-3.0 Linux ( kernel/net/netfilter/xt_qtaguid ). La funcionalidad de etiquetado de sockets en el marco ( system/core/libcutils/qtaguid.c ) se basa principalmente en la existencia de la interfaz /proc/net/xt_qtaguid/ctrl exportada por el módulo del kernel xt_qtaguid .

El módulo de netfilter de quota2 (originalmente parte de xtables-addons ) permite que la funcionalidad establezca límites de cuota con nombre y se amplió para admitir la notificación al espacio de usuario cuando se alcanzan ciertos límites. Una vez que se alcanza el límite de cuota, el módulo quota2 descarta todo el tráfico de red subsiguiente. El marco también puede especificar reglas adicionales para restringir el tráfico de datos en segundo plano para una aplicación (consulte com.android.server.NetworkManagementSocketTagger.setKernelCounterSet y android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

¿Como funciona?

El módulo qtaguid netfilter realiza un seguimiento del tráfico de red por socket para cada aplicación que utiliza el UID único de la aplicación propietaria. Hay dos componentes de etiqueta asociados con cualquier socket en el sistema. El primero es el UID que identifica de manera única la aplicación responsable de la transferencia de datos (Linux permite la capacidad de atribuir la propiedad de cada socket de red al UID de la aplicación que realiza la llamada). El segundo componente de etiqueta se utiliza para admitir una caracterización adicional del tráfico en las categorías especificadas por el desarrollador de la aplicación. Usando estas etiquetas de nivel de aplicación, una aplicación puede perfilar el tráfico en varias subcategorías.

En el caso de aplicaciones que brindan transferencia de datos de red como un servicio, como el administrador de descargas, el servicio de transmisión de medios, etc., es posible atribuir la propiedad de la transferencia de datos de red al UID de la aplicación solicitante utilizando TrafficStats.setThreadStatsUid() llamada de función. La persona que llama debe tener el permiso " android.permission.MODIFY_NETWORK_ACCOUNTING " para reasignar la propiedad del tráfico de red.