Ringkasan statistik antarmuka jaringan

Di Android 4.0, statistik yang dilaporkan oleh antarmuka jaringan Linux direkam dari waktu ke waktu, dan digunakan untuk menerapkan batas kuota jaringan, merender diagram yang terlihat pengguna, dan banyak lagi.

Setiap driver perangkat jaringan (termasuk Wi-Fi) harus mengikuti siklus proses perangkat kernel standar, dan menampilkan statistik yang benar melalui dev_get_stats(). Secara khusus, statistik yang ditampilkan harus tetap monoton saat antarmuka aktif. Driver hanya dapat mereset statistik setelah berhasil menyelesaikan unregister_netdev() atau yang setara yang menghasilkan peristiwa NETDEV_UNREGISTER untuk callback yang terdaftar dengan register_netdevice_notifier() / register_inetaddr_notifier() / register_inet6addr_notifier().

Operator seluler biasanya mengukur penggunaan data di lapisan Internet (IP). Untuk mencocokkan pendekatan ini di Android 4.0, kita mengandalkan fakta bahwa untuk perangkat kernel yang kita perhatikan, nilai rx_bytes dan tx_bytes yang ditampilkan oleh dev_get_stats() menampilkan byte lapisan Internet (IP) yang ditransfer.  Namun, kami memahami bahwa untuk perangkat lain, hal ini mungkin tidak berlaku. Untuk saat ini, fitur ini mengandalkan kekhususan ini. Driver baru juga harus memiliki properti tersebut, dan nilai dev_get_stats() tidak boleh menyertakan overhead enkapsulasi lapisan jaringan yang lebih rendah (seperti header Ethernet), dan sebaiknya tidak menyertakan traffic lain (seperti ARP) kecuali jika tidak signifikan.

Framework Android hanya mengumpulkan statistik dari antarmuka jaringan yang terkait dengan NetworkStateTracker di ConnectivityService. Hal ini memungkinkan framework mengidentifikasi setiap antarmuka jaringan secara konkret, termasuk jenisnya (seperti TYPE_MOBILE atau TYPE_WIFI) dan identitas pelanggan (seperti IMSI).  Semua antarmuka jaringan yang digunakan untuk me-rutekan data harus direpresentasikan oleh NetworkStateTracker sehingga statistik dapat diperhitungkan dengan benar.