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 soket di framework (system/core/libcutils/qtaguid.c
) sebagian besar 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 menetapkan batas kuota bernama dan diperluas untuk
mendukung pemberitahuan userspace saat batas tertentu tercapai. Setelah batas kuota tercapai, modul quota2
akan menghapus semua traffic jaringan berikutnya. Framework 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-socket untuk setiap aplikasi yang menggunakan UID unik dari aplikasi pemilik. Ada dua komponen tag yang terkait dengan socket apa pun dalam sistem. Yang pertama adalah UID yang mengidentifikasi aplikasi yang bertanggung jawab atas transfer data secara unik (Linux memungkinkan kemampuan untuk menetapkan kepemilikan setiap soket jaringan ke UID aplikasi yang memanggil). Komponen tag kedua digunakan
untuk mendukung karakterisasi tambahan traffic ke dalam kategori yang ditentukan
oleh developer aplikasi. Dengan menggunakan tag tingkat aplikasi ini, aplikasi dapat membagi traffic ke dalam beberapa subkategori.
Dalam kasus 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.