في الإصدار 4.0 من نظام التشغيل Android، يتم تسجيل الإحصاءات التي تُبلغ عنها واجهات شبكة Linux بمرور الوقت، ويتم استخدامها لفرض حدود الحصة على الشبكة، وعرض الرسوم البيانية التي تظهر للمستخدمين، وغير ذلك.
يجب أن يتّبع كل برنامج تشغيل لجهاز شبكة (بما في ذلك Wi-Fi) مراحل النشاط العادية
لجهاز kernel، وأن يعرض إحصاءات صحيحة من خلال
dev_get_stats()
. وعلى وجه الخصوص، يجب أن تظل الإحصاءات المعروضة
متسقة تمامًا أثناء نشاط الواجهة. لا يمكن للسائقين إعادة ضبط الجدول الزمني للقياس إلا بعد إكمال unregister_netdev()
بنجاح أو الإجراء المكافئ الذي ينشئ حدث NETDEV_UNREGISTER
لطلبات register_netdevice_notifier()
/
register_inetaddr_notifier()
/ register_inet6addr_notifier()
المسجّلة.
تقيس مشغّلو شبكات الجوّال عادةً استخدام البيانات في طبقة الإنترنت
(IP). لمطابقة هذا النهج في Android 4.0، نعتمد على حقيقة أنّه
بالنسبة إلى أجهزة kernel، نهتم بالقيم rx_bytes
وtx_bytes
التي يعرضها dev_get_stats()
، وهي تعرِض بالضبط عدد وحدات البت التي تم نقلها في IP
. ولكن قد لا يكون الأمر كذلك على الأجهزة الأخرى. في الوقت الحالي، تعتمد الميزة على هذه
الميزة الفريدة. يجب أن تتضمّن برامج التشغيل الجديدة هذه السمة أيضًا، ويجب ألا تشمل قيم dev_get_stats()
أيّ تكلفة إضافية للتغليف في مستويات الشبكة الدنيا (مثل رؤوس Ethernet)، ويجب ألا تشمل
يُفضَّل عدم تضمين حركة مرور أخرى (مثل ARP) ما لم تكن
منخفضة جدًا.
لا يجمع إطار عمل Android إحصاءات إلا من واجهات الشبكة
المرتبطة بـ NetworkStateTracker
في ConnectivityService
. يتيح ذلك
للإطار العمل تحديد كل واجهة شبكة بشكلٍ ملموس،
بما في ذلك نوعها (مثل TYPE_MOBILE
أو TYPE_WIFI
)
ومعرّف المشترك (مثل رقم التعريف الدولي للمشترك في خدمات الجوّال (IMSI)). يجب تمثيل جميع واجهات الشبكة المستخدَمة في توجيه البيانات باستخدام NetworkStateTracker
حتى يمكن احتساب الإحصاءات بشكل صحيح.