Tổng quan

Chức năng theo dõi và giám sát việc sử dụng dữ liệu được ủy quyền/theo ứng dụng dựa trên mô-đun xt_qtaguid trong nhân 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 được xuất bởi mô-đun hạt nhân xt_qtaguid .

Mô-đun bộ lọc mạng 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 ngạch đượ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 ngạch, 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 dữ liệu nền cho một ứng dụng (tham khảo com.android.server.NetworkManagementSocketTagger.setKernelCounterSetandroid.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND ).

Làm thế nào nó hoạt động?

Mô-đun bộ lọc mạng qtaguid theo dõi lưu lượng mạng trên cơ sở từng ổ cắm cho mọi ứng dụng bằng cách sử dụng UID duy nhất của ứng dụng sở hữu. Có hai thành phần thẻ được liên kết với bất kỳ ổ cắm nào trong hệ thống. Đầu tiên là UID xác định duy nhất ứng dụng chịu trách nhiệm truyền dữ liệu (Linux cho phép khả năng gán quyền sở hữu từng ổ cắm mạng cho UID của ứng dụng gọi điện). Thành phần thẻ thứ hai được sử dụng để hỗ trợ mô tả thêm đặc tính của 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 loại lưu lượng truy cập thành nhiều danh mục phụ.

Trong trường hợp ứng dụng cung cấp dịch vụ truyền dữ liệu mạng, chẳng hạn như trình quản lý tải xuống, dịch vụ truyền phát đa phương tiện, v.v., có thể quy quyền sở hữu truyền dữ liệu mạng cho UID của ứng dụng yêu cầu bằng cách sử dụng TrafficStats.setThreadStatsUid() gọi hàm. Người gọi phải có quyền “ android.permission.MODIFY_NETWORK_ACCOUNTING ” để gán lại quyền sở hữu lưu lượng truy cập mạng.