void l1HdlConfigReq(uint32_t msgLen, void *msg)
{
- memset(&ueDb, 0, sizeof(UeDb));
+ memset(&phyDb.ueDb, 0, sizeof(UeDb));
+ cmInetAddr((char *)SOURCE_DU_IPV4_ADDR, &phyDb.ipCfgInfo.sourceDu);
+ cmInetAddr((char *)DESTINATION_DU_IPV4_ADDR, &phyDb.ipCfgInfo.destinationDu);
+ phyDb.ipCfgInfo.portNumber = PORT_NUMBER;
+ phyDb.isServer = true;
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t configReqElem = (p_fapi_api_queue_elem_t)msg;
MsgType type = 0;
GET_UE_ID(puschPdu.rnti, ueId);
- if(!ueDb.ueCb[ueId-1].msg3Sent)
+ if(phyDb.ueDb.ueCb[ueId-1].isCFRA)
{
- ueDb.ueCb[ueId-1].ueId = ueId;
- ueDb.ueCb[ueId-1].crnti = puschPdu.rnti;
- ueDb.ueCb[ueId-1].msg3Sent = true;
- type = MSG_TYPE_MSG3;
- sleep(2);
- }
- else if(!ueDb.ueCb[ueId-1].msg5ShortBsrSent)
- {
- ueDb.ueCb[ueId-1].msg5ShortBsrSent = true;
- type = MSG_TYPE_SHORT_BSR;
- }
- else if(!ueDb.ueCb[ueId-1].msg5Sent)
- {
- ueDb.ueCb[ueId-1].msg5Sent = true;
- type = MSG_TYPE_MSG5;
- }
- else if(!ueDb.ueCb[ueId-1].msgRegistrationComp)
- {
- ueDb.ueCb[ueId-1].msgRegistrationComp = true;
- type = MSG_TYPE_REGISTRATION_COMPLETE;
- }
- else if(!ueDb.ueCb[ueId-1].msgSecurityModeComp)
- {
- ueDb.ueCb[ueId-1].msgSecurityModeComp = true;
- type = MSG_TYPE_SECURITY_MODE_COMPLETE;
- }
- else if(!ueDb.ueCb[ueId-1].msgRrcReconfiguration)
- {
- ueDb.ueCb[ueId-1].msgRrcReconfiguration = true;
+ /* In CF-RA in case of handover, RRC Reconfiguration Complete is sent
+ * by UE once RAR is received from DU */
+ phyDb.ueDb.ueCb[ueId-1].ueId = ueId;
+ phyDb.ueDb.ueCb[ueId-1].crnti = puschPdu.rnti;
+ phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp = true;
type = MSG_TYPE_RRC_RECONFIG_COMPLETE;
}
else
- return RFAILED;
+ {
+ if(!phyDb.ueDb.ueCb[ueId-1].msg3Sent)
+ {
+ phyDb.ueDb.ueCb[ueId-1].ueId = ueId;
+ phyDb.ueDb.ueCb[ueId-1].crnti = puschPdu.rnti;
+ phyDb.ueDb.ueCb[ueId-1].msg3Sent = true;
+ type = MSG_TYPE_MSG3;
+ sleep(2);
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msg5ShortBsrSent)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msg5ShortBsrSent = true;
+ type = MSG_TYPE_SHORT_BSR;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msg5Sent)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msg5Sent = true;
+ type = MSG_TYPE_MSG5;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msgRegistrationComp)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msgRegistrationComp = true;
+ type = MSG_TYPE_REGISTRATION_COMPLETE;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msgSecurityModeComp)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msgSecurityModeComp = true;
+ type = MSG_TYPE_SECURITY_MODE_COMPLETE;
+ }
+ else if(!phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp)
+ {
+ phyDb.ueDb.ueCb[ueId-1].msgRrcReconfigComp = true;
+ type = MSG_TYPE_RRC_RECONFIG_COMPLETE;
+ }
+ else
+ return RFAILED;
+ }
MAC_ALLOC(rxDataInd, sizeof(fapi_rx_data_indication_t));
if(!rxDataInd)
DU_LOG("\nDEBUG --> PHY_STUB: Forming MSG5 PDU");
uint8_t msg5PduLen = 33; /* Length of MSG5 */
msg5PduLen += 2; /* RLC subheader */
- uint8_t msg5[] = {1, msg5PduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 16, 0, \
+ uint8_t msg5[] = {1, msg5PduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 16, 0, \
5, 223, 128, 16, 94, 64, 3, 64, 68, 252, 97, 0, 0, 0, 0, 4, 0, 0, 4, 68, 11, 128, 184, 56, 0, 0, 0, 0, 0};
msg5PduLen += 2; /* 2 bytes of MAC header */
DU_LOG("\nDEBUG --> PHY_STUB: Forming SECURITY MODE COMPLETE PDU");
uint8_t pduLen = 12; /* Length of PDU */
pduLen += 2; /* RLC subheader */
- uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 0x2a, 0x40, \
+ uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x2a, 0x40, \
0, 0, 0, 0, 0, 0, 0, 0};
pduLen += 2; /* 2 bytes of MAC header */
DU_LOG("\nDEBUG --> PHY_STUB: Forming RRC REGISTRATION COMPLETE PDU");
uint8_t pduLen = 12; /* Length of PDU */
pduLen += 2; /* RLC subheader */
- uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, 0x81, \
+ uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 0x3a, 0x81, \
0xbf, 0, 0x21, 0x80, 0, 0, 0, 0};
pduLen += 2; /* 2 bytes of MAC header */
DU_LOG("\nDEBUG --> PHY_STUB: Forming RRC RECONFIGURATION COMPLETE PDU");
uint8_t pduLen = 13; /* PDU length */
pduLen += 2; /* RLC sub header */
- uint8_t msg[] = {1, pduLen, 128, ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, ueDb.ueCb[ueId-1].pdcpSn++, 8, 64, 0, 0,\
+ uint8_t msg[] = {1, pduLen, 128, phyDb.ueDb.ueCb[ueId-1].rlcSnForSrb1++, 0, phyDb.ueDb.ueCb[ueId-1].pdcpSn++, 8, 64, 0, 0,\
0, 0, 0, 0, 0, 0, 0};
pduLen += 2; /* 2bytes of MAC header */
* RFAILED - failure
*
* ****************************************************************/
-uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn)
+uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn, uint8_t raPreambleIdx)
{
#ifdef INTEL_FAPI
uint8_t rachPduIdx = 0;
rachPdu->avgSnr = 0;
rachPdu->numPreamble = 1;
- rachPdu->preambleInfo[preamIdx].preambleIndex = 3;
+ rachPdu->preambleInfo[preamIdx].preambleIndex = raPreambleIdx;
rachPdu->preambleInfo[preamIdx].timingAdvance = 0;
rachPdu->preambleInfo[preamIdx].preamblePwr = 0;
{
if(ulTtiReq->pdus[numPdus-1].pduType == 0)
{
- DU_LOG("\nINFO --> PHY STUB: PRACH PDU");
+ DU_LOG("\nINFO --> PHY STUB: PRACH PDU");
}
if(ulTtiReq->pdus[numPdus-1].pduType == 1)
{
- DU_LOG("\nINFO --> PHY STUB: PUSCH PDU");
- l1BuildAndSendRxDataInd(ulTtiReq->slot, ulTtiReq->sfn, \
- ulTtiReq->pdus[numPdus-1].pdu.pusch_pdu);
+ DU_LOG("\nINFO --> PHY STUB: PUSCH PDU");
+ l1BuildAndSendRxDataInd(ulTtiReq->slot, ulTtiReq->sfn, ulTtiReq->pdus[numPdus-1].pdu.pusch_pdu);
}
if(ulTtiReq->pdus[numPdus-1].pduType == 2)
{
- DU_LOG("\nINFO --> PHY STUB: PUCCH PDU");
+ DU_LOG("\nINFO --> PHY STUB: PUCCH PDU");
+
fapi_ul_tti_req_t ulTtiSlotInd;
- memset(&ulTtiSlotInd, 0, sizeof(fapi_ul_tti_req_t));
- ulTtiSlotInd.slot = ulTtiReq->slot;
- ulTtiSlotInd.sfn = ulTtiReq->sfn;
+ memset(&ulTtiSlotInd, 0, sizeof(fapi_ul_tti_req_t));
+ ulTtiSlotInd.slot = ulTtiReq->slot;
+ ulTtiSlotInd.sfn = ulTtiReq->sfn;
ADD_DELTA_TO_TIME(ulTtiSlotInd, ulTtiSlotInd, SLOT_DELAY);
- l1BuildAndSendUciInd(ulTtiSlotInd.slot, ulTtiSlotInd.sfn, \
- ulTtiReq->pdus[numPdus-1].pdu.pucch_pdu);
+ l1BuildAndSendUciInd(ulTtiSlotInd.slot, ulTtiSlotInd.sfn, ulTtiReq->pdus[numPdus-1].pdu.pucch_pdu);
}
numPdus--;
}
/* TODO: [SFN:SLOT] at which RACH Indication is sent should be calculated
* based on PRACH cfg index */
/* Send RACH Ind to L2 for first UE */
- if(ueDb.ueCb[UE_IDX_0].rachIndSent == false && ulTtiReq->sfn == 16 && ulTtiReq->slot == 6)
+ if(phyDb.ueDb.ueCb[UE_IDX_0].rachIndSent == false && ulTtiReq->sfn == 16 && ulTtiReq->slot == 6)
{
- ueDb.ueCb[UE_IDX_0].rachIndSent = true;
- l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
- ueDb.numActvUe++;
+ phyDb.ueDb.ueCb[UE_IDX_0].isCFRA = false;
+ phyDb.ueDb.ueCb[UE_IDX_0].rachIndSent = true;
+ l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn, CB_RA_PREAMBLE_IDX);
+ phyDb.ueDb.numActvUe++;
}
#if 0
/* Send RACH Ind to L2 for second UE */
- if(ueDb.ueCb[UE_IDX_1].rachIndSent == false && ulTtiReq->sfn == 304 && ulTtiReq->slot == 0)
+ if(phyDb.ueDb.ueCb[UE_IDX_1].rachIndSent == false && ulTtiReq->sfn == 304 && ulTtiReq->slot == 0)
{
- ueDb.ueCb[UE_IDX_1].rachIndSent = true;
- l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
- ueDb.numActvUe++;
+ phyDb.ueDb.ueCb[UE_IDX_0].isCFRA = false;
+ phyDb.ueDb.ueCb[UE_IDX_1].rachIndSent = true;
+ l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn, CB_RA_PREAMBLE_IDX);
+ phyDb.ueDb.numActvUe++;
}
/* Send RACH Ind to L2 for third UE */
- if(ueDb.ueCb[UE_IDX_2].rachIndSent == false && ulTtiReq->sfn == 526 && ulTtiReq->slot == 0)
+ if(phyDb.ueDb.ueCb[UE_IDX_2].rachIndSent == false && ulTtiReq->sfn == 526 && ulTtiReq->slot == 0)
{
- ueDb.ueCb[UE_IDX_2].rachIndSent = true;
- l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
- ueDb.numActvUe++;
+ phyDb.ueDb.ueCb[UE_IDX_0].isCFRA = false;
+ phyDb.ueDb.ueCb[UE_IDX_2].rachIndSent = true;
+ l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn, CB_RA_PREAMBLE_IDX);
+ phyDb.ueDb.numActvUe++;
}
#endif
MAC_FREE(msg, msgLen);
/* Initialize all global variables */
sfnValue = 0;
slotValue = 0;
- memset(&ueDb, 0, sizeof(UeDb));
+ memset(&phyDb.ueDb, 0, sizeof(UeDb));
DU_LOG("\nINFO --> PHY_STUB: Slot Indication is stopped successfully");
MAC_FREE(msg, msgLen);