【笔记】Disable APN 禁用数据连接的逻辑(Android & KaiOS)

简介

通过OTA/OMADM 运营商服务器可以下发消息实现disable APN,从而影响Data PDN建立。APN被disable了会导致无法正常上网。

在Android 和 KaiOS 系统实现上有区别,不过都是通过carrier_enabled 这类字段实现判断控制。

  • Android:上层 Telephony 根据APN carrier_enabled 值判断是否下发PDN
  • KaiOS:上层 gecko DataCall 不做判断,随DataProfile 传给Modem(QCOM),底层决定是否建立PDN。

Android

Telephony 上层DataProfileManager 会根据网络请求选择APN,如果APN 被disable了,ApnSetting 在canHandleType校验过程中会直接return false。

canBeSatisfiedBy => canHandleType

代码逻辑说明:

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={mDnn=INTERNET, null}, preferred=false],

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
javascript 复制代码
//把disable的APN在aNewApnSettings数据中剔除,再执行后续DataCall流程
updateApnSettings(aNewApnSettings) { 
    const kApnSettingKey = "ril.data.apnSettings.sim"
}
相关推荐
s1ckrain1 小时前
数字逻辑笔记—组合逻辑电路
笔记·fpga开发·嵌入式
可可苏饼干2 小时前
NoSQL 与 Redis
数据库·redis·笔记·学习·nosql
重生之我在番茄自学网安拯救世界2 小时前
网络安全中级阶段学习笔记(一):DVWA靶场安装配置教程与网络空间搜索语法
笔记·学习·网络安全·靶场·dvwa·fofa·google hack
摇滚侠2 小时前
零基础小白自学 Git_Github 教程,Git 命令行操作2,笔记19
笔记·git·github
TL滕2 小时前
从0开始学算法——第五天(初级排序算法)
数据结构·笔记·学习·算法·排序算法
走在路上的菜鸟2 小时前
Android学Dart学习笔记第十节 循环
android·笔记·学习·flutter
Xudde.3 小时前
friendly靶机渗透
笔记·学习·安全·web安全·php
轻赚时代3 小时前
PC 端 AI 图像处理工具实操指南:抠图 / 证件照优化 / 智能擦除全流程解析
图像处理·人工智能·经验分享·笔记·深度学习·创业创新·学习方法
老王熬夜敲代码3 小时前
泛型编程的差异抽象思想
开发语言·c++·笔记
客梦3 小时前
Java教室管理系统
java·笔记