Di Android 4.0, statistik yang dilaporkan oleh antarmuka jaringan Linux dicatat dari waktu ke waktu, dan digunakan untuk menerapkan batas kuota jaringan, membuat bagan yang terlihat oleh pengguna, dan banyak lagi.
Setiap driver perangkat jaringan (termasuk Wi-Fi) harus mengikuti siklus hidup perangkat kernel standar, dan mengembalikan statistik yang benar melalui dev_get_stats()
. Secara khusus, statistik yang dikembalikan harus tetap monoton saat antarmuka aktif. Driver dapat mengatur ulang statistik hanya setelah berhasil menyelesaikan unregister_netdev()
atau yang setara yang menghasilkan peristiwa NETDEV_UNREGISTER
untuk panggilan balik yang terdaftar dengan register_netdevice_notifier()
/ register_inetaddr_notifier()
/ register_inet6addr_notifier()
.
Operator seluler biasanya mengukur penggunaan data pada lapisan Internet (IP). Untuk mencocokkan pendekatan ini di Android 4.0, kami mengandalkan fakta bahwa untuk perangkat kernel kami memperhatikan nilai rx_bytes
dan tx_bytes
yang dikembalikan oleh dev_get_stats()
mengembalikan persis lapisan Internet ( IP
) byte yang ditransfer. Tetapi kami memahami bahwa untuk perangkat lain mungkin tidak demikian. Untuk saat ini, fitur tersebut bergantung pada kekhasan ini. Driver baru harus memiliki properti itu juga, dan nilai dev_get_stats()
tidak boleh menyertakan overhead enkapsulasi dari lapisan jaringan yang lebih rendah (seperti header Ethernet), dan sebaiknya tidak menyertakan lalu lintas lain (seperti ARP) kecuali jika diabaikan.
Kerangka kerja Android hanya mengumpulkan statistik dari antarmuka jaringan yang terkait dengan NetworkStateTracker
di ConnectivityService
. Ini memungkinkan kerangka kerja untuk secara konkret mengidentifikasi setiap antarmuka jaringan, termasuk jenisnya (seperti TYPE_MOBILE
atau TYPE_WIFI
) dan identitas pelanggan (seperti IMSI). Semua antarmuka jaringan yang digunakan untuk merutekan data harus diwakili oleh NetworkStateTracker
sehingga statistik dapat dihitung dengan benar.