1. 概述
DataNetwork 是 Android 11+ Telephony 框架中数据面 HAL 抽象的核心类。它代表一个已建立的蜂窝数据连接在框架层的逻辑对象,负责管理该连接的网络接口(NetworkAgent)、链路属性(LinkProperties)、能力集(NetworkCapabilities)、QoS 参数以及连接的生命周期。在 Android 13+ 的 5G 多切片(Network Slicing)架构中,一个 SIM 卡可以同时拥有多个 DataNetwork 实例——每个对应一个不同的数据连接(如 eMBB 切片和 URLLC 切片各有独立的 DataNetwork)。
1.1 核心概念
| 概念 | 含义 |
|---|---|
| DataNetwork | 单个数据连接在框架层的逻辑表示,持有 NetworkAgent 和 LinkProperties |
| DataService | Vendor HAL 服务 — android.hardware.radio.data.IData,负责 setupDataCall/deactivateDataCall |
| NetworkAgent | ConnectivityService 侧的网络代理,注册后使该网络可用于 App 流量 |
| NetworkCapabilities | 描述网络能力(INTERNET/MMS/IMS/DUN 等),决定 App 的 NetworkRequest 路由 |
| LinkProperties | 描述链路属性(IP 地址、DNS、MTU、路由),由 DataCallResponse 构建 |
| QoS Bearer Session | 5G QoS 流 — 3GPP TS 24.501 定义的 QoS Flow,映射到 Dedicated Bearer |
| Network Slicing | 5G 网络切片 — NSSAI (Network Slice Selection Assistance Information) 标识的虚拟化网络 |
2. 核心类与源码锚点
| 类名 | 路径 | 说明 |
|---|---|---|
| DataNetwork | [DataNetwork.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataNetwork.java) | 数据网络核心类,继承 Handler |
| DataNetworkController | [DataNetworkController.java](file:///d:/Resource%20Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/data/DataNetworkController.java) | 管理多个 DataNetwork 的控制器 |
| DataService | frameworks/base/telephony/java/android/telephony/data/DataService.java |
Vendor HAL 服务绑定基类 |
| DataServiceCallback | frameworks/base/telephony/java/android/telephony/data/DataServiceCallback.java |
DataService 异步回调结果码 |
| NetworkAgent | android.net.NetworkAgent (frameworks/base) |
ConnectivityService 的网络代理 |
| LinkProperties | android.net.LinkProperties (frameworks/base) |
链路属性封装 |
| NetworkCapabilities | android.net.NetworkCapabilities (frameworks/base) |
网络能力声明 |
| DataCallResponse | frameworks/base/telephony/java/android/telephony/data/DataCallResponse.java |
数据呼叫建立响应,携带 IP/CID/MTU 等 |
| TelephonyNetworkSpecifier | frameworks/base/core/java/android/net/TelephonyNetworkSpecifier.java |
NetworkRequest 中用 subId 标识蜂窝网络 |
| QosBearerSession | frameworks/base/telephony/java/android/telephony/data/QosBearerSession.java |
5G QoS 流抽象 |
| NetworkSliceInfo | frameworks/base/telephony/java/android/telephony/data/NetworkSliceInfo.java |
5G 网络切片信息 |
| TrafficDescriptor | frameworks/base/telephony/java/android/telephony/data/TrafficDescriptor.java |
流量描述符 — URSP 规则匹配 |
3. DataNetwork 核心字段
// DataNetwork.java
public class DataNetwork extends Handler {
private final int mId; // CID (Context ID)
private final @ApnType int mApnTypeBitmask; // APN 类型位图
private final TelephonyNetworkAgent mNetworkAgent; // NetworkAgent 封装
private LinkProperties mLinkProperties; // IP/DNS/路由/MTU
private NetworkCapabilities mNetworkCapabilities; // 网络能力
private final @NetCapability int[] mCapabilities; // 声明的能力列表
private DataCallResponse mDataCallResponse; // 最新数据呼叫响应
private DataProfile mDataProfile; // 关联的 DataProfile
private @DataState int mState; // 连接状态
private NetworkScore mNetworkScore; // 网络评分
private List<QosBearerSession> mQosBearerSessions; // QoS 流列表
private NetworkSliceInfo mNetworkSliceInfo; // 网络切片信息
private LinkCapacityEstimate mLinkCapacityEstimate; // 链路容量评估
}
3.1 关键导入解析
import android.net.NetworkAgent; // ConnectivityService 注册接口
import android.net.NetworkAgentConfig; // NetworkAgent 配置
import android.net.NetworkProvider; // 网络提供者
import android.net.NetworkScore; // 网络打分
import android.net.TelephonyNetworkSpecifier; // 蜂窝网络标识
import android.telephony.data.Qos; // QoS 基类
import android.telephony.data.QosBearerSession; // 5G QoS 流
import android.telephony.data.NetworkSliceInfo; // 5G 切片
import android.telephony.data.TrafficDescriptor; // URSP 流量描述
import android.net.vcn.VcnManager; // VCN (Virtual Carrier Network)
Google 设计技巧 #1 — DataNetwork 作为 “双面胶” (Janus-Faced Adapter):
DataNetwork一边面对 Vendor HAL(DataService 回调 → 更新 LinkProperties/状态),一边面对 ConnectivityService(通过 NetworkAgent 注册网络)。它是一个双向适配器——Modem 的数据面变化(IP 地址变化、QoS 流建立/释放)被转换为 ConnectivityService 理解的LinkProperties和NetworkCapabilities更新。这使 ConnectivityService 完全不感知 HAL 层的细节。

990

被折叠的 条评论
为什么被折叠?



