Ringkasan kernel

Fungsi pemantauan dan pelacakan penggunaan data per aplikasi dan yang didelegasikan bergantung pada modul xt_qtaguid di kernel Linux android-3.0 (kernel/net/netfilter/xt_qtaguid). Fungsi pemberian tag socket dalam framework (system/core/libcutils/qtaguid.c) secara khusus bergantung pada keberadaan antarmuka /proc/net/xt_qtaguid/ctrl yang diekspor oleh modul kernel xt_qtaguid.

Modul netfilter quota2 (awalnya merupakan bagian dari xtables-addons) memungkinkan fungsi untuk menetapkan batas kuota bernama dan diperluas untuk mendukung memberi tahu userspace saat batas tertentu tercapai. Setelah batas kuota tercapai, modul quota2 akan menghapus semua traffic jaringan berikutnya. Framework ini juga dapat menentukan aturan tambahan untuk membatasi traffic data latar belakang untuk aplikasi (lihat com.android.server.NetworkManagementSocketTagger.setKernelCounterSet dan android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND).

Bagaimana caranya?

Modul netfilter qtaguid melacak traffic jaringan berdasarkan per soket untuk setiap aplikasi menggunakan UID unik aplikasi pemilik. Ada dua komponen tag yang terkait dengan soket apa pun dalam sistem. Yang pertama adalah UID yang secara unik mengidentifikasi aplikasi yang bertanggung jawab atas transfer data (Linux memungkinkan kemampuan untuk mengatribusikan kepemilikan setiap soket jaringan ke UID aplikasi panggilan). Komponen tag kedua digunakan untuk mendukung karakterisasi tambahan traffic ke dalam kategori yang ditentukan developer aplikasi. Dengan menggunakan tag tingkat aplikasi ini, aplikasi dapat membuat profil traffic ke dalam beberapa subkategori.

Pada aplikasi yang menyediakan transfer data jaringan sebagai layanan, seperti pengelola download, layanan streaming media, dll., kepemilikan transfer data jaringan dapat diatribusikan ke UID aplikasi yang meminta menggunakan panggilan fungsi TrafficStats.setThreadStatsUid(). Pemanggil harus memiliki izin “android.permission.MODIFY_NETWORK_ACCOUNTING” untuk menetapkan ulang kepemilikan traffic jaringan.