एंड्रॉइड 4.0 में, लिनक्स नेटवर्क इंटरफेस द्वारा रिपोर्ट किए गए आंकड़े समय के साथ रिकॉर्ड किए जाते हैं, और नेटवर्क कोटा सीमाओं को लागू करने, उपयोगकर्ता-दृश्यमान चार्ट प्रस्तुत करने और बहुत कुछ करने के लिए उपयोग किए जाते हैं।
प्रत्येक नेटवर्क डिवाइस ड्राइवर (वाई-फाई शामिल) को मानक कर्नेल डिवाइस जीवनचक्र का पालन करना चाहिए, और dev_get_stats()
के माध्यम से सही आंकड़े वापस करना चाहिए। विशेष रूप से, इंटरफ़ेस सक्रिय होने पर लौटाए गए आंकड़े सख्ती से मोनोटोनिक रहना चाहिए। ड्राइवर केवल एक unregister_netdev()
या समकक्ष को सफलतापूर्वक पूरा करने के बाद ही आंकड़े रीसेट कर सकते हैं जो register_netdevice_notifier()
/ register_inetaddr_notifier()
/ register_inet6addr_notifier()
) के साथ पंजीकृत कॉलबैक के लिए NETDEV_UNREGISTER
ईवेंट जेनरेट करता है।
मोबाइल ऑपरेटर आमतौर पर इंटरनेट लेयर (आईपी) पर डेटा उपयोग को मापते हैं। एंड्रॉइड 4.0 में इस दृष्टिकोण से मेल खाने के लिए, हम इस तथ्य पर भरोसा करते हैं कि कर्नेल डिवाइस के लिए हम rx_bytes
और tx_bytes
मानों की परवाह करते हैं जो dev_get_stats()
द्वारा लौटाए गए इंटरनेट परत ( IP
) बाइट्स को स्थानांतरित कर देते हैं। लेकिन हम समझते हैं कि अन्य उपकरणों के लिए ऐसा नहीं हो सकता है। अभी के लिए, यह सुविधा इस ख़ासियत पर निर्भर करती है। नए ड्राइवरों के पास वह संपत्ति भी होनी चाहिए, और dev_get_stats()
मानों में निचले नेटवर्क परतों (जैसे ईथरनेट हेडर) के किसी भी एनकैप्सुलेशन ओवरहेड को शामिल नहीं करना चाहिए, और अधिमानतः अन्य ट्रैफ़िक (जैसे एआरपी) को शामिल नहीं करना चाहिए जब तक कि यह नगण्य न हो।
Android फ्रेमवर्क केवल ConnectivityService
में NetworkStateTracker
से जुड़े नेटवर्क इंटरफेस से आंकड़े एकत्र करता है। यह फ्रेमवर्क को इसके प्रकार (जैसे TYPE_MOBILE
या TYPE_WIFI
) और ग्राहक पहचान (जैसे IMSI) सहित प्रत्येक नेटवर्क इंटरफ़ेस को ठोस रूप से पहचानने में सक्षम बनाता है। डेटा को रूट करने के लिए उपयोग किए जाने वाले सभी नेटवर्क इंटरफेस को NetworkStateTracker
द्वारा दर्शाया जाना चाहिए ताकि आंकड़ों का सही हिसाब लगाया जा सके।