Giảm tải kết nối cho phép các thiết bị tiết kiệm năng lượng và cải thiện hiệu suất bằng cách giảm tải lưu lượng kết nối (qua USB, Wi-Fi) cho phần cứng. Lưu lượng kết nối được giảm tải bằng cách cung cấp đường dẫn trực tiếp giữa modem và thiết bị ngoại vi, bỏ qua bộ xử lý ứng dụng.
Thông số kỹ thuật
Bắt đầu từ Android 8.1, các thiết bị có thể sử dụng tính năng giảm tải chia sẻ kết nối để giảm tải chuyển tiếp IPv4, IPv6 hoặc IPv4+IPv6 sang phần cứng.
Tính năng giảm tải không cần phải giảm tải tất cả các gói. Khung này có khả năng xử lý bất kỳ gói nào trong phần mềm. Các gói điều khiển thường được xử lý trong phần mềm. Vì các cổng IPv4 được chia sẻ giữa lưu lượng truy cập được kết nối và lưu lượng thiết bị nên các gói thiết lập/phân tách phiên IPv4 (ví dụ: SYN/SYN+ACK, FIN) phải được xử lý trong phần mềm để hạt nhân có thể xây dựng trạng thái luồng. Khung này cung cấp mặt phẳng điều khiển và máy trạng thái. Nó cũng cung cấp cho phần cứng thông tin về các giao diện/tiền tố ngược dòng và xuôi dòng.
Đối với IPv4, phần cứng cho phép các gói thiết lập phiên dịch địa chỉ mạng IPv4 (NAT) tiếp cận CPU. Hạt nhân tạo các mục nhập NAT và quá trình triển khai HAL sẽ quan sát các mục nhập từ bộ mô tả tệp do khung công tác cung cấp và xử lý các luồng này trong phần cứng. Điều này có nghĩa là việc triển khai HAL không yêu cầu CAP_NET_*
vì HAL được mở các ổ cắm NF_NETLINK_CONNTRACK
từ khung. Theo định kỳ, phần cứng sẽ gửi các bản cập nhật trạng thái NAT cho các luồng hiện đang hoạt động tới khung, làm mới các mục trạng thái theo dõi kết nối kernel tương ứng.
Đối với IPv6, khung lập trình một danh sách các tiền tố đích của IPv6 mà lưu lượng truy cập không được giảm tải. Tất cả các gói được kết nối khác có thể được giảm tải.
Để tính toán mức sử dụng dữ liệu, các cuộc thăm dò mức sử dụng dữ liệu NetworkStatsService
khiến khung yêu cầu số liệu thống kê lưu lượng truy cập từ phần cứng. Khung này cũng truyền đạt giới hạn sử dụng dữ liệu cho phần cứng thông qua HAL.
Yêu cầu phần cứng
Để triển khai giảm tải chia sẻ kết nối, phần cứng của bạn phải có khả năng chuyển tiếp các gói IP giữa modem và Wi-Fi/USB mà không gửi lưu lượng qua bộ xử lý chính.
Thực hiện
Để bật tính năng giảm tải chia sẻ kết nối, bạn phải triển khai cả hai tính năng sau cả cấu hình HAL ( IOffloadConfig
) và HAL điều khiển ( IOffloadControl
).
Cấu hình HAL: IOffloadConfig
IOffloadConfig
HAL bắt đầu triển khai giảm tải chia sẻ kết nối. Khung này cung cấp triển khai HAL với các ổ cắm NF_NETLINK_CONNTRACK
được kết nối trước mà việc triển khai có thể sử dụng để quan sát các luồng IPv4. Chỉ các luồng chuyển tiếp phải được tăng tốc.
Kiểm soát HAL: IOffloadControl
IOffloadControl
HAL kiểm soát việc triển khai giảm tải. Các phương pháp sau đây phải được thực hiện:
- Bắt đầu/dừng giảm tải phần cứng: Sử dụng
initOffload/stopOffload
và miễn giảm tải cho các địa chỉ IP cục bộ hoặc các mạng khác bằngsetLocalPrefixes
. - Thiết lập giao diện ngược dòng, địa chỉ IPv4 và cổng IPv6: Sử dụng
setUpstreamParameters
và định cấu hình phạm vi địa chỉ IP xuôi dòng bằngaddDownstream/removeDownstream
. - Tính toán sử dụng dữ liệu: Sử dụng
getForwardedStats/setDataLimit
.
HAL nhà cung cấp của bạn cũng phải gửi lệnh gọi lại thông qua giao diện ITetheringOffloadCallback
, thông báo về khuôn khổ:
- Các sự kiện không đồng bộ như việc giảm tải đang được bắt đầu và dừng lại (OffloadCallbackEvent)
- Cập nhật thời gian chờ NAT, phải được gửi định kỳ để chỉ ra rằng luồng IPv4 cụ thể có chứa lưu lượng truy cập và không được đóng bởi kernel
Thẩm định
Để xác thực việc triển khai tính năng chia sẻ kết nối của bạn, hãy sử dụng thử nghiệm thủ công hoặc tự động để xác minh tính năng chia sẻ kết nối và điểm phát sóng Wi-Fi hoạt động như mong đợi. Bộ kiểm tra nhà cung cấp (VTS) chứa các bài kiểm tra về HAL giảm tải liên kết.