À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release
au lieu de aosp-main
pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Présentation des statistiques des interfaces réseau
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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.
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/03/26 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/03/26 (UTC)."],[],[],null,["# Network interface statistics overview\n\nIn Android 4.0, statistics reported by Linux network interfaces are\nrecorded over time, and are used to enforce network quota limits,\nrender user-visible charts, and more.\n\nEach network device driver (Wi-Fi included) must follow the standard\nkernel device lifecycle, and return correct statistics through\n`dev_get_stats()`. In particular, statistics returned must remain\nstrictly monotonic while the interface is active. Drivers may reset\nstatistics only after successfully completing an `unregister_netdev()`\nor the equivalent that generates a `NETDEV_UNREGISTER` event for\ncallbacks registered with `register_netdevice_notifier()` /\n`register_inetaddr_notifier()` / `register_inet6addr_notifier()`.\n\nMobile operators typically measure data usage at the Internet layer\n(IP). To match this approach in Android 4.0, we rely on the fact that\nfor the kernel devices we care about the `rx_bytes` and `tx_bytes`\nvalues returned by `dev_get_stats()` return exactly the Internet layer\n(`IP`) bytes transferred. But we understand that for other devices it\nmight not be the case. For now, the feature relies on this\npeculiarity. New drivers should have that property also, and the\n`dev_get_stats()` values must not include any encapsulation overhead\nof lower network layers (such as Ethernet headers), and should\npreferably not include other traffic (such as ARP) unless it is\nnegligible.\n\nThe Android framework only collects statistics from network interfaces\nassociated with a `NetworkStateTracker` in `ConnectivityService`. This\nenables the framework to concretely identify each network interface,\nincluding its type (such as `TYPE_MOBILE` or `TYPE_WIFI`) and\nsubscriber identity (such as IMSI). All network interfaces used to\nroute data should be represented by a `NetworkStateTracker` so that\nstatistics can be accounted correctly."]]