Dans Android 4.0, les statistiques rapportées par les interfaces réseau Linux sont enregistrées au fil du temps et sont utilisées pour appliquer les limites de quota réseau, rendre les graphiques visibles par l'utilisateur, etc.
Chaque pilote de périphérique réseau (Wi-Fi inclus) doit suivre le cycle de vie standard du périphérique 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 peuvent réinitialiser les statistiques uniquement après avoir réussi 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 l'utilisation des 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 périphériques du noyau, nous nous soucions des valeurs rx_bytes
et tx_bytes
renvoyées par dev_get_stats()
qui renvoient exactement les octets de la couche Internet ( IP
) transférés. Mais nous comprenons que pour d'autres appareils, cela pourrait ne pas être le cas. Pour l'instant, la fonctionnalité s'appuie sur cette particularité. Les nouveaux pilotes doivent également avoir cette propriété, et les valeurs dev_get_stats()
ne doivent pas inclure de surcharge 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) à moins qu'il ne soit négligeable.
Le framework Android collecte uniquement 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 (comme TYPE_MOBILE
ou TYPE_WIFI
) et l'identité de l'abonné (comme 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.