ฟังก์ชันการตรวจสอบและติดตามการใช้ข้อมูลต่อแอปพลิเคชัน/ที่ได้รับมอบหมายนั้นอาศัยโมดูล xt_qtaguid ในเคอร์เนล android-3.0 Linux ( 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 เฉพาะของแอปพลิเคชันที่เป็นเจ้าของ มีองค์ประกอบแท็กสองส่วนที่เกี่ยวข้องกับซ็อกเก็ตใดๆ ในระบบ อย่างแรกคือ UID ซึ่งระบุแอปพลิเคชันที่รับผิดชอบในการถ่ายโอนข้อมูลโดยไม่ซ้ำกัน (Linux อนุญาตให้สามารถกำหนดความเป็นเจ้าของซ็อกเก็ตเครือข่ายแต่ละอันให้กับ UID ของแอปพลิเคชันที่เรียกใช้) ส่วนประกอบแท็กที่สองใช้เพื่อรองรับการกำหนดลักษณะเพิ่มเติมของการรับส่งข้อมูลในหมวดหมู่ที่ระบุของผู้พัฒนาแอปพลิเคชัน การใช้แท็กระดับแอปพลิเคชันเหล่านี้ แอปพลิเคชันสามารถจัดโปรไฟล์การรับส่งข้อมูลออกเป็นหมวดหมู่ย่อยได้หลายประเภท
ในกรณีของแอปพลิเคชันที่ให้การถ่ายโอนข้อมูลเครือข่ายเป็นบริการ เช่น ตัวจัดการดาวน์โหลด บริการสตรีมมิ่งสื่อ ฯลฯ เป็นไปได้ที่จะระบุความเป็นเจ้าของการถ่ายโอนข้อมูลเครือข่ายไปยัง UID ของแอปพลิเคชันที่ร้องขอโดยใช้ TrafficStats.setThreadStatsUid()
การเรียกใช้ฟังก์ชัน ผู้โทรต้องถือสิทธิ์ " android.permission.MODIFY_NETWORK_ACCOUNTING
" เพื่อมอบหมายความเป็นเจ้าของการรับส่งข้อมูลเครือข่ายอีกครั้ง