错误 #3513
Uu口联调,MAC上行组包,第二个RLC PDU的MAC头错误,导致基站侧MAC解包失败
100%
描述
播雨在Uu口与基站联调终端的随机接入时,当终端侧MAC接收L1C的ULGRANT的TBSIZE=141时,RLC LCID1第一个组包了状态报告,第二个组包了SRB1的信令数据,剩余的TBSIZE组包PADDING。但是组包后,第二个RLC PDU的MAC HEADER出现异常,导致基站MAC解包失败
历史记录
由 王 艳芳 更新于 7 天 之前
终端协议栈log:
[2019-02-14 10:13:17.431479[DEBUG]| src/ueapp/test/wn5gNrPsL1cSocket.c+1932 | wnSendUlSchToL1c |ulTbReq->rntiType:2,ulTbReq->bufferId:0,ulTbReq->tbSize:141,ulTbReq->payload:[1]/[3]/[0]/[1]/[0]/[29]/[bf]/[80]/[40]/[0]
DU侧log:
[13/06/2025 15:20:08.430][DBG_10]rgSCHLvl1TomCrcInd: rnti17017 harqId8 numLyrs1 iMcs5 rbStart4 rbNum11 tbSize141 crcFail0 ucAckNack1 txCntr1 rv0 pusch[894 8] pdcch[893 16]
[13/06/2025 15:20:08.430][ERR_10]rgDUXDemuxData: ueId17017 pduLen141
[13/06/2025 15:20:08.430][ERR_10]rgDUXDemuxData: pduPayload:[1]/[3]/[0]/[1]/[0]/[29]/[bf]/[80]/[40]/[0]
[13/06/2025 15:20:08.430][ERR_10]rgDUXExtSubHdr: pduHeader1
[13/06/2025 15:20:08.430][ERR_10]rgDUXDemuxData: ueId17017 pduLen136
[13/06/2025 15:20:08.430][ERR_10]rgDUXDemuxData: pduPayload:[29]/[bf]/[80]/[40]/[0]/[0]/[0]/[0]/[0]/[0]
[13/06/2025 15:20:08.430][ERR_10]rgDUXExtSubHdr: pduHeader29
[13/06/2025 15:20:08.430][ERR_10]Invalid LCID:41 received
由 王 艳芳 更新于 5 天 之前
- 计划完成日期 被设置为 2025-06-16
- 状态 从 新建 变更为 已解决
- % 完成 从 0 变更为 100
- 预期时间 被设置为 8.00 小时
【问题原因】当终端侧MAC接收L1C的ULGRANT的TBSIZE=141时,RLC LCID1第一个组包了状态报告,第二个组包了SRB1的信令数据,剩余的TBSIZE组包PADDING。MAC需要把几个PDU合并为一个MAC TB,合并过程中,MAC只是把多个RLC PDU通过ngPktChain函数链接为一个链表,mac的TB指针是链表的第一个节点。当组包PADDING时,直接传入了mac的TB指针,PADDING数据通过ngPktAppend申请内存。怀疑是DPDK加入链表的ngPkt执行ngPktAppend存在异常,另外,PADDING应该是最后一个mac SubPdu,而此时MAC多个SUB PDU在链表里还未完成ngPktLinearize操作,即多个SubPduh尚未合并为一个PDU,此时,把Padding append至链表第一个节点后面,本身也会导致接收方解析MAC PDU时,把后面的sub PDU被当做PADDING而DROP掉。
【解决方案】MAC通过ngPktChain把多个SubPDU串接为链表后,随后立即调用ngPktLinearize函数,把subPdu合并为一个MAC PDU,确保padding只能append至MAC PDU的尾部。
由 王 艳芳 更新于 5 天 之前
- 状态 从 已解决 变更为 已关闭
【测试结果】修改代码提交播雨,经播雨测试,此问题已解决。解决问题后的LOG如下:
538894[INFO ]| src/l2/mac/csrc/wn5gNrUePsMacSlotSync.c+362 | wnMacHasUlGrant |DU begin pro UL GRANT: tbSize48 harqId12
[2019-02-14 10:14:33.538910[INFO ]| src/l2/mac/csrc/wn5gNrUePsMacLcp.c+529 | wnMacGiveTxOp |lc1 get txop43 bo111
[2019-02-14 10:14:33.538926[INFO ]| src/l2/mac/csrc/wn5gNrUePsMacMux.c+274 | wnMacFrmPdu |macCb->tb->datalen: 5, nbsegs: 1
[2019-02-14 10:14:33.538938[INFO ]| src/l2/rlc/csrc/wn5gNrPsRlcAmTx.c+429 | wnRlcAmUpdateBo |Updated lcId1 action2 val3 Bo108
[2019-02-14 10:14:33.538945[DEBUG]| src/l2/rlc/csrc/wn5gNrPsRlcAmTx.c+350 | wnRlcAmProcessTxOp |AM status pdu send to Mac
[2019-02-14 10:14:33.538956[INFO ]| src/l2/rlc/csrc/wn5gNrPsRlcAmTx.c+528 | wnRlcAmSendRemainingPdus |Received transmission opporunity40 is less thanbuffer occupancy, segmenting the RLC SDU
[2019-02-14 10:14:33.538965[INFO ]| src/l2/rlc/csrc/wn5gNrPsRlcAmTx.c+841 | wnRlcAmTxSegSendPdu |Send segPkt lcId1 sn1, txop39 pkt len108 tbsize41 isSegPkt0
[2019-02-14 10:14:33.538974[DEBUG]| src/l2/rlc/csrc/wn5gNrPsRlcAmApi.c+144 | wnRlcAmUpdateSi |Setting SI=1 for AMD PDU
[2019-02-14 10:14:33.538984[INFO ]| src/l2/mac/csrc/wn5gNrUePsMacMux.c+279 | wnMacFrmPdu |pktBuff->data_len: 5, pdu0: 1 pdu1: 39 pdu2: 144 pdu3: 1
[2019-02-14 10:14:33.538998[INFO ]| src/l2/rlc/csrc/wn5gNrPsRlcAmTx.c+885 | wnRlcAmTxSegSendPdu |Segmented PDU sent to MAC, sentSo37, pktLen108, sn1 isSegPkt1 pkt[0x17c204700] pkt->next[(nil)] pkt->refcnt1
[2019-02-14 10:14:33.539007[INFO ]| src/l2/rlc/csrc/wn5gNrPsRlcAmTx.c+429 | wnRlcAmUpdateBo |Updated lcId1 action2 val35 Bo73
[2019-02-14 10:14:33.539017[INFO ]| src/l2/mac/csrc/wn5gNrUePsMacBsr.c+462 | wnShortBsrRun | MAC lcg0 lc2 bufSz8[76]!
[2019-02-14 10:14:33.539026[ERROR]| src/l2/mac/csrc/wn5gNrUePsMacMux.c+252 | wnMacMuxSdu |SDU len1 exceeded TB size0
[2019-02-14 10:14:33.539036[ERROR]| src/l2/mac/csrc/wn5gNrUePsMacMux.c+344 | wnMacMux |MAC MUX SDU failed
[2019-02-14 10:14:33.539044[ERROR]| src/l2/mac/csrc/wn5gNrUePsMac.c+1523 | wnMacFormBsr |BSR Mux Failed
[2019-02-14 10:14:33.539052[ERROR]| src/l2/mac/csrc/wn5gNrUePsMac.c+1994 | wnMuxMacCe | MAC BSR mux fail!
[2019-02-14 10:14:33.539063[DEBUG]| src/ueapp/test/wn5gNrPsL1cSocket.c+1932 | wnSendUlSchToL1c |ulTbReq->rntiType:2,ulTbReq->bufferId:0,ulTbReq->tbSize:48,ulTbReq->payload:[1]/[3]/[0]/[1]/[0]/[1]/[27]/[90]/[1]/[0]
【测试结果分析】此次的测试结果其实并没有完全复现上次出问题的场景,此次UL GRANT的TBSIZE比较小,MAC不需要打PADDING,但是从增加的LOG分析,MAC SubPDU的组包没有问题,还是MAC合并的问题,所以,此次的解决方案应该可以解决问题。