网络接口统计概览

在 Android 4.0 中,Linux 网络接口报告的统计数据会随着时间的推移进行记录,并用于强制实施网络配额限制、呈现用户可见的图表等。

每个网络设备驱动程序(包括 Wi-Fi)都必须遵循标准内核设备生命周期,并通过dev_get_stats()返回正确的统计信息。特别是,当接口处于活动状态时,返回的统计信息必须保持严格单调。驱动程序只能在成功完成unregister_netdev()或为使用register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier()注册的回调生成NETDEV_UNREGISTER事件的等效项后重置统计信息。

移动运营商通常在互联网层 (IP) 测量数据使用情况。为了与 Android 4.0 中的这种方法相匹配,我们依赖于这样一个事实,即对于内核设备,我们关心dev_get_stats()返回的rx_bytestx_bytes值准确地返回传输的 Internet 层 ( IP ) 字节。但我们知道,对于其他设备,情况可能并非如此。目前,该功能依赖于这种特性。新驱动程序也应该具有该属性,并且dev_get_stats()值不得包括较低网络层的任何封装开销(例如以太网标头),并且最好不包括其他流量(例如 ARP),除非它可以忽略不计。

Android 框架仅从与ConnectivityService中的NetworkStateTracker关联的网络接口收集统计信息。这使框架能够具体识别每个网络接口,包括其类型(例如TYPE_MOBILETYPE_WIFI )和订户身份(例如 IMSI)。用于路由数据的所有网络接口都应由NetworkStateTracker表示,以便可以正确计算统计信息。