Android 切换prefer APN后创建PDN的日记分析

[复制链接]
发表于 2025-10-2 13:53:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
代码流程

关键接口日记           流程    参考日记              匹配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            当体系收到 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 1603
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表