Panoramica delle statistiche delle interfacce di rete

In Android 4.0, le statistiche registrate dalle interfacce di rete Linux vengono registrate nel tempo e vengono utilizzate per applicare limiti di quota di rete, visualizzare grafici visibili agli utenti e altro ancora.

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

In genere, gli operatori mobili misurano l'utilizzo dei dati a livello di protocollo internet (IP). Per mantenere questo approccio in Android 4.0, ci basiamo sul fatto che per i dispositivi del kernel ci interessano i valori rx_bytes e tx_bytes restituiti da dev_get_stats(), che restituiscono esattamente i byte trasferiti dal livello internet (IP).  Tuttavia, sappiamo che per altri dispositivi potrebbe non essere così. Per il momento, la funzionalità si basa su questa peculiarità. Anche i nuovi driver devono avere questa proprietà e i valori dev_get_stats() non devono includere alcun sovraccarico di incapsulamento dei livelli di rete inferiori (ad esempio gli intestazioni Ethernet) e, preferibilmente, non devono includere altro traffico (ad esempio ARP), a meno che non sia trascurabile.

Il framework Android raccoglie le statistiche solo dalle interfacce di rete associate a un NetworkStateTracker in ConnectivityService. In questo modo, il framework può identificare in modo concreto ogni interfaccia di rete, incluso il tipo (ad esempio TYPE_MOBILE o TYPE_WIFI) e l'identità dell'abbonato (ad esempio l'IMSI).  Tutte le interfacce di rete utilizzate per indirizzare i dati devono essere rappresentate da un NetworkStateTracker in modo che le statistiche possano essere registrate correttamente.