当前位置: 首页 > news >正文

Android 切换prefer APN后建立PDN的日志分析

代码流程

关键接口日志
流程 参考日志
匹配SIM APN DPM-0   : Found 8 data profiles. profiles = [[DataProfile
通过RILJ同步APN到Modem

DPM-0   : updateDataProfilesAtModem:  

RILJ    : [5021]> SET_DATA_PROFILE with data profiles :  [PHONE0] 

RILJ    : [5021]< SET_DATA_PROFILE  [PHONE0]

DataProfileManager获取选中上网APN

DPM-0   : getPreferredDataProfileFromDb

DPM-0   : Changed preferred data profile to [DataProfile

DataProfileManager获取网络请求使用的APN DPM-0   : getApnSettingForNetworkRequest:
TelephonyNetworkFactory处理应用网络请求

TelephonyNetworkFactory[0]: got request NetworkRequest [ REQUEST id=168, [ Transports: SATELLITE Capabilities: INTERNET&TRUSTED&NOT_VCN_MANAGED Uid: 10152 RequestorUid: 10152 RequestorPkg: com.google.android.apps.messaging UnderlyingNetworks: Null] ]

TelephonyNetworkFactory[0]: onNeedNetworkFor [NetworkRequest [ REQUEST id=168, [ Transports: SATELLITE Capabilities: INTERNET&TRUSTED&NOT_VCN_MANAGED Uid: 10152 RequestorUid: 10152 RequestorPkg: com.google.android.apps.messaging UnderlyingNetworks: Null] ], mPriority=20, state=UNSATISFIED, mAttachedDataNetwork=null, isMetered=true, created time=17:10:57.663, evaluation result=null] shouldApply true

DataNetworkController处理网络请求(评估&发起PDN)

DNC-0   : onAddNetworkRequest: added [NetworkRequest [ REQUEST id=168,

DNC-0   : Data evaluation: evaluation reason:NEW_REQUEST, Data disallowed reasons: DATA_NETWORK_TRANSPORT_NOT_ALLOWED, candidate profile=null, time=17:10:57.674, network type=LTE, reg state=HOME, [NetworkRequest [ REQUEST id=168, [ Transports: SATELLITE 

其他evaluation reason:

- RETRY_AFTER_DISCONNECTED,

- DATA_PROFILES_CHANGED,

- DATA_CONFIG_CHANGED,

DNC-0   : onSetupDataNetwork: dataProfile=[DataProfile=[ApnSetting] testcarriername, 6652, 50501, testapn,

DNC-0   : Creating data network on WWAN with [DataProfile=[ApnSetting] testcarriername, 6652, 50501, testapn,

(期间状态变更的通知广播) TelephonyRegistry: notifyDataConnectionForSubscriber: phoneId=0 subId=1  state: CONNECTING, transport: WWAN, id: -1, netId: 129, network type: LTE, APN Setting: [ApnSetting] testcarriername, 6652, 50501, testapn
由DNC转到对应的DataNetwork处理PDN请求

DN-129-C: ConnectingState: setupData: accessNetwork=EUTRAN, [DataProfile=[ApnSetting] testcarriername, 6652, 50501, testapn,

DataNetwork.java
DataNetwork.java

当系统收到 NetworkRequest(如默认上网请求)且当前无匹配的活跃 DataNetwork 时,会创建新实例并进入 ConnectingState

//若已有PDN满足请求,会成功分配,无需新PDN setup

DN-129-C: ConnectingState: Successfully attached network request [NetworkRequest [ BACKGROUND_REQUEST id=2, [ Transports: CELLULAR Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_VCN_MANAGED&NOT_BANDWIDTH_CONSTRAINED RequestorUid: 1000 RequestorPkg: android UnderlyingNetworks: Null] ], mPriority=20, state=SATISFIED, mAttachedDataNetwork=DN-129-C, isMetered=true, created time=14:06:11.241

通过RILJ将PDN请求下发modem并返回结果

RILJ    : [5058]> SETUP_DATA_CALL,reason=NORMAL,accessNetworkType=EUTRAN,dataProfile=[DataProfile=[ApnSetting] testcarriername, 6652, 50501, testapn,

RmmDcEvent: [0][requestSetupDataCall] apn=testapn, apnIndex=5, profile=default, protocol=IP

DataServiceCallback: onSetupDataCallComplete

RILJ    : [5058]< SETUP_DATA_CALL DataCallResponse: { cause=SERVICE_OPTION_NOT_SUBSCRIBED(0x21) retry=720000 cid=-1 

DataNetworkController收到PDN建立响应结果 DNC-0   : onDataNetworkSetupDataFailed: [DataNetwork: DN-129-C, Telstra.test, state=null], cause=SERVICE_OPTION_NOT_SUBSCRIBED(0x21)
DataRetryManager处理PDN建立失败结果,发起重连

DRM-0   : onEvaluateDataSetupRetry: [DataProfile=[ApnSetting] testcarriername, 6652, 50501, testapn,

DRM-0   : Add throttling entry [DataThrottlingEntry: dataProfile=[DataProfile=[ApnSetting]

切换APN CarrierResolver: [updatePreferApn] from:xxxx to:testapn
重新发起PDN建立,会断开已有连接,后面的请求在PDN建立成功后分配
应用释放网络请求 TelephonyNetworkFactory[0]: onReleaseNetworkFor [NetworkRequest [ REQUEST id=168, [ Transports: SATELLITE Capabilities: INTERNET&TRUSTED&NOT_VCN_MANAGED Uid: 10152 RequestorUid: 10152 RequestorPkg: com.google.android.apps.messaging UnderlyingNetworks: Null] ], mPriority=20, state=UNSATISFIED, mAttachedDataNetwork=null, isMetered=true, created time=17:11:32.393, evaluation result=null] applied true

常见问题/误区

Q:为什么PDN没有建立成功DataNetwork就可以“Successfully attached network request”?

A:TelephonyRegistry负责通知数据连接状态变化,CONNECTING状态表示正在尝试建立数据连接(PDN),某请求在特定ID的DataNetwork中Successfully attached 仅表示某个应用的网络请求已绑定到了相应的DataNetwork实例,不表示 PDN 已激活

1. DN-ID-C是DataNetwork 实例的唯一标识符,由DataNetworkController在响应网络请求时动态创建,ID是自增计数器(如DN-130-C)。

2. 当系统收到 NetworkRequest(如默认上网请求)且当前无匹配的活跃 DataNetwork 时,会创建新实例并进入 ConnectingState。

Q:那么TelephonyRegistry、TNA(TelephonyNetworkAgent)DN、DNC、DSM、DRM(DataRetryManager)等对象/管理类的工作先后顺序是什么?调用链关系如何?

  • TNA-130 : TelephonyNetworkAgent created, nc=[ Transports: CELLULAR Capabilities:
  • TelephonyRegistry: notifyDataConnectionForSubscriber: phoneId=0 subId=1  state: CONNECTING, transport: WWAN, id: -1, netId: 130, network type: LTE
  • RILJ    : [5085]< SETUP_DATA_CALL DataCallResponse
  • DataServiceCallback: onSetupDataCallComplete
  • DSM-C-0 : onSetupDataCallComplete. resultCode = 0, response = DataCallResponse
  • DN-130-C: ConnectingState: onSetupResponse: resultCode=RESULT_SUCCESS,

日志分析

// 用户在界面新增APN并切换选中

04-01 20:10:48.410602 16039 16039 D ApnEditor: name: testapn: Telstra.testmcc: 505mnc01

04-01 20:10:55.181980 16039 16039 D ApnSettings: onPreciseDataConnectionStateChanged: state=5 mRestoreDefaultApnMode=false

04-01 20:10:55.181849 16039 16039 D ApnSettings: setPreferApnChecked, APN = 5120 //回到APN列表界面自动选中的

04-01 20:10:56.864038 16039 16039 D ApnSettings: onPreferenceChange(): Preference - test Telstra.test, newValue - 6652, newValue type - clas

http://www.dtcms.com/a/108217.html

相关文章:

  • ubuntu改用户权限
  • AI调研 | Omnisql模型家族调研与实测
  • ‌Windows 与 Linux网络命令速查表,含常用场景及参数说明
  • 使用高德api实现天气查询
  • 多电机显示并排序
  • WHAT - 如何理解中间件
  • WPF学习路线
  • 关于Gstreamer+MPP硬件加速推流问题:视频输入video0被占用
  • MYSQL实现获取某个经纬度区域内的数据
  • Cesium系列:从入门到实践,打造属于你的3D地球应用
  • 为 Jenkins Agent 添加污点(Taint)容忍度(Toleration)
  • Dubbo分布式框架学习(1)
  • vue省市区懒加载,用el-cascader 新增和回显
  • 多模态大模型笔记
  • Compressed串行端口终端应用程序(MAC 、WIN、LINUX)打包下载
  • 高级java每日一道面试题-2025年3月19日-Web篇-防止表单重复提交的方法有哪些?
  • MySQL联合查询
  • vector的学习使用(1)
  • Cjson的创建和解析
  • 【Python】KNN:K-NearestNeighbor 学习指南
  • Vue3+Cesium+vite 入门- 项目搭建
  • HAL库 通过USB Boot进行APP程序升级
  • window11 通过cmd命令行安装 oh my zsh 的教程
  • VMware上的windows虚拟机安装使用Docker方法
  • MySQL篇(二): 核心知识深度聚簇解析:索引、非聚簇索引、回表查询、覆盖索引、超大分页处理、索引创建原则与索引失效场景
  • TDengine 权限管理与安全配置实战(二)
  • Redhat8.10 离线安装Snipe-IT v8.0.4 版本
  • 计算机网络中科大 - 第1章 结构化笔记(详细解析)
  • PostgreSQL pg_repack 重新组织表并释放表空间
  • NumPy的应用