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

تعتمد وظائف رصد ومتابعة استخدام البيانات لكل تطبيق واستخدام البيانات المفوَّضة على وحدة xt_qtaguid في ملف ‎kernel/net/netfilter/xt_qtaguid لنظام التشغيل Android 3.0 Linux . تعتمد وظائف وضع العلامات على مآخذ التوصيل في إطار العمل (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).

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

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

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