網絡接口統計概覽

在 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表示,以便可以正確計算統計信息。