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