Netzwerkschnittstellenstatistiken – Übersicht

In Android 4.0 werden Statistiken, die von Linux-Netzwerkschnittstellen erfasst werden, im Zeitverlauf aufgezeichnet und unter anderem verwendet, um Netzwerkkontingentlimits durchzusetzen und für Nutzer sichtbare Diagramme zu rendern.

Jeder Netzwerkgerätetreiber (einschließlich WLAN) muss dem standardmäßigen Kernelgerätelebenszyklus folgen und über dev_get_stats() korrekte Statistiken zurückgeben. Insbesondere dürfen die zurückgegebenen Statistiken nicht springen, während die Benutzeroberfläche aktiv ist. Fahrer können Statistiken nur zurücksetzen, nachdem ein unregister_netdev() oder ein entsprechendes Ereignis erfolgreich abgeschlossen wurde, das ein NETDEV_UNREGISTER-Ereignis für Rückrufe generiert, die mit register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() registriert wurden.

Mobilfunkanbieter messen die Datennutzung in der Regel auf der Internetschicht (IP). Um diesen Ansatz in Android 4.0 zu unterstützen, gehen wir davon aus, dass für die Kernel-Geräte, die für uns relevant sind, die von dev_get_stats() zurückgegebenen Werte rx_bytes und tx_bytes genau die Anzahl der übertragenen Bytes der Internetschicht (IP) zurückgeben.  Wir wissen aber, dass das bei anderen Geräten möglicherweise nicht der Fall ist. Derzeit beruht die Funktion auf dieser Besonderheit. Neue Treiber sollten diese Property ebenfalls haben. Die dev_get_stats()-Werte dürfen keinen Kapselungsoverhead von niedrigeren Netzwerkschichten (z. B. Ethernet-Header) enthalten und sollten vorzugsweise keinen anderen Traffic (z. B. ARP) enthalten, es sei denn, dieser ist vernachlässigbar.

Das Android-Framework erhebt nur Statistiken von Netzwerkschnittstellen, die in ConnectivityService mit einer NetworkStateTracker verknüpft sind. So kann das Framework jede Netzwerkschnittstelle konkret identifizieren, einschließlich ihres Typs (z. B. TYPE_MOBILE oder TYPE_WIFI) und der Identität des Abonnenten (z. B. IMSI).  Alle Netzwerkschnittstellen, die zum Weiterleiten von Daten verwendet werden, sollten durch eine NetworkStateTracker dargestellt werden, damit Statistiken korrekt erfasst werden können.