نظرة عامة على النواة

تعتمد وظيفة مراقبة استخدام البيانات وتتبُّعها على مستوى كل تطبيق وعلى مستوى البيانات المفوضة على الوحدة xt_qtaguid في نواة Linux لنظام Android 3.0 (kernel/net/netfilter/xt_qtaguid). وتعتمد وظيفة وضع علامات على المقابس في إطار العمل (system/core/libcutils/qtaguid.c) بشكل أساسي على توفُّر واجهة /proc/net/xt_qtaguid/ctrl التي تصدّرها وحدة النواة xt_qtaguid.

تسمح وحدة quota2 netfilter (التي كانت في الأصل جزءًا من xtables-addons) بتحديد حدود الحصص المسموح بها المسماة، وتم توسيعها لتتيح إمكانية إرسال إشعارات إلى مساحة المستخدم عند بلوغ حدود معيّنة. وبعد بلوغ الحد الأقصى للحصة، تتجاهل وحدة quota2 جميع زيارات الشبكة اللاحقة. يمكن للإطار أيضًا تحديد قواعد إضافية لتقييد عدد مرات نقل البيانات في الخلفية لتطبيق معيّن (راجِع com.android.server.NetworkManagementSocketTagger.setKernelCounterSet وandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND).

كيف تعمل هذه الميزة؟

يتتبّع وحدة qtaguid netfilter عدد الزيارات على الشبكة على أساس كل مقبس لكل تطبيق يستخدم المعرّف الفريد UID الخاص بالتطبيق المالك. هناك مكوّنان للعلامة مرتبطان بأي مقبس في النظام. أولاً، المعرّف UID الذي يحدّد بشكل فريد التطبيق المسؤول عن نقل البيانات (يتيح نظام التشغيل Linux إمكانية تحديد مالك كل مقبس شبكة من خلال المعرّف UID الخاص بالتطبيق الذي يطلب البيانات). يتم استخدام مكوّن العلامة الثاني لإتاحة تصنيف إضافي للزيارات إلى فئات يحدّدها مطوّر التطبيق. باستخدام هذه العلامات على مستوى التطبيق، يمكن للتطبيق تصنيف الزيارات إلى عدة فئات فرعية.

في حالة التطبيقات التي توفّر خدمة نقل البيانات عبر الشبكة، مثل مدير التنزيل وخدمة بث الوسائط وما إلى ذلك، يمكن تحديد التطبيق الذي يملك عملية نقل البيانات عبر الشبكة من خلال معرّف المستخدم (UID) للتطبيق الذي يطلب ذلك باستخدام استدعاء الدالة TrafficStats.setThreadStatsUid(). يجب أن يكون لدى المتصل إذن "android.permission.MODIFY_NETWORK_ACCOUNTING" لإعادة تعيين ملكية زيارات الشبكة.