कर्नेल के बारे में खास जानकारी

हर ऐप्लिकेशन और डेटा के इस्तेमाल को मॉनिटर करने और ट्रैक करने की सुविधा, 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 का हिस्सा) की मदद से, नाम वाले कोटे की सीमाएं सेट की जा सकती हैं. साथ ही, यह सुविधा कुछ सीमाओं तक पहुंचने पर, उपयोगकर्ता स्पेस को सूचना देने की सुविधा भी देता है. कोटा की सीमा पूरी होने के बाद, quota2 मॉड्यूल, बाद में आने वाले सभी नेटवर्क ट्रैफ़िक को खारिज कर देता है. फ़्रेमवर्क में, किसी ऐप्लिकेशन के बैकग्राउंड डेटा ट्रैफ़िक पर पाबंदी लगाने के लिए, अन्य नियम भी तय किए जा सकते हैं. ज़्यादा जानकारी के लिए, com.android.server.NetworkManagementSocketTagger.setKernelCounterSet और android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND देखें.

यह कैसे काम करता है?

qtaguid नेटफ़िल्टर मॉड्यूल, हर ऐप्लिकेशन के लिए हर सॉकेट के आधार पर नेटवर्क ट्रैफ़िक को ट्रैक करता है. इसके लिए, मालिकाना हक वाले ऐप्लिकेशन का यूनीक यूआईडी इस्तेमाल किया जाता है. सिस्टम में किसी भी सॉकेट से जुड़े दो टैग कॉम्पोनेंट होते हैं. पहला यूआईडी, डेटा ट्रांसफ़र करने वाले ऐप्लिकेशन की खास पहचान करता है. Linux, हर नेटवर्क सॉकेट का मालिकाना हक, कॉल करने वाले ऐप्लिकेशन के यूआईडी को असाइन करने की सुविधा देता है. दूसरे टैग कॉम्पोनेंट का इस्तेमाल, ऐप्लिकेशन डेवलपर की तय की गई कैटगरी में ट्रैफ़िक की अन्य विशेषताओं को शामिल करने के लिए किया जाता है. ऐप्लिकेशन लेवल के इन टैग का इस्तेमाल करके, ऐप्लिकेशन ट्रैफ़िक को कई सब-कैटगरी में बांट सकता है.

नेटवर्क डेटा ट्रांसफ़र की सेवा देने वाले ऐप्लिकेशन, जैसे कि डाउनलोड मैनेजर, मीडिया स्ट्रीमिंग सेवा वगैरह के मामले में, TrafficStats.setThreadStatsUid() फ़ंक्शन कॉल का इस्तेमाल करके, अनुरोध करने वाले ऐप्लिकेशन के यूआईडी को नेटवर्क डेटा ट्रांसफ़र का मालिकाना हक दिया जा सकता है. नेटवर्क ट्रैफ़िक का मालिकाना हक फिर से असाइन करने के लिए, कॉल करने वाले के पास “android.permission.MODIFY_NETWORK_ACCOUNTING” अनुमति होनी चाहिए.