Çekirdeğe genel bakış

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

quota2 netfilter modülü (orijinal olarak xtables-addons'un bir parçasıdır), adlandırılmış kota sınırlarını ayarlama işlevine olanak tanır ve belirli sınırlara ulaşıldığında kullanıcı alanını bilgilendirmeyi desteklemek için 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 (bkz. com.android.server.NetworkManagementSocketTagger.setKernelCounterSet ve android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND).

İşleyiş şekli

qtaguid netfilter modülü, sahip uygulamanın benzersiz UID'sini kullanarak her uygulama için soket başına ağ trafiğini izler. Sistemdeki herhangi bir soketle ilişkili iki etiket bileşeni vardır. Bunlardan ilki, veri aktarımından sorumlu uygulamayı benzersiz bir şekilde tanımlayan UID'dir (Linux, her ağ soketinin sahipliğini çağıran uygulamanın UID'sine atamaya olanak tanır). İkinci etiket bileşeni, uygulama geliştirici tarafından belirtilen kategorilere giden trafiğin ek karakterlendirmesini desteklemek için kullanılır. Uygulamalar, bu uygulama düzeyindeki etiketleri kullanarak trafiği çeşitli alt kategorilere ayırabilir.

İndirme yöneticisi ve medya akış hizmeti gibi ağ veri aktarımını bir hizmet olarak sağlayan uygulamalarda, TrafficStats.setThreadStatsUid() işlev çağrısını kullanarak ağ veri aktarımının sahipliğini, istekte bulunan uygulamanın UID'siyle ilişkilendirmek mümkündür. Arayıcı, ağ trafiğinin sahipliğini yeniden atamak için "android.permission.MODIFY_NETWORK_ACCOUNTING" iznine sahip olmalıdır.