באנדרואיד 4.0, נתונים סטטיסטיים המדווחים על ידי ממשקי רשת לינוקס נרשמים לאורך זמן, ומשמשים לאכיפת מגבלות מכסות רשת, עיבוד תרשימים גלויים למשתמש ועוד.
כל מנהל התקן רשת (כלול ב-Wi-Fi) חייב לעמוד במחזור החיים הסטנדרטי של מכשיר הליבה, ולהחזיר נתונים סטטיסטיים נכונים דרך dev_get_stats()
. בפרט, הסטטיסטיקה המוחזרת חייבת להישאר מונוטונית לחלוטין בזמן שהממשק פעיל. מנהלי התקנים רשאים לאפס נתונים סטטיסטיים רק לאחר השלמת בהצלחה unregister_netdev()
או שווה ערך שיוצר אירוע NETDEV_UNREGISTER
עבור התקשרויות שנרשמו עם register_netdevice_notifier()
/ register_inetaddr_notifier()
/ register_inet6addr_notifier()
.
מפעילי סלולר מודדים בדרך כלל את השימוש בנתונים בשכבת האינטרנט (IP). כדי להתאים את הגישה הזו באנדרואיד 4.0, אנו מסתמכים על העובדה שעבור מכשירי הליבה אכפת לנו rx_bytes
ו- tx_bytes
המוחזרים על ידי dev_get_stats()
מחזירים בדיוק את בתים של שכבת האינטרנט ( IP
) שהועברו. אבל אנחנו מבינים שעבור מכשירים אחרים זה אולי לא המקרה. לעת עתה, התכונה מסתמכת על המוזרות הזו. מנהלי התקנים חדשים צריכים להיות בעלי מאפיין זה גם כן, dev_get_stats()
אינם יכולים לכלול תקורה כלשהי של תקורה של שכבות רשת נמוכות יותר (כגון כותרות Ethernet), ורצוי שלא לכלול תעבורה אחרת (כגון ARP) אלא אם היא זניחה.
מסגרת Android אוספת נתונים סטטיסטיים רק מממשקי רשת המשויכים ל- NetworkStateTracker
ב- ConnectivityService
. זה מאפשר למסגרת לזהות באופן קונקרטי כל ממשק רשת, כולל סוגו (כגון TYPE_MOBILE
או TYPE_WIFI
) וזהות המנוי (כגון IMSI). כל ממשקי הרשת המשמשים לניתוב נתונים צריכים להיות מיוצגים על ידי NetworkStateTracker
כך שניתן יהיה לתאר את הנתונים הסטטיסטיים בצורה נכונה.