हर ऐप्लिकेशन और डेटा के इस्तेमाल को मॉनिटर करने और ट्रैक करने की सुविधा, Android-3.0 Linux kernel (kernel/net/netfilter/xt_qtaguid
) में मौजूद xt_qtaguid मॉड्यूल पर निर्भर करती है. फ़्रेमवर्क (system/core/libcutils/qtaguid.c
) में मौजूद सॉकेट टैग करने की सुविधा, मुख्य रूप से xt_qtaguid
kernel मॉड्यूल से एक्सपोर्ट किए गए /proc/net/xt_qtaguid/ctrl
इंटरफ़ेस की मौजूदगी पर निर्भर करती है.
quota2
नेटफ़िल्टर मॉड्यूल (मूल रूप से xtables-addons
का हिस्सा) की मदद से, नाम वाले कोटे की सीमाएं सेट की जा सकती हैं. साथ ही, यह सुविधा कुछ सीमाओं तक पहुंचने पर, उपयोगकर्ता स्पेस को सूचना देने की सुविधा भी देता है. कोटा की सीमा पूरी होने के बाद, quota2
मॉड्यूल, बाद में आने वाले सभी नेटवर्क ट्रैफ़िक को खारिज कर देता है. फ़्रेमवर्क में, किसी ऐप्लिकेशन के बैकग्राउंड डेटा ट्रैफ़िक पर पाबंदी लगाने के लिए, ज़्यादा नियम भी तय किए जा सकते हैं. ज़्यादा जानकारी के लिए, com.android.server.NetworkManagementSocketTagger.setKernelCounterSet
और android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
देखें.
यह कैसे काम करता है?
qtaguid
नेटफ़िल्टर मॉड्यूल, हर ऐप्लिकेशन के लिए हर सॉकेट के हिसाब से नेटवर्क ट्रैफ़िक को ट्रैक करता है. इसके लिए, मॉड्यूल, मालिकाना हक वाले ऐप्लिकेशन के यूनीक यूआईडी का इस्तेमाल करता है. सिस्टम में किसी भी सॉकेट से जुड़े दो टैग कॉम्पोनेंट होते हैं. पहला यूआईडी, जो खास तौर पर उस ऐप्लिकेशन की पहचान करता है
जो डेटा ट्रांसफ़र के लिए ज़िम्मेदार है. Linux,
कॉल करने वाले ऐप्लिकेशन के यूआईडी को हर नेटवर्क सॉकेट के मालिकाना हक का
जानकारी देने की अनुमति देता है. दूसरे टैग कॉम्पोनेंट का इस्तेमाल, ऐप्लिकेशन डेवलपर की तय की गई कैटगरी में ट्रैफ़िक की अन्य विशेषताओं को शामिल करने के लिए किया जाता है. ऐप्लिकेशन लेवल के इन टैग का इस्तेमाल करके, ऐप्लिकेशन ट्रैफ़िक को कई सब-कैटगरी में बांट सकता है.
नेटवर्क डेटा ट्रांसफ़र की सेवा देने वाले ऐप्लिकेशन, जैसे कि डाउनलोड मैनेजर, मीडिया स्ट्रीमिंग सेवा वगैरह के मामले में, TrafficStats.setThreadStatsUid()
फ़ंक्शन कॉल का इस्तेमाल करके, अनुरोध करने वाले ऐप्लिकेशन के यूआईडी को नेटवर्क डेटा ट्रांसफ़र का मालिकाना हक दिया जा सकता है. नेटवर्क ट्रैफ़िक का मालिकाना हक फिर से असाइन करने के लिए, कॉल करने वाले के पास “android.permission.MODIFY_NETWORK_ACCOUNTING
” अनुमति होनी चाहिए.