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.