ฟังก์ชันการตรวจสอบและการติดตามปริมาณการใช้อินเทอร์เน็ตต่อแอปและที่มอบสิทธิ์นั้นใช้โมดูล xt_qtaguid ในเคอร์เนล Linux ของ android-3.0 (kernel/net/netfilter/xt_qtaguid
) ฟังก์ชันการติดแท็กซ็อกเก็ตในเฟรมเวิร์ก (system/core/libcutils/qtaguid.c
) นั้นอาศัยการมีอินเทอร์เฟซ /proc/net/xt_qtaguid/ctrl
ที่ส่งออกโดยโมดูลเคอร์เนล xt_qtaguid
เป็นส่วนใหญ่
quota2
โมดูล netfilter (เดิมเป็นส่วนหนึ่งของ xtables-addons
) ช่วยให้คุณตั้งค่าขีดจำกัดโควต้าที่มีชื่อได้ และขยายการทำงานเพื่อรองรับการแจ้งเตือนพื้นที่ผู้ใช้เมื่อถึงขีดจำกัดที่กำหนด เมื่อถึงขีดจํากัดโควต้าแล้ว โมดูล quota2
จะทิ้งการรับส่งข้อมูลในเครือข่ายทั้งหมดที่ตามมา เฟรมเวิร์กยังระบุกฎเพิ่มเติมเพื่อจำกัดการรับส่งข้อมูลในเบื้องหลังสำหรับแอปได้ด้วย (ดูcom.android.server.NetworkManagementSocketTagger.setKernelCounterSet
และandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
)
วิธีการทำงาน
qtaguid
โมดูล netfilter จะติดตามการเข้าชมเครือข่ายตามแต่ละซ็อกเก็ตสําหรับทุกแอปโดยใช้ UID ที่ไม่ซ้ำกันของแอปที่เป็นเจ้าของ คอมโพเนนต์แท็ก 2 รายการจะเชื่อมโยงกับซ็อกเก็ตในระบบ รายการแรกคือ UID ซึ่งระบุแอปที่รับผิดชอบการโอนข้อมูลโดยไม่ซ้ำกัน (Linux อนุญาตให้ระบุความเป็นเจ้าของของซ็อกเก็ตเครือข่ายแต่ละรายการเป็น UID ของแอปที่เรียกใช้) ส่วนประกอบแท็กที่ 2 ใช้เพื่อรองรับการระบุลักษณะการเข้าชมเพิ่มเติมในหมวดหมู่ที่นักพัฒนาแอประบุ การใช้แท็กระดับแอปเหล่านี้จะช่วยให้แอปสามารถแบ่งกลุ่มการเข้าชมออกเป็นหมวดหมู่ย่อยได้หลายหมวดหมู่
ในกรณีที่แอปให้บริการโอนข้อมูลผ่านเครือข่าย เช่น ตัวจัดการการดาวน์โหลด บริการสตรีมมิงสื่อ ฯลฯ คุณสามารถระบุแหล่งที่มาของการเป็นเจ้าของการโอนข้อมูลผ่านเครือข่ายเป็น UID ของแอปที่ขอได้โดยใช้TrafficStats.setThreadStatsUid()
การเรียกใช้ฟังก์ชัน ผู้เรียกต้องถือสิทธิ์ "android.permission.MODIFY_NETWORK_ACCOUNTING
" เพื่อกำหนดการเป็นเจ้าของการรับส่งข้อมูลในเครือข่ายอีกครั้ง