Présentation des statistiques des interfaces réseau

Dans Android 4.0, les statistiques signalées par les interfaces réseau Linux sont enregistrées au fil du temps et sont utilisées pour appliquer des limites de quota réseau, afficher des graphiques visibles par l'utilisateur, etc.

Chaque pilote de périphérique réseau (Wi-Fi inclus) doit suivre le cycle de vie standard des périphériques du noyau et renvoyer des statistiques correctes via dev_get_stats(). En particulier, les statistiques renvoyées doivent rester strictement monotones tant que l'interface est active. Les pilotes ne peuvent réinitialiser les statistiques qu'après avoir terminé un unregister_netdev() ou l'équivalent qui génère un événement NETDEV_UNREGISTER pour les rappels enregistrés avec register_netdevice_notifier()/register_inetaddr_notifier() / register_inet6addr_notifier().

Les opérateurs mobiles mesurent généralement la consommation de données au niveau de la couche Internet (IP). Pour correspondre à cette approche dans Android 4.0, nous nous appuyons sur le fait que, pour les appareils du noyau qui nous intéressent, les valeurs rx_bytes et tx_bytes renvoyées par dev_get_stats() renvoient exactement les octets transférés par la couche Internet (IP).  Nous comprenons que ce ne soit pas le cas pour d'autres appareils. Pour l'instant, cette fonctionnalité repose sur cette particularité. Les nouveaux pilotes doivent également disposer de cette propriété. Les valeurs dev_get_stats() ne doivent pas inclure de frais d'encapsulation des couches réseau inférieures (telles que les en-têtes Ethernet) et ne doivent de préférence pas inclure d'autre trafic (tel que ARP) sauf s'il est négligeable.

Le framework Android ne collecte que les statistiques des interfaces réseau associées à un NetworkStateTracker dans ConnectivityService. Cela permet au framework d'identifier concrètement chaque interface réseau, y compris son type (par exemple, TYPE_MOBILE ou TYPE_WIFI) et l'identité de l'abonné (par exemple, l'IMSI).  Toutes les interfaces réseau utilisées pour acheminer les données doivent être représentées par un NetworkStateTracker afin que les statistiques puissent être comptabilisées correctement.