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 utama bergantung pada keberadaan antarmuka /proc/net/xt_qtaguid/ctrl
yang diekspor oleh modul kernel xt_qtaguid
.
Modul netfilter quota2
(awalnya bagian dari xtables-addons
)
memungkinkan fungsi untuk menetapkan batas kuota yang dinamai dan diperluas untuk
mendukung notifikasi ruang pengguna 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 kategori
yang ditentukan developer aplikasi. Dengan menggunakan tag tingkat aplikasi ini, aplikasi dapat membuat profil traffic ke dalam beberapa subkategori.
Dalam kasus aplikasi yang menyediakan transfer data jaringan sebagai
layanan, seperti pengelola download, layanan streaming media, dll.,
Anda dapat mengatribusikan kepemilikan transfer data jaringan
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.