Visão geral das estatísticas da interface de rede

No Android 4.0, as estatísticas informadas pelas interfaces de rede do Linux são registradas ao longo do tempo e usadas para aplicar limites de cota de rede, renderizar gráficos visíveis para o usuário e muito mais.

Cada driver de dispositivo de rede (incluindo Wi-Fi) precisa seguir o ciclo de vida padrão do dispositivo do kernel e retornar estatísticas corretas pelo dev_get_stats(). Em particular, as estatísticas retornadas precisam permanecer estritamente monótonas enquanto a interface estiver ativa. Os drivers só podem redefinir as estatísticas depois de concluir uma unregister_netdev() ou o equivalente que gera um evento NETDEV_UNREGISTER para callbacks registrados com register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier().

Operadoras de dispositivos móveis geralmente medem o uso de dados na camada de Internet (IP). Para corresponder a essa abordagem no Android 4.0, contamos com o fato de que para os dispositivos do kernel, os valores rx_bytes e tx_bytes retornados por dev_get_stats() retornam exatamente os bytes da camada da Internet (IP) transferidos.  Mas entendemos que para outros dispositivos isso pode não ser o caso. Por enquanto, o recurso depende dessa peculiaridade. Os novos drivers também precisam ter essa propriedade, e os valores de dev_get_stats() não podem incluir nenhum overhead de encapsulamento de camadas de rede mais baixas (como cabeçalhos Ethernet) e, de preferência, não podem incluir outro tráfego (como ARP), a menos que ele seja negligível.

O framework do Android só coleta estatísticas de interfaces de rede associadas a um NetworkStateTracker em ConnectivityService. Isso permite que o framework identifique concretamente cada interface de rede, incluindo o tipo (como TYPE_MOBILE ou TYPE_WIFI) e a identidade do assinante (como IMSI).  Todas as interfaces de rede usadas para encaminhar dados precisam ser representadas por um NetworkStateTracker para que as estatísticas possam ser contabilizadas corretamente.