Chức năng theo dõi cũng như theo dõi mức sử dụng dữ liệu cho mỗi ứng dụng và được uỷ quyền dựa vào mô-đun xt_qtaguide trong mô-đun Linux android-3.0 (kernel/net/netfilter/xt_qtaguid
). Chức năng gắn thẻ ổ cắm trong khung (system/core/libcutils/qtaguid.c
) chủ yếu dựa vào sự tồn tại của giao diện /proc/net/xt_qtaguid/ctrl
do mô-đun nhân xt_qtaguid
xuất.
Mô-đun netfilter quota2
(ban đầu là một phần của xtables-addons
) cho phép chức năng đặt giới hạn hạn mức đã đặt tên và được mở rộng để hỗ trợ thông báo cho không gian người dùng khi đạt đến một số giới hạn nhất định. Khi đạt đến giới hạn hạn mức, mô-đun quota2
sẽ loại bỏ tất cả lưu lượng truy cập mạng tiếp theo. Khung này cũng có thể chỉ định các quy tắc bổ sung để hạn chế lưu lượng truy cập dữ liệu ở chế độ nền cho một ứng dụng (tham khảo com.android.server.NetworkManagementSocketTagger.setKernelCounterSet
và android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND
).
Cách thức hoạt động
Mô-đun netfilter qtaguid
theo dõi lưu lượng truy cập mạng trên cơ sở mỗi ổ cắm cho mọi ứng dụng bằng cách sử dụng UID riêng biệt của ứng dụng sở hữu. Có hai thành phần thẻ liên kết với mọi ổ cắm trong hệ thống. Đầu tiên là UID giúp xác định duy nhất ứng dụng chịu trách nhiệm chuyển dữ liệu (Linux cho phép khả năng gán quyền sở hữu của từng ổ cắm mạng cho UID của ứng dụng gọi). Thành phần thẻ thứ hai được dùng để hỗ trợ thêm thông tin mô tả về lưu lượng truy cập vào các danh mục do nhà phát triển ứng dụng chỉ định. Bằng cách sử dụng các thẻ cấp ứng dụng này, ứng dụng có thể phân tích lưu lượng truy cập thành một số danh mục phụ.
Trong trường hợp các ứng dụng cung cấp dịch vụ chuyển dữ liệu mạng, chẳng hạn như trình quản lý tải xuống, dịch vụ phát trực tuyến nội dung nghe nhìn, v.v., bạn có thể phân bổ quyền sở hữu của dịch vụ chuyển dữ liệu mạng cho UID của ứng dụng yêu cầu bằng cách sử dụng lệnh gọi hàm TrafficStats.setThreadStatsUid()
. Phương thức gọi phải có quyền "android.permission.MODIFY_NETWORK_ACCOUNTING
" để chỉ định lại quyền sở hữu lưu lượng truy cập mạng.