Trong Android 4.0, số liệu thống kê do giao diện mạng Linux báo cáo được ghi lại theo thời gian và được dùng để thực thi các hạn mức hạn mức mạng, hiển thị biểu đồ mà người dùng nhìn thấy, v.v.
Mỗi trình điều khiển thiết bị mạng (bao gồm cả Wi-Fi) phải tuân theo vòng đời thiết bị hạt nhân tiêu chuẩn và trả về số liệu thống kê chính xác thông qua dev_get_stats()
. Cụ thể, số liệu thống kê được trả về phải luôn tăng dần một cách nghiêm ngặt trong khi giao diện đang hoạt động. Trình điều khiển chỉ có thể đặt lại thống kê sau khi hoàn tất thành công unregister_netdev()
hoặc tương đương để tạo sự kiện NETDEV_UNREGISTER
cho lệnh gọi lại được đăng ký bằng register_netdevice_notifier()
/register_inetaddr_notifier()
/ register_inet6addr_notifier()
.
Các nhà mạng di động thường đo lường mức sử dụng dữ liệu ở lớp Internet (IP). Để phù hợp với phương pháp này trong Android 4.0, chúng ta dựa vào thực tế là đối với các thiết bị hạt nhân, chúng ta quan tâm đến các giá trị rx_bytes
và tx_bytes
do dev_get_stats()
trả về chính xác là số byte lớp Internet (IP
) được chuyển. Nhưng chúng tôi hiểu rằng đối với các thiết bị khác, điều này có thể không đúng. Hiện tại, tính năng này dựa vào đặc điểm này. Trình điều khiển mới cũng phải có thuộc tính đó và giá trị dev_get_stats()
không được bao gồm bất kỳ hao tổn đóng gói nào của các lớp mạng thấp hơn (chẳng hạn như tiêu đề Ethernet) và tốt nhất là không bao gồm lưu lượng truy cập khác (chẳng hạn như ARP) trừ khi lưu lượng truy cập đó không đáng kể.
Khung Android chỉ thu thập số liệu thống kê từ các giao diện mạng liên kết với NetworkStateTracker
trong ConnectivityService
. Điều này cho phép khung xác định cụ thể từng giao diện mạng, bao gồm cả loại giao diện (chẳng hạn như TYPE_MOBILE
hoặc TYPE_WIFI
) và danh tính người đăng ký (chẳng hạn như IMSI). Tất cả giao diện mạng dùng để định tuyến dữ liệu phải được biểu thị bằng NetworkStateTracker
để có thể tính toán số liệu thống kê một cách chính xác.