Çekirdeğe genel bakış

Uygulama başına ve temsilci veri kullanımı izleme ve takip işlevi, android-3.0 Linux çekirdeğindeki (kernel/net/netfilter/xt_qtaguid) xt_qtaguid modülünü kullanır. Çerçevedeki (system/core/libcutils/qtaguid.c) soket etiketleme işlevi ise temel olarak xt_qtaguid çekirdek modülü tarafından dışa aktarılan /proc/net/xt_qtaguid/ctrl arayüzünün varlığına bağlıdır.

quota2 netfilter modülü (başlangıçta xtables-addons'nin bir parçasıydı), adlandırılmış kota sınırlarının ayarlanmasına olanak tanır ve belirli sınırlara ulaşıldığında kullanıcı alanına bildirim göndermeyi destekleyecek şekilde genişletilmiştir. Kota sınırına ulaşıldığında quota2 modülü, sonraki tüm ağ trafiğini siler. Çerçeve, bir uygulamanın arka plan veri trafiğini kısıtlamak için ek kurallar da belirtebilir (com.android.server.NetworkManagementSocketTagger.setKernelCounterSet ve android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND bölümlerine bakın).

İşleyiş şekli

qtaguid Netfilter modülü, sahip olan uygulamanın benzersiz UID'sini kullanan 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 uygulamayı benzersiz şekilde tanımlayan UID'dir (Linux, her ağ soketinin sahipliğini çağıran uygulamanın UID'sine atama olanağı sağlar). İkinci etiket bileşeni, trafiğin uygulama geliştiricinin belirttiği kategorilerde ek karakterizasyonunu desteklemek için kullanılır. Uygulama düzeyindeki bu etiketler kullanılarak trafik, çeşitli alt kategorilere ayrılabilir.

İndirme yöneticisi, medya akışı hizmeti vb. gibi ağ veri aktarımını hizmet olarak sağlayan uygulamalarda, TrafficStats.setThreadStatsUid() işlev çağrısı kullanılarak ağ veri aktarımının sahipliğini isteyen uygulamanın UID'sine atamak mümkündür. Arayan, ağ trafiğinin sahipliğini yeniden atamak için "android.permission.MODIFY_NETWORK_ACCOUNTING" iznine sahip olmalıdır.