סקירה כללית

הפונקציונליות של ניטור ומעקב אחר שימוש בנתונים לפי אפליקציה/מואצלה מסתמכת על מודול xt_qtaguid בקרנל android-3.0 Linux ( kernel/net/netfilter/xt_qtaguid ). פונקציונליות תיוג השקע במסגרת ( system/core/libcutils/qtaguid.c ) מסתמכת בעיקר על קיומו של ממשק /proc/net/xt_qtaguid/ctrl המיוצא על ידי מודול ליבת xt_qtaguid .

מודול ה-netfilter quota2 (במקור חלק מ- xtables-addons ) מאפשר לפונקציונליות להגדיר מגבלות מכסה בשמות, והוא הורחב כדי לתמוך בהודעת מרחב משתמש כאשר הגבלות מסוימות הושגו. לאחר הגעת מגבלת המכסה, מודול quota2 משליך את כל תעבורת הרשת הבאה. המסגרת יכולה גם לציין כללים נוספים להגבלת תעבורת נתוני רקע עבור יישום (עיין ב- com.android.server.NetworkManagementSocketTagger.setKernelCounterSet ו- android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

איך זה עובד?

מודול qtaguid netfilter עוקב אחר תעבורת הרשת על בסיס לכל שקע עבור כל אפליקציה באמצעות ה-UID הייחודי של האפליקציה שבבעלותה. ישנם שני רכיבי תג המשויכים לכל שקע במערכת. הראשון הוא ה-UID המזהה באופן ייחודי את האפליקציה שאחראית להעברת הנתונים (לינוקס מאפשרת את היכולת לייחס את הבעלות של כל שקע רשת ל-UID של האפליקציה המתקשרת). רכיב התג השני משמש לתמיכה באפיון נוסף של התעבורה לקטגוריות שצוינו על ידי מפתח יישומים. באמצעות תגים אלה ברמת האפליקציה, אפליקציה יכולה ליצור פרופיל של התנועה למספר קטגוריות משנה.

במקרה של אפליקציות המספקות העברת נתונים ברשת כשירות, כגון מנהל ההורדות, שירות הזרמת מדיה וכו', ניתן לייחס את הבעלות על העברת נתוני הרשת ל-UID של האפליקציה המבקשת באמצעות TrafficStats.setThreadStatsUid() קריאת פונקציה. המתקשר חייב להחזיק בהרשאת " android.permission.MODIFY_NETWORK_ACCOUNTING " כדי להקצות מחדש את הבעלות על תעבורת הרשת.