Ç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 atar. Çerçeve, bir uygulamanın arka plan veri trafiğini kısıtlamak için ek kurallar da belirleyebilir (com.android.server.NetworkManagementSocketTagger.setKernelCounterSet ve android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND bölümünü inceleyin).

İşleyiş şekli

qtaguid netfilter modülü, ağ trafiğini her uygulama için soket bazında izler. Bu işlemde, sahip uygulamanın benzersiz UID'si kullanılır. Sistemdeki herhangi bir soketle ilişkili iki etiket bileşeni vardır. Bunlardan ilki, veri aktarımından sorumlu uygulamayı benzersiz ş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, trafiğin uygulama geliştirici tarafından belirtilen kategorilere göre ek olarak sınıflandırılmasını desteklemek için kullanılır. Uygulamalar, bu uygulama düzeyindeki etiketleri kullanarak trafiği çeşitli alt kategorilere ayırabilir.

İndirme yöneticisi, medya aktarma hizmeti vb. gibi ağ veri aktarımını hizmet olarak sunan uygulamalarda, TrafficStats.setThreadStatsUid() işlev çağrısını kullanarak ağ veri aktarımının sahipliğini istek gönderen uygulamanın UID'sine bağlayabilirsiniz. Arayıcı, ağ trafiğinin sahipliğini yeniden atamak için "android.permission.MODIFY_NETWORK_ACCOUNTING" iznine sahip olmalıdır.