Panoramica delle statistiche dell'interfaccia di rete

In Android 4.0, le statistiche riportate dalle interfacce di rete Linux vengono registrate nel tempo e vengono utilizzate per imporre limiti di quota di rete, rendere i grafici visibili all'utente e altro ancora.

Ciascun driver di dispositivo di rete (incluso Wi-Fi) deve seguire il ciclo di vita del dispositivo del kernel standard e restituire statistiche corrette tramite dev_get_stats() . In particolare, le statistiche restituite devono rimanere rigorosamente monotone mentre l'interfaccia è attiva. I driver possono ripristinare le statistiche solo dopo aver completato correttamente un unregister_netdev() o un equivalente che genera un evento NETDEV_UNREGISTER per i callback registrati con register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() .

Gli operatori mobili in genere misurano l'utilizzo dei dati a livello di Internet (IP). Per abbinare questo approccio in Android 4.0, ci basiamo sul fatto che per i dispositivi del kernel ci preoccupiamo dei valori rx_bytes e tx_bytes restituiti da dev_get_stats() restituiscono esattamente i byte del livello Internet ( IP ) trasferiti. Ma capiamo che per altri dispositivi potrebbe non essere il caso. Per ora, la caratteristica fa affidamento su questa particolarità. Anche i nuovi driver dovrebbero avere quella proprietà e i valori dev_get_stats() non devono includere alcun sovraccarico di incapsulamento dei livelli di rete inferiori (come le intestazioni Ethernet) e preferibilmente non dovrebbero includere altro traffico (come ARP) a meno che non sia trascurabile.

Il framework Android raccoglie solo statistiche dalle interfacce di rete associate a un NetworkStateTracker in ConnectivityService . Ciò consente al framework di identificare concretamente ogni interfaccia di rete, incluso il suo tipo (come TYPE_MOBILE o TYPE_WIFI ) e l'identità dell'abbonato (come IMSI). Tutte le interfacce di rete utilizzate per instradare i dati devono essere rappresentate da un NetworkStateTracker in modo che le statistiche possano essere contabilizzate correttamente.