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

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

Cada driver de dispositivo de rede (Wi-Fi incluído) deve seguir o ciclo de vida padrão do dispositivo do kernel e retornar estatísticas corretas por meio de dev_get_stats() . Em particular, as estatísticas retornadas devem permanecer estritamente monotônicas enquanto a interface estiver ativa. Os drivers podem redefinir as estatísticas somente após concluir com êxito um unregister_netdev() ou o equivalente que gera um evento NETDEV_UNREGISTER para retornos de chamada registrados com register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier() .

As operadoras móveis normalmente medem o uso de dados na camada da Internet (IP). Para corresponder a essa abordagem no Android 4.0, contamos com o fato de que para os dispositivos do kernel nos preocupamos com 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 pode não ser o caso. Por enquanto, o recurso conta com essa peculiaridade. Novos drivers também devem ter essa propriedade, e os valores dev_get_stats() não devem incluir nenhuma sobrecarga de encapsulamento de camadas de rede inferiores (como cabeçalhos Ethernet) e, de preferência, não devem incluir outro tráfego (como ARP), a menos que seja insignificante.

A estrutura do Android coleta apenas estatísticas de interfaces de rede associadas a um NetworkStateTracker em ConnectivityService . Isso permite que a estrutura identifique concretamente cada interface de rede, incluindo seu tipo (como TYPE_MOBILE ou TYPE_WIFI ) e identidade do assinante (como IMSI). Todas as interfaces de rede usadas para rotear dados devem ser representadas por um NetworkStateTracker para que as estatísticas possam ser contabilizadas corretamente.