Descripción general de las estadísticas de la interfaz de red

En Android 4.0, las estadísticas informadas por las interfaces de red de Linux se registran a lo largo del tiempo y se utilizan para hacer cumplir los límites de cuota de la red, generar gráficos visibles para el usuario y más.

Cada controlador de dispositivo de red (Wi-Fi incluido) debe seguir el ciclo de vida estándar del dispositivo del kernel y devolver las estadísticas correctas a través dev_get_stats() . En particular, las estadísticas devueltas deben permanecer estrictamente monotónicas mientras la interfaz esté activa. Los controladores pueden restablecer las estadísticas solo después de completar con éxito un unregister_netdev() o el equivalente que genera un evento NETDEV_UNREGISTER para las devoluciones de llamadas registradas con register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() .

Los operadores móviles suelen medir el uso de datos en la capa de Internet (IP). Para igualar este enfoque en Android 4.0, nos basamos en el hecho de que para los dispositivos del kernel nos preocupamos por los valores rx_bytes y tx_bytes devueltos por dev_get_stats() que devuelven exactamente los bytes de la capa de Internet ( IP ) transferidos. Pero entendemos que para otros dispositivos podría no ser el caso. Por ahora, la característica se basa en esta peculiaridad. Los nuevos controladores también deben tener esa propiedad, y los valores dev_get_stats() no deben incluir ninguna sobrecarga de encapsulación de las capas de red inferiores (como los encabezados de Ethernet) y, preferiblemente, no deben incluir otro tráfico (como ARP) a menos que sea insignificante.

El marco de trabajo de Android solo recopila estadísticas de las interfaces de red asociadas con un NetworkStateTracker en ConnectivityService . Esto permite que el marco identifique de manera concreta cada interfaz de red, incluido su tipo (como TYPE_MOBILE o TYPE_WIFI ) y la identidad del suscriptor (como IMSI). Todas las interfaces de red utilizadas para enrutar datos deben estar representadas por un NetworkStateTracker para que las estadísticas se puedan contabilizar correctamente.