有什么好网站做浏览器主页,网站正在建设中中文,平面设计素材网站推荐,网站建设销售发展前景简介
通过OTA/OMADM 运营商服务器可以下发消息实现disable APN#xff0c;从而影响Data PDN建立。APN被disable了会导致无法正常上网。
在Android 和 KaiOS 系统实现上有区别#xff0c;不过都是通过carrier_enabled 这类字段实现判断控制。
Android#xff1a;上层 Tele…简介
通过OTA/OMADM 运营商服务器可以下发消息实现disable APN从而影响Data PDN建立。APN被disable了会导致无法正常上网。
在Android 和 KaiOS 系统实现上有区别不过都是通过carrier_enabled 这类字段实现判断控制。
Android上层 Telephony 根据APN carrier_enabled 值判断是否下发PDNKaiOS上层 gecko DataCall 不做判断随DataProfile 传给ModemQCOM底层决定是否建立PDN。
Android
Telephony 上层DataProfileManager 会根据网络请求选择APN如果APN 被disable了ApnSetting 在canHandleType 校验过程中会直接return false。 canBeSatisfiedBy canHandleType 代码逻辑说明
frameworks/base/telephony/java/android/telephony/data/ApnSetting.javaAndroid U Android 9 参考http://androidxref.com/9.0.0_r3/xref/frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/ApnSetting.java#482早期DcTracker 和 DataConnection会使用在DataConnection的PDN初始化接口 initConnection中校验在 Android U上已经替换frameworks/opt/telephony/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java
//Android U 功能逻辑//【TelephonyNetworkRequest.java】 选择满足PDN请求的类型/** * Check if this network request can be satisfied by a data profile.** param dataProfile The data profile to check.* return {code true} if this network request can be satisfied by the data profile.*/public boolean canBeSatisfiedBy(NonNull DataProfile dataProfile) {//返回满足请求的APN列表return apnTypes.stream().allMatch(dataProfile.getApnSetting()::canHandleType);}//【ApnSetting.java】 校验/** hide */public boolean canHandleType(ApnType int type) {if (!mCarrierEnabled) {return false;}// DEFAULT can handle HIPRI.return hasApnType(type);}
日志举例根据 ApnSetting结构打印字段顺序找到CarrierEnabled 的值。 CarrierEnabled is false, so can not find the profile to setup data PDN. [DataProfile[ApnSetting] INTERNET, 3086, 310590, INTERNET, , null, , null, null, 0, supl | hipri | default, IPV4V6, IP, false, 0, true, 0, 0, 0, 0, 0, gid, A1, false, UNKNOWN, UNKNOWN, 0, -1, -1, false, 961, TrafficDescriptor{mDnnINTERNET, null}, preferredfalse], KaiOS gecko 不对 APN 的 enable 情况做校验拦截会随着 RIL_REQUEST_SETUP_DATA_CALL 的请求将其转换成DataProfile的enabled传给qcom。具体QCOM校验需要看其逻辑。 若上层想通过carrier_enabled参数决定是否使用该APN请求网络可以尝试在以下接口函数中过滤APN然后再执行DataCall相关流程。
gecko/dom/system/gonk/radio/DataCallManager.jsm
//把disable的APN在aNewApnSettings数据中剔除再执行后续DataCall流程
updateApnSettings(aNewApnSettings) { const kApnSettingKey ril.data.apnSettings.sim
}