网络共享硬件分流

通过将网络共享流量(借助 USB、Wi-Fi)分流到硬件,网络共享分流可让设备节省电量并提高性能。通过在调制解调器和外围设备之间提供直接路径,并绕过应用处理器,可以分流网络共享流量。

规范

从 Android 8.1 开始,设备可以使用网络共享分流将 IPv4、IPv6 或 IPv4+IPv6 转发分流到硬件。

分流功能不需要分流所有数据包。框架能够处理软件中的任何数据包。控制数据包通常是在软件中处理。由于 IPv4 端口在网络共享流量和设备流量之间共享,因此必须在软件中处理 IPv4 会话设置/拆解数据包(例如,SYN/SYN+ACK、FIN),以便内核可以构建流程状态。框架提供了控制平面和状态机,还为硬件提供了有关上游和下游接口/前缀的信息。

对于 IPv4,硬件允许 IPv4 网络地址转换 (NAT) 会话设置数据包到达 CPU。内核会创建 NAT 条目,HAL 实现会观察框架提供的文件描述符中的条目,并在硬件中处理这些流程。这意味着 HAL 实现不需要 CAP_NET_*,因为 HAL 会从框架中获取打开的 NF_NETLINK_CONNTRACK 套接字。硬件会定期将当前活动流程的 NAT 状态更新发送给框架,框架会刷新相应的内核连接跟踪状态条目。

对于 IPv6,框架会编制一个不得将流量分流到的 IPv6 目标前缀的列表。所有其他网络共享数据包都可以分流。

NetworkStatsService 数据流量使用情况轮询会使框架向硬件请求流量统计信息,以便计算数据流量使用量。框架还会通过 HAL 向硬件传达数据流量使用限制。

硬件要求

如需实现网络共享分流,您的硬件必须能够在调制解调器和 Wi-Fi/USB 之间转发 IP 数据包,而无需通过主处理器发送流量。

实现

如需启用网络共享分流功能,您必须同时实现配置 HAL (IOffloadConfig) 和控制 HAL (IOffloadControl)。

配置 HAL:IOffloadConfig

IOffloadConfig HAL 会启动网络共享分流实现。框架会为 HAL 实现提供预先连接的 NF_NETLINK_CONNTRACK 套接字,以供该实现观察 IPv4 流程。只有转发的流程必须加速。

控制 HAL:IOffloadControl

IOffloadControl HAL 会控制分流实现。必须实现以下方法:

  • 启动/停止分流硬件:使用 initOffload/stopOffload,并使用 setLocalPrefixes 让本地 IP 地址或其他网络免于分流。
  • 设置上游接口、IPv4 地址和 IPv6 网关:使用 setUpstreamParameters,并使用 addDownstream/removeDownstream 配置下游 IP 地址范围。
  • 计算数据流量使用量:使用 getForwardedStats/setDataLimit

您的供应商 HAL 还必须通过 ITetheringOffloadCallback 接口发送回调,该接口会通知框架:

  • 分流等异步事件被启动和停止 (OffloadCallbackEvent)
  • NAT 超时更新,必须定期发送这些更新以表明特定 IPv4 流程包含流量且不得由内核关闭

验证

要验证网络共享分流的实现,请使用手动或自动测试验证网络共享和 WLAN 热点是否按预期方式工作。供应商测试套件 (VTS) 包含针对网络共享分流 HAL 的测试。