}
}
- /* Check if reOrdTmr is running and update rxNextStatusTrig accordingly */
- tmrRunning = rlcChkTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REORD_TMR);
+ /* Check if reAsmblTmr is running and update rxNextStatusTrig accordingly */
+ tmrRunning = rlcChkTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REASSEMBLE_TMR);
if (tmrRunning)
{
Bool snInWin = RLC_AM_CHK_SN_WITHIN_RECV_WINDOW(amUl->rxNextStatusTrig, amUl);
-
- if ( (amUl->rxNextStatusTrig == amUl->rxNext) || ( (!snInWin) &&
- (amUl->rxNextStatusTrig != amUl->vrMr) ) )
+ /* spec 38.322v15.3.0 - 5.2.3.2.3 */
+ if((amUl->rxNextStatusTrig == amUl->rxNext) || ( (!snInWin) &&
+ (amUl->rxNextStatusTrig != amUl->vrMr) )||
+ (amUl->rxNextStatusTrig == amUl->rxNext && recBuf &&recBuf->noMissingSeg))
{
- rlcStopTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REORD_TMR);
+ rlcStopTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REASSEMBLE_TMR);
tmrRunning = FALSE;
+ DU_LOG("\nINFO --> RLC_UL: rlcAmmProcessPdus: Stopped ReAssembly Timer rxNextStatusTigger = %d"
+ "rxNextReassembly = %d", amUl->rxNextStatusTrig, amUl->rxNext);
}
}
if (!tmrRunning)
{
- if (amUl->rxNextHighestRcvd > amUl->rxNext)
+ /* spec 38.322v15.3.0 - 5.2.3.2.3 */
+ if((amUl->rxNextHighestRcvd > amUl->rxNext) || ((amUl->rxNextHighestRcvd == amUl->rxNext) &&
+ (recBuf && (!recBuf->noMissingSeg))))
{
- rlcStartTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REORD_TMR);
+ rlcStartTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REASSEMBLE_TMR);
amUl->rxNextStatusTrig = amUl->rxNextHighestRcvd;
- DU_LOG("\nDEBUG --> RLC_UL : rlcAmmProcessPdus: Updated rxNextStatusTrig = %d \
- UEID:%d CELLID:%d", amUl->rxNextStatusTrig, rbCb->rlcId.ueId,
+ DU_LOG("\nDEBUG --> RLC_UL : rlcAmmProcessPdus: Updated rxNextStatusTrig = %d"
+ "UEID:%d CELLID:%d", amUl->rxNextStatusTrig, rbCb->rlcId.ueId,
rbCb->rlcId.cellId);
}
}
amHdr->sn = sn;
}
- if ((amHdr->si != 0) && (amHdr->si != 0x01))
+ if ((amHdr->si != 0) && (amHdr->si != RLC_SI_FIRST_SEG))
{
hdrInfo.len = RLC_SO_LEN_5GNR;
rlcAmmExtractElmnt(gCb, pdu, &hdrInfo);
* staTrg flag.
* - If staProhTmr is not running, calculate cntrlBo, else it'll be
* updated at the expiry of staProhTmr.
- * - Expiry of reOrdTmr also will set staTrg flag.
+ * - Expiry of reAsmblTmr also will set staTrg flag.
*
* @param[in] gCb RLC instance control block
* @param[in] rbCb Uplink RB control block
ODU_PUT_MSG_BUF(RLC_AMUL.partialSdu);
}
- //if (amHdr->fi & RLC_FI_FIRST_SEG)
- if (amHdr->si == 0x01)
+ if (amHdr->si == RLC_SI_FIRST_SEG)
{/* first Segment of the SDU */
if (RLC_AMUL.partialSdu != NULLP)
{ /* Some old SDU may be present */
RLC_AMUL.partialSdu = pdu;
pdu = NULLP;
}
- else if(amHdr->si == 0x03)
+ else if(amHdr->si == RLC_SI_MID_SEG)
{/* Middle or last segment of the SUD */
ODU_CAT_MSG(RLC_AMUL.partialSdu,pdu, M1M2);
ODU_PUT_MSG_BUF(pdu);
pdu = NULLP;
}
- else if (amHdr->si == 0x02)
+ else if (amHdr->si == RLC_SI_LAST_SEG)
{
ODU_CAT_MSG(pdu,RLC_AMUL.partialSdu,M2M1);
ODU_PUT_MSG_BUF(RLC_AMUL.partialSdu);
/* Discard remaining PDUs and bytesegments in recBuf */
/* Stop all timers and reset variables */
- if(TRUE == rlcChkTmr(gCb,(PTR)rbCb,EVENT_RLC_AMUL_REORD_TMR))
+ if(TRUE == rlcChkTmr(gCb,(PTR)rbCb,EVENT_RLC_AMUL_REASSEMBLE_TMR))
{
- rlcStopTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REORD_TMR);
+ rlcStopTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REASSEMBLE_TMR);
}
if(TRUE == rlcChkTmr(gCb,(PTR)rbCb,EVENT_RLC_AMUL_STA_PROH_TMR))
{
*
*/
-Void rlcAmmReOrdTmrExp(RlcCb *gCb,RlcUlRbCb *rbCb)
+Void rlcAmmReAsmblTmrExp(RlcCb *gCb,RlcUlRbCb *rbCb)
{
RlcAmUl *amUl = &(rbCb->m.amUl);
RlcSn sn;
if (!tmrRunning)
{
- gRlcStats.amRlcStats.numULReOrdTimerExpires++;
+ gRlcStats.amRlcStats.numULReAsmblTimerExpires++;
amUl->gatherStaPduInfo = TRUE;
rlcAmmUlAssembleCntrlInfo(gCb, rbCb);
}
/* Update rxNextStatusTrig */
MODAMR(amUl->rxNextHighestRcvd, mrxNextHighestRcvd, amUl->rxNext, amUl->snModMask);
MODAMR(amUl->rxHighestStatus, mrxHighestStatus, amUl->rxNext, amUl->snModMask);
- if (mrxNextHighestRcvd > mrxHighestStatus)
+ /* spec 38.322v15.3.0 - 5.2.3.2.4 */
+ if((mrxNextHighestRcvd > mrxHighestStatus) || ((mrxNextHighestRcvd == mrxHighestStatus) &&
+ ((recBuf) && !(recBuf->noMissingSeg))))
{
- rlcStartTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REORD_TMR);
+ rlcStartTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REASSEMBLE_TMR);
amUl->rxNextStatusTrig = amUl->rxNextHighestRcvd;
}
return;
-} /* rlcAmmReOrdTmrExp */
+} /* rlcAmmReAsmblTmrExp */
/**
* @brief Handler for status prohibit timer expiry
{
return;
}
-
+ recBuf->noMissingSeg = FALSE;
newExpSo = seg->soEnd + 1;
recBuf->expSo = newExpSo;
- //lstRcvd = seg->amHdr.lsf;
- if(seg->amHdr.si == 0x2)
+ if(seg->amHdr.si == RLC_SI_LAST_SEG)
{
lstRcvd = TRUE;
}
{
/* keep going ahead as long as the expectedSo match with the header so
else store the expSo for later checking again */
- if(seg->amHdr.si == 0x2)
+ if(seg->amHdr.si == RLC_SI_LAST_SEG)
{
lstRcvd = TRUE;
}
{
newExpSo = seg->soEnd + 1;
recBuf->expSo = newExpSo;
- //lstRcvd = seg->amHdr.lsf;
RLC_LLIST_NEXT_SEG(recBuf->segLst, seg);
}
else
recBuf->allRcvd = TRUE;
gRlcStats.amRlcStats.numRlcAmCellSduRx++;
}
-
+ recBuf->noMissingSeg = TRUE;
return;
}
windSz = (RLC_AM_GET_WIN_SZ(rbCb->m.amUl.snLen)) << 1;
- if(TRUE == rlcChkTmr(gCb,(PTR)rbCb,EVENT_RLC_AMUL_REORD_TMR))
+ if(TRUE == rlcChkTmr(gCb,(PTR)rbCb,EVENT_RLC_AMUL_REASSEMBLE_TMR))
{
- rlcStopTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REORD_TMR);
+ rlcStopTmr(gCb,(PTR)rbCb, EVENT_RLC_AMUL_REASSEMBLE_TMR);
}
if(TRUE == rlcChkTmr(gCb,(PTR)rbCb,EVENT_RLC_AMUL_STA_PROH_TMR))
{