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