Uygulama başına/yetki verilen veri kullanımı izleme ve izleme işlevi, Android-3.0 Linux çekirdeğindeki ( kernel/net/netfilter/xt_qtaguid
) xt_qtaguid modülüne dayanır. Çerçevedeki ( system/core/libcutils/qtaguid.c
) soket etiketleme işlevi esas olarak xt_qtaguid
çekirdek modülü tarafından dışa aktarılan /proc/net/xt_qtaguid/ctrl
arabiriminin varlığına dayanır.
quota2
netfilter modülü (başlangıçta xtables-addons
bir parçası), işlevselliğin adlandırılmış kota sınırlarını ayarlamasına izin verir ve belirli sınırlara ulaşıldığında kullanıcı alanına bildirimde bulunmayı destekleyecek şekilde genişletildi. Kota sınırına ulaşıldığında, quota2
modülü sonraki tüm ağ trafiğini iptal eder. Çerçeve ayrıca bir uygulamanın arka plan veri trafiğini kısıtlamak için ek kurallar da belirtebilir (bkz com.android.server.NetworkManagementSocketTagger.setKernelCounterSet
ve android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
).
O nasıl çalışır?
qtaguid
netfilter modülü, sahip olunan uygulamanın benzersiz UID'sini kullanarak her uygulama için ağ trafiğini soket bazında izler. Sistemdeki herhangi bir soketle ilişkili iki etiket bileşeni vardır. Birincisi, veri aktarımından sorumlu olan uygulamayı benzersiz bir şekilde tanımlayan UID'dir (Linux, her ağ soketinin sahipliğini, çağıran uygulamanın UID'sine atfetme olanağı sağlar). İkinci etiket bileşeni, trafiğin uygulama geliştiricisinin belirlediği kategorilere göre ek karakterizasyonunu desteklemek için kullanılır. Bir uygulama, bu uygulama düzeyindeki etiketleri kullanarak trafiğin profilini birkaç alt kategoriye ayırabilir.
İndirme yöneticisi, medya akış hizmeti vb. gibi bir hizmet olarak ağ veri aktarımı sağlayan uygulamalar söz konusu olduğunda, TrafficStats.setThreadStatsUid()
kullanarak ağ veri aktarımının sahipliğini istekte bulunan uygulamanın UID'sine atfetmek mümkündür. TrafficStats.setThreadStatsUid()
işlev çağrısı. Arayanın, ağ trafiğinin sahipliğini yeniden atamak için “ android.permission.MODIFY_NETWORK_ACCOUNTING
” iznine sahip olması gerekir.