नेटवर्क इंटरफ़ेस के आंकड़ों की खास जानकारी

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 से दिखाया जाना चाहिए, ताकि आंकड़ों का सही तरीके से हिसाब लगाया जा सके.