概要
SMS发送失败可能在 NAS 层 retry,也可能在 WMS 层retry,还有可能在 AP 层 Retry。SMS over IMS 失败,可能尝试SMS over SGs。下面将分层介绍 SMS retry 问题的分析方法。
分析
1.NAS SMS Retry
当 UE 发送第一个 CP-DATA(RP-DATA) 时,启动 TR1M 和 TC1M 计时器。如果 TC1M 超时,未接收到 CP-ACK ,则重新发送 CP-DATA(RP-DATA)。如果 TC1M 超时还未接收到 CP-DATA(RP-DATA),则 NAS 发送 CP-ERROR 给 NW,并上报失败原因给 WMS 模块。
//TC1M ID=10,TR1M ID=0
#define TIMER_TC1M_MO 10
#define TR1M 0x00
//如下代码定义 TC1M value=15s,TR1M value=40s
CNM_get_timeout()
{
case TIMER_TC1M_MO:
return_value = 15;
}
#define SMS_TR1M_TIMEOUT_VALUE 40000
下面以 TC1M value = 15, TR1M value = 40 为例,进行说明
UE NW
CP-DATA(RP-DATA) --->
start TR1M(40 sec)//等 CP_DATA(RP_ACK)
start TC1M(15 sec)//等 CP-ACK
TC1M expires
CP-DATA(RP-DATA)1st retry --->
start TC1M(15 sec)
TC1M expires
CP-DATA(RP-DATA)2nd retry --->
start TC1M(15 sec)
TR1M expires
CP-ERROR --->
如下 log,UE 发送 CP-DATA(RP-DATA) 后收到 CP-ACK,TC1M定时器停止,但是没有收到CP-DATA(RP-ACK),TR1M 超时,发给 NW CP-ERROR。
// TC1M 启动
MSG [03006/01/02/03/04]NAS CNM/Medium/High/Error/Fatal06:41:11.599
cnm_timers.c 00226 DS: SUB 1 =MNCNM= Start timer 10, conn 3 PD 9
//sent MO SMS
OTA LOG [0x713A/009/001]SMS/CP Data 06:41:11.599 Direction: MS To
Network, Length: 30
trans_id_or_skip_ind = 3 (0x3)
sms_cp_data
//received cp ack from NW
OTA LOG [0x713A/009/004]SMS/CP ACK 06:41:14.307 Direction: Network To
MS, Length: 4
trans_id_or_skip_ind = 11 (0xb)
sms_cp_ack
//TC1M 停止
MSG [03006/01/02/03/04]NAS CNM/Medium/High/Error/Fatal 06:41:14.307
cnm_timers.c 00519 DS: SUB 1 =MNCNM= Stop timer 10
//UE didn't received CP_DATA(RP_ACK) from NW until TR1M expired.
MSG [03008/02/03/04]NAS MN/High/Error/Fatal 06:41:54.360
mn_timers.c 01484 DS: SUB 1 =MNCNM= TR1M timer expiration for SMR-3
//UE sent CP ERROR
OTA LOG [0x713A/009/016]SMS/CP Error 06:41:54.361 Direction: MS To
Network, Length: 3
trans_id_or_skip_ind = 3 (0x3)
sms_cp_error
sms_cp_cause
cause_value = 111 (0x6f)
2.WMS SMS Retry
WNS 处理来自 NAS 的 MO SMS 结果,将基于各种错误条件执行 domain 更改和 SMS 重视。详细的实现可以参考 wms_msg_sm_report_ind_proc() 函数。
1) Timer
3532 | 如果先前的 MO SMS 尝试不成功,则此 NV 项定义后续 MO SMS 的重试周期(以秒为单位)-- 重发总时间 | NV_SMS_MO_RETRY_PERIOD_I | 150 |
3533 | 此 NV 项定义重试间隔,如果先前的 MO SMS 尝试不成功,则可以在该间隔内重试后续的 MO SMS -- 重发间隔 | NV_SMS_MO_RETRY_INTERVAL_I | 30 |
如下 log 表明 30s 后将进行 SMS retry,90s 若仍然失败,则将错误报给上层 AP.
MSG [00018/02] Wireless Messaging Services/High 06:41:54.361 wmsmsg.c
16537 retry_time_left=90, retry_interval=30
2) Domain 更改
Domain 更改主要指 SMS over PS 失败在满足特定条件时临时切换到 CS 重试。SMS over IMS 失败不会导致切换到 CS 重试。
想关 NV 配置:
/nv/item_files/modem/sms/enable_retry is enable
/nv/item_files/modem/sms/cs_domain_fallback is 1
/nv/item_files/modem/sms/sms_retry_limit(NV70222) is 0 (Disable MO SMS retry over IMS
transport).
NV947 NV_GPRS_ANITE_GCF_I is 0
常见log如下:
LOG_1:
//IMS 短信失败。 但它不能回退到 SG.
11:52:19.055000 [wmsmsg.c 16591] GCF Flag for Retry = 0, CS Domain Fallback = 1,custom retry enable = 0
11:52:19.055000 [wmsmsg.c 16326] NAS error status: 100
11:52:19.055000 [wmsmsg.c 16619] Net doesn't support SMS over domain 0
11:52:19.055000 [wmsmsg.c 16644] Got Perm domain error from NAS for CS
Domain, stop retrying
LOG_2:
//IMS permanent 错误原因,不进行重试
08:36:20.823073 Wireless Messaging Services/Error[ wmsmsg.c 17472] Got perm error from NAS,
stop retrying
LOG_3:
//NV947=1, 不进行重试
08:58:34.841 wmsmsg.c 17505 E GCF Flag is Set, stop retrying
LOG_4:
// 其他临时错误,没有域切换
07:06:29.366198 Wireless Messaging Services/Error[ wmscm_gw.c 185] Error during msg submit: error status 8, report status 1
07:06:29.366198 Wireless Messaging Services/High[ wmsmsg.c 16431] MO SMS Failure Cause Value = 31
07:06:29.367005 Wireless Messaging Services/High[ wmsmsg.c 16529] Other temp error from NAS; no domain switching
3. AP SMS Retry
AP 在收到 modem SMS 发送失败的消息后,可以选择更换类型(IMS 或者 NAS)进行 SMS retry。Modem 不会主动更改 SMS 发送类型。
常见的,在 modem 具有 IMS SMS 能力的情况下,AP 会首先指定 sms_on_ims=1,发送失败后,会再重发该 SMS,并指定 sms_on_ims=0。
//AP 首先通过 IMS 发送
LOG 15:54:16.426476 QMI_MCS_QCSI_PKT Length: 69
wms_raw_send_reqTlvs[1] {
Type = 0x13
Length = 1
sms_on_ims {
sms_on_ims = true
//重试 CS
LOG 15:54:23.490091 QMI_MCS_QCSI_PKT Length: 69
wms_raw_send_reqTlvs[1] {
Type = 0x13
Length = 1
sms_on_ims {
sms_on_ims = false
建议
遇到 SMS Retry 问题,可以根据该 KBA 进行初步分析,并配置相关 NV 测试。
仍有问题,请在 default log mask 下抓取开机 QXDM log,然后提 case 到 NAS team