نظرة عامة على إحصائيات واجهة الشبكة

في Android 4.0 ، يتم تسجيل الإحصائيات التي تم الإبلاغ عنها بواسطة واجهات شبكة 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 بحيث يمكن حساب الإحصائيات بشكل صحيح.