הפונקציונליות של מעקב וניטור שימוש בנתונים לפי אפליקציה ובהרשאת גישה מוגבלת מסתמכת על מודול xt_qtaguid בקרנל של android-3.0 Linux (kernel/net/netfilter/xt_qtaguid). הפונקציונליות של תיוג שקעים ב-framework (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 שמזהה באופן ייחודי את האפליקציה שאחראית להעברת הנתונים (ב-Linux אפשר לשייך את הבעלות של כל שקע רשת ל-UID של האפליקציה שקוראת). רכיב התג השני משמש לתמיכה בסיווג נוסף של התנועה לקטגוריות שצוינו על ידי מפתח האפליקציה. באמצעות התגים האלה ברמת האפליקציה, אפשר ליצור פרופיל של התנועה באפליקציה לפי כמה קטגוריות משנה.
במקרה של אפליקציות שמספקות העברת נתונים ברשת כשירות, כמו מנהל ההורדות, שירות סטרימינג של מדיה וכו', אפשר לשייך את הבעלות על העברת הנתונים ברשת ל-UID של האפליקציה ששולחת את הבקשה באמצעות קריאה לפונקציה TrafficStats.setThreadStatsUid(). למתקשר צריכה להיות הרשאה מסוג android.permission.MODIFY_NETWORK_ACCOUNTING כדי להקצות מחדש את הבעלות על תעבורת הרשת.