X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_demux.c;h=ae4082797c262f6fd3f448bf5d73c494ce55ea9f;hb=refs%2Fchanges%2F91%2F5391%2F11;hp=fe6198bbdf273e7e9e5cf52632c74518815d2fd9;hpb=6b44407d464a5a4e060999255233a7cfe78bb0fa;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_demux.c b/src/5gnrmac/mac_demux.c index fe6198bbd..ae4082797 100644 --- a/src/5gnrmac/mac_demux.c +++ b/src/5gnrmac/mac_demux.c @@ -26,7 +26,6 @@ #include "mac.h" #include "mac_utils.h" -extern uint32_t shortBsrBytesTable[MAX_SHORT_BSR_TABLE_ENTRIES]; /******************************************************************* * @@ -47,19 +46,22 @@ extern uint32_t shortBsrBytesTable[MAX_SHORT_BSR_TABLE_ENTRIES]; * ****************************************************************/ uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxDataIndPdu) { - uint8_t lcId; /* LC ID of a sub pdu */ - uint8_t fBit = 0; /* Value of F Bit in MAC sub-header */ - uint8_t idx = 0; /* Iterator for received PDU */ - uint16_t length; /* Length of payload in a sub-PDU */ - uint8_t *pdu; /* Payload in sub-PDU */ - uint16_t pduLen; /* Length of undecoded PDU */ - uint8_t *rxDataPdu; /* Received PDU in Rx Data Ind */ - uint16_t cellIdx; /* Cell Index */ + uint8_t ueIdx = 0; /* Iterator for UE list */ + uint8_t lcId = 0; /* LC ID of a sub pdu */ + uint8_t fBit = 0; /* Value of F Bit in MAC sub-header */ + uint8_t idx = 0; /* Iterator for received PDU */ + uint16_t length = 0; /* Length of payload in a sub-PDU */ + uint8_t *pdu = NULLP; /* Payload in sub-PDU */ + uint16_t pduLen = 0; /* Length of undecoded PDU */ + uint8_t *rxDataPdu = NULLP; /* Received PDU in Rx Data Ind */ + uint16_t cellIdx = 0; /* Cell Index */ uint8_t ret =ROK; GET_CELL_IDX(cellId, cellIdx); pduLen = rxDataIndPdu->pduLength; rxDataPdu = rxDataIndPdu->pduData; + GET_UE_IDX(rxDataIndPdu->rnti, ueIdx); + ueIdx = ueIdx -1; while(pduLen > 0) { @@ -83,7 +85,7 @@ uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxData MAC_ALLOC_SHRABL_BUF(pdu, length); if(!pdu) { - DU_LOG("\nMAC : UL CCCH PDU memory allocation failed"); + DU_LOG("\nERROR --> MAC : UL CCCH PDU memory allocation failed"); return RFAILED; } idx++; @@ -92,7 +94,7 @@ uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxData idx = idx + length; /* store msg3 pdu in macRaCb for CRI value */ - memcpy(macCb.macCell[cellIdx]->macRaCb[0].msg3Pdu, pdu, length); + memcpy(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg3Pdu, pdu, length); /* Send UL-CCCH Indication to DU APP */ ret = macProcUlCcchInd(macCb.macCell[cellIdx]->cellId, rxDataIndPdu->rnti, length, pdu); @@ -101,8 +103,7 @@ uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxData case MAC_LCID_MIN ... MAC_LCID_MAX : { - DU_LOG("\nMAC : PDU received for LC ID %d", lcId); - + DU_LOG("\nINFO --> MAC : PDU received for LC ID %d", lcId); pduLen--; idx++; @@ -118,7 +119,7 @@ uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxData MAC_ALLOC_SHRABL_BUF(pdu, length); if(!pdu) { - DU_LOG("\nMAC : Memory allocation failed while demuxing Rx Data PDU"); + DU_LOG("\nERROR --> MAC : Memory allocation failed while demuxing Rx Data PDU"); return RFAILED; } pduLen--; @@ -126,7 +127,17 @@ uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxData memcpy(pdu, &rxDataPdu[idx], length); pduLen -= length; idx = idx + length; - + + /* Delete RA cb once RRC setup complete received */ + if(macCb.macCell[cellIdx]->macRaCb[ueIdx].crnti == rxDataIndPdu->rnti) + { + MAC_FREE(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu, \ + macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen); + MAC_FREE(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \ + macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize); + memset(&macCb.macCell[cellIdx]->macRaCb[ueIdx], 0, sizeof(MacRaCbInfo)); + } + /* Send UL Data to RLC */ ret = macProcUlData(cellId, rxDataIndPdu->rnti, slotInfo, lcId, length, pdu); @@ -194,7 +205,7 @@ uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxData default: { - DU_LOG("\nMAC : Invalid LC Id %d", lcId); + DU_LOG("\nERROR --> MAC : Invalid LC Id %d", lcId); return RFAILED; } } /* End of switch */