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,

Android 切换prefer APN后建立PDN的日志分析_第1张图片 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

你可能感兴趣的:(#,Android,Telephony,网络通信,android,网络,Telephony,自学笔记,移动网络,APN)