Android Telephony 下发 IA APN 驻网异常(MTK AT & MIPC )

流程

AP(串口/Socket/Hidl) → L4A/L4C(AT cmd解析) → MIPC模块(消息装箱) → Modem各层(协议栈/管理/执行)

AT <=> MIPC 信令 机制解析
AT <=> MIPC 信令 机制解析
  • 上层AT命令用atSendCommand下发,
  • Modem内AT解析器收到后自动转换为对应MIPC消息下发协议栈层处理,完成驱动网络附着/配置,
  • 响应再变成AT串回给上层,
  • AT、MIPC两层协议各司其职,中间有清晰的“字符串到结构体信令”转换过程。

 

代码逻辑

  • RFX_MSG_REQUEST_SET_DATA_PROFILE
  • handleSyncApnTableRequest / handleSetInitialAttachApnRequest
  • requestSyncApnTable

vendor/mediatek/proprietary/hardware/ril/fusion/mtk-ril/mdcomm/data/RmcDcReqHandler.cpp

void RmcDcReqHandler::onHandleRequest(const sp<RfxMclMessage>& msg) {
    switch (msg->getId()) {
        case RFX_MSG_REQUEST_SET_DATA_PROFILE:
            handleSyncApnTableRequest(msg);
            break;
        case RFX_MSG_REQUEST_SET_INITIAL_ATTACH_APN:
            handleSetInitialAttachApnRequest(msg);
            break;
    }
}

如果检查APN没有更新,是不会调用MIPC 更新 Modem APN 的,即便上层下发了 Dataprofile 同步。

RmmDcEventHandler
RmmDcEventHandler

vendor/mediatek/proprietary/hardware/ril/fusion/mtk-ril/mdcomm_mipc/data/RmmDcEventHandler.cpp

iaMode分支与平台兼容性

  • 代码中支持了多个“iaMode”(兼容MTK不同代基带平台UI/协议实现)。
  • Mode 0 和 3 发的是AT+EIAAPN="apn",id(常见在老平台)。
  • Mode 1、2 发的是全参数 AT+EIAAPN="apn",id,"proto",...(新平台、功能更丰富,才能带下username/pwd等全参)。
  • 提供非法APN会触发AT+EIAMDPREFER=1,可能不会生成 MIPC_APN_SET_IA_REQ。
void RmmDcEventHandler::requestSyncApnTable(const sp<RfxMclMessage>& msg) {
    int cmdIndex = 1;
    sp<RfxMclMessage> resp;
    RIL_MtkDataProfileInfo **dataProfilePtrs =
                (RIL_MtkDataProfileInfo **)msg->getData()->getData();
    int nReqNum = msg->getData()->getDataLength() / sizeof(RIL_MtkDataProfileInfo*);

    if (nReqNum <= 0) {
        resp = RfxMclMessage::obtainResponse(msg->getId(), RIL_E_GENERIC_FAILURE,
                RfxVoidData(), msg, false);
        responseToTelCore(resp);
        return;
    }

    adjustBearerBitmask(dataProfilePtrs, nReqNum);

    RFX_LOG_D(RFX_LOG_TAG, "[%d][%s] num of pararmeters = %d", m_slot_id, __FUNCTION__, nReqNum);

    // avoid syncing the same apn table, e.g. sub id ready then record loaded event
    if (s_LastApnTable[m_slot_id] != NULL) {
        bool bSameApnTable = true;
        if (s_nLastReqNum[m_slot_id] == nReqNum) {
            for (int i = 0; i < s_nLastReqNum[m_slot_id]; i++) {
                RIL_MtkDataProfileInfo *preProfile = &s_LastApnTable[m_slot_id][i];
                RIL_MtkDataProfileInfo *curProfile = dataProfilePtrs[i];
                if (preProfile->profileId != curProfile->profileId
                        || 0 != strcmp(preProfile->apn, curProfile->apn)
                        || 0 != strcmp(preProfile->protocol, curProfile->protocol)
                        || 0 != strcmp(preProfile->roamingProtocol, curProfile->roamingProtocol)
                        || preProfile->authType != curProfile->authType
                        || 0 != strcmp(preProfile->user, curPr
内容概要:本文档《ccnp_300-430.pdf》涵盖了与Cisco无线络配置相关的多个选择题及其答案解析。文档详细探讨了FlexConnect AP在不同模式下的行为、AP模式和子模式的选择、客户端特征配置、图像传输优化、Cisco OEAP配置、QoS设置、多播配置、安全措施(如入侵保护、恶意AP检测)、位置服务配置以及BYOD策略实施等内容。文档不仅提供了具体的配置命令和选项,还解释了每种配置背后的逻辑和技术原理。 适合人群:具备一定络基础知识,特别是对Cisco无线络设备有一定了解的技术人员,包括但不限于络管理员、无线络工程师和CCNP认证考生。 使用场景及目标: ① 为无线络工程师提供实际操作指导,确保在不同场景下正确配置Cisco无线设备; ② 帮助CCNP认证考生复习并掌握相关知识点; ③ 协助IT管理员解决日常无线络管理中的常见问题,如连接不稳定、性能不佳或安全性问题; ④ 支持企业IT部门制定和实施BYOD策略,确保员工个人设备接入公司络的安全性和效率。 阅读建议:由于文档内容较为专业且技术性强,建议读者首先熟悉Cisco无线络的基本概念和术语。在阅读过程中,应结合具体的工作环境和需求进行理解,并尝试将所学知识应用到实际工作中。对于不熟悉的术语或配置命令,可以通过查阅官方文档或在线资源进一步学习。此外,通过模拟环境练习配置也是巩固知识的有效方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值