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 / ứ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 khuôn khổ ( 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 netfilter quota2 (ban đầu là một phần của xtables-addons ) cho phép chức năng đặt các giới hạn hạn ngạch đã đặ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 các giới hạn nhất định. Khi đạt đến giới hạn hạn ngạch, mô-đun quota2 loại bỏ tất cả lưu lượng mạng tiếp theo. Khung 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 ứ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 netfilter qtaguid theo dõi lưu lượng mạng trên cơ sở mỗi ổ 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 của mỗi ổ cắm mạng với 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ả bổ sung 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. Sử dụng các thẻ cấp ứng dụng này, một ứng dụng có thể lập hồ sơ lưu lượng 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ụ truyề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 phương tiện, v.v., có thể quy quyền sở hữu việc truyền dữ liệu mạng cho UID của ứng dụng yêu cầu bằng TrafficStats.setThreadStatsUid() hàm gọi. Người 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 mạng.