סקירה כללית

הפונקציונליות של ניטור ומעקב אחר שימוש בנתונים לפי אפליקציה/אצל מסתמכת על מודול 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 המזהה באופן ייחודי את האפליקציה האחראית להעברת הנתונים (Linux מאפשרת את היכולת לייחס את הבעלות של כל שקע רשת ל-UID של האפליקציה המתקשרת). רכיב התג השני משמש לתמיכה באפיון נוסף של התעבורה לקטגוריות שצוינו על ידי מפתח יישומים. באמצעות תגים אלה ברמת האפליקציה, אפליקציה יכולה ליצור פרופיל של התנועה למספר קטגוריות משנה.

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