Übersicht über Netzwerkschnittstellenstatistiken

In Android 4.0 werden Statistiken, die von Linux-Netzwerkschnittstellen gemeldet werden, im Laufe der Zeit aufgezeichnet und verwendet, um Netzwerkkontingentgrenzen durchzusetzen, für Benutzer sichtbare Diagramme zu rendern und mehr.

Jeder Netzwerkgerätetreiber (einschließlich Wi-Fi) muss dem standardmäßigen Gerätelebenszyklus des Kernels folgen und über dev_get_stats() korrekte Statistiken zurückgeben. Insbesondere müssen zurückgegebene Statistiken streng monoton bleiben, während die Schnittstelle aktiv ist. Treiber können Statistiken nur zurücksetzen, nachdem sie erfolgreich ein unregister_netdev() oder das Äquivalent abgeschlossen haben, das ein NETDEV_UNREGISTER Ereignis für Callbacks generiert, die mit register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() wurden.

Mobilfunkbetreiber messen die Datennutzung typischerweise auf der Internetschicht (IP). Um diesem Ansatz in Android 4.0 zu entsprechen, verlassen wir uns darauf, dass wir uns bei den Kernel-Geräten um die von dev_get_stats() zurückgegebenen rx_bytes und tx_bytes Werte kümmern, die genau die übertragenen Internet-Layer ( IP )-Bytes zurückgeben. Wir verstehen jedoch, dass dies bei anderen Geräten möglicherweise nicht der Fall ist. Im Moment stützt sich das Feature auf diese Besonderheit. Neue Treiber sollten diese Eigenschaft ebenfalls haben, und die dev_get_stats() Werte dürfen keinen Kapselungs-Overhead niedrigerer Netzwerkschichten (wie Ethernet-Header) enthalten und sollten vorzugsweise keinen anderen Verkehr (wie ARP) enthalten, es sei denn, er ist vernachlässigbar.

Das Android-Framework sammelt nur Statistiken von Netzwerkschnittstellen, die einem NetworkStateTracker in ConnectivityService zugeordnet sind. Dadurch kann das Framework jede Netzwerkschnittstelle konkret identifizieren, einschließlich ihres Typs (z. B. TYPE_MOBILE oder TYPE_WIFI ) und der Teilnehmeridentität (z. B. IMSI). Alle Netzwerkschnittstellen, die zum Weiterleiten von Daten verwendet werden, sollten durch einen NetworkStateTracker dargestellt werden, damit Statistiken korrekt erfasst werden können.