S16 BuildNrCellId(BIT_STRING_t *nrcell)
{
- U8 tmp;
- for (tmp = 0 ; tmp < nrcell->size-1; tmp++)
- {
- nrcell->buf[tmp] = 0;
- }
+ memset(nrcell->buf, 0, nrcell->size);
nrcell->buf[4] = 16;
nrcell->bits_unused = 4;
nrcell->size = 5 * sizeof(uint8_t);
* ****************************************************************/
S16 BuildAndSendF1SetupRsp()
{
- U8 idx,ieIdx;
- U8 elementCnt,cellCnt;
+ uint8_t idx,ieIdx;
+ uint8_t elementCnt,cellCnt;
F1AP_PDU_t *f1apMsg = NULL;
F1SetupResponse_t *f1SetupRsp;
GNB_CU_Name_t *cuName;
rrcVer = &f1SetupRsp->protocolIEs.list.array[idx]->value.choice.RRC_Version;
rrcVer->latest_RRC_Version.size = RRC_SIZE;
- CU_ALLOC(rrcVer->latest_RRC_Version.buf, sizeof(U8));
+ CU_ALLOC(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
if(rrcVer->latest_RRC_Version.buf == NULLP)
{
CU_FREE(cuName->buf, sizeof(cuName->size));
CU_ALLOC(rrcVer->iE_Extensions,sizeof(ProtocolExtensionContainer_4624P81_t));
if(rrcVer->iE_Extensions == NULLP)
{
- CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(U8));
+ CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
{
CU_FREE(rrcVer->iE_Extensions,\
sizeof(ProtocolExtensionContainer_4624P81_t));
- CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(U8));
+ CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
sizeof(struct RRC_Version_ExtIEs *));
CU_FREE(rrcVer->iE_Extensions,\
sizeof(ProtocolExtensionContainer_4624P81_t));
- CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(U8));
+ CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
rrcVer->iE_Extensions->list.array[0]->extensionValue.present = \
RRC_Version_ExtIEs__extensionValue_PR_Latest_RRC_Version_Enhanced;
rrcVer->iE_Extensions->list.array[0]->extensionValue.choice.\
- Latest_RRC_Version_Enhanced.size = 3*sizeof(U8);
+ Latest_RRC_Version_Enhanced.size = 3*sizeof(uint8_t);
CU_ALLOC(rrcVer->iE_Extensions->list.\
array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.buf,\
- 3*sizeof(U8));
+ 3*sizeof(uint8_t));
if(rrcVer->iE_Extensions->list.\
array[0]->extensionValue.choice.Latest_RRC_Version_Enhanced.buf == NULLP)
{
sizeof(struct RRC_Version_ExtIEs *));
CU_FREE(rrcVer->iE_Extensions,\
sizeof(ProtocolExtensionContainer_4624P81_t));
- CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(U8));
+ CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(ieIdx=0; ieIdx<elementCnt; ieIdx++)
{
encRetVal = aper_encode(&asn_DEF_F1AP_PDU, 0, f1apMsg, PrepFinalEncBuf, encBuf);
/* Clean up */
- CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(U8));
+ CU_FREE(rrcVer->latest_RRC_Version.buf, sizeof(uint8_t));
CU_FREE(cuName->buf, sizeof(cuName->size));
for(idx=0; idx<elementCnt; idx++)
{
S16 BuildAndSendDUUpdateAck()
{
- U8 idx;
- U8 elementCnt;
+ uint8_t idx;
+ uint8_t elementCnt;
F1AP_PDU_t *f1apMsg = NULL;
GNBDUConfigurationUpdateAcknowledge_t *gNBDuCfgAck;
asn_enc_rval_t enRetVal; /* Encoder return value */
{
/* encode DL-DCCH message into RRC Container */
xer_fprint(stdout, &asn_DEF_DL_DCCH_MessageType, &dl_DCCH_Msg);
- cmMemset((U8 *)encBuf, 0, ENC_BUF_MAX_LEN);
+ memset(encBuf, 0, ENC_BUF_MAX_LEN);
encBufSize = 0;
encRetVal = aper_encode(&asn_DEF_DL_DCCH_MessageType, 0, &dl_DCCH_Msg, PrepFinalEncBuf, encBuf);
/* Encode results */
uint8_t BuildDLRRCContainer(uint8_t rrcMsgType, RRCContainer_t *rrcContainer)
{
- uint8_t ret = ROK;
-
+ uint8_t ret, bufLen;
+
+ ret =ROK;
if(rrcMsgType == RRC_SETUP)
{
ret = fillDlCcchRrcMsg(rrcContainer);
if(ret == RFAILED)
- DU_LOG("\n F1AP: Failed to fill DL-CCCH Msg at BuildDLRRCContainer()");
+ DU_LOG("\n F1AP: Failed to fill DL-CCCH Msg at RRC SETUP");
+ }
+ else if(rrcMsgType == REGISTRATION_ACCEPT)
+ {
+ /*Hardcoded RRC Container from reference logs*/
+ char buf[14] ={0x00, 0x03, 0x2a, 0x80, 0xaf, 0xc0, 0x08, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00};
+ bufLen =14;
+ rrcContainer->size = bufLen;
+ CU_ALLOC(rrcContainer->buf, rrcContainer->size);
+ if(rrcContainer->buf != NULLP)
+ {
+ memset(rrcContainer->buf, 0, bufLen);
+ memcpy(rrcContainer->buf, buf, bufLen);
+ }
}
else if(rrcMsgType == RRC_RECONFIG)
{
- ret = fillDlDcchRrcMsg(rrcContainer);
- if(ret == RFAILED)
- DU_LOG("\n F1AP: Failed at fill DL-DCCH Msg at BuildDLRRCContainer()");
+ /*Hardcoded RRC Container from reference logs*/
+ char buf[196]= {
+ 0x00, 0x04, 0x00, 0xaa, 0x80, 0x40, 0x9a, 0x05, 0x20, 0x00, 0x05, 0xeb, 0xc0, 0x51, 0x50, 0x00,
+ 0x03, 0x00, 0x03, 0xf7, 0x56, 0xec, 0x7f, 0x08, 0x42, 0x10, 0x80, 0x00, 0x10, 0x21, 0x47, 0x84,
+ 0xd1, 0x00, 0x00, 0x00, 0x02, 0x81, 0x5d, 0x10, 0x0a, 0xc2, 0x44, 0x40, 0x2b, 0xb2, 0x07, 0x41,
+ 0x87, 0xa8, 0x02, 0xc7, 0x00, 0x88, 0x05, 0x76, 0x40, 0xe8, 0x30, 0xf5, 0x40, 0x4c, 0x00, 0x10,
+ 0x02, 0x00, 0xa5, 0x83, 0xe0, 0x60, 0x02, 0x10, 0x72, 0x01, 0x0c, 0xa0, 0xa0, 0xd8, 0x00, 0x00,
+ 0x00, 0x01, 0x0f, 0x02, 0x3c, 0x01, 0x80, 0x10, 0x82, 0xb0, 0x40, 0x00, 0x00, 0x02, 0x1e, 0x04,
+ 0x78, 0x07, 0x00, 0x21, 0x05, 0x61, 0x00, 0x00, 0x00, 0x04, 0x3c, 0x08, 0xf0, 0x16, 0x00, 0x42,
+ 0x0a, 0xc3, 0x00, 0x00, 0x00, 0x08, 0x78, 0x11, 0xe0, 0x3c, 0x00, 0x84, 0x14, 0x00, 0x07, 0xe5,
+ 0xc0, 0xa0, 0xd8, 0x42, 0x20, 0x02, 0x80, 0xa0, 0x02, 0x24, 0x47, 0xa0, 0x20, 0x27, 0xa1, 0x22,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x41, 0x20, 0xc0, 0x80, 0x00, 0x20, 0x80,
+ 0x00, 0x25, 0x20, 0xa0, 0x38, 0x00, 0x00, 0x00, 0x44, 0xa2, 0x82, 0x69, 0xee, 0x0c, 0xad, 0xca,
+ 0x4c, 0x2c, 0x8d, 0x2e, 0x6f, 0x2e, 0x69, 0x2d, 0xce, 0x8c, 0xae, 0x4d, 0xcc, 0xae, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00};
+ bufLen =196;
+ rrcContainer->size = bufLen;
+ CU_ALLOC(rrcContainer->buf, rrcContainer->size);
+ if(rrcContainer->buf != NULLP)
+ {
+ memset(rrcContainer->buf, 0, bufLen);
+ memcpy(rrcContainer->buf, buf, bufLen);
+ }
}
+
return ret;
}
* RFAILED - failure
*
* ****************************************************************/
-uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t rrcMsgType)
+uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t srbId, uint8_t rrcMsgType)
{
uint8_t elementCnt = 0;
uint8_t ieId;
dlRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
dlRRCMsg->protocolIEs.list.array[idx]->value.present = \
DLRRCMessageTransferIEs__value_PR_SRBID;
- dlRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = SRB1;
+ dlRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = srbId;
/* RRCContainer */
idx++;
case RRC_SETUP:
rrcMsgType = RRC_SETUP;
break;
- case RRC_SECURITY_MODE_COMMAND:
- rrcMsgType = RRC_SECURITY_MODE_COMMAND;
+ case REGISTRATION_ACCEPT:
+ rrcMsgType = REGISTRATION_ACCEPT;
+ break;
+ case UE_CONTEXT_SETUP_REQ:
+ rrcMsgType = UE_CONTEXT_SETUP_REQ;
break;
case RRC_RECONFIG:
rrcMsgType = RRC_RECONFIG;
{
f1apMsgDb.dlRrcMsgCount++;
rrcMsgType = setDlRRCMsgType();
- ret = BuildAndSendDLRRCMessageTransfer(rrcMsgType);
+ ret = BuildAndSendDLRRCMessageTransfer(SRB0, rrcMsgType);
}
return ret;
}
uint8_t BuildNrcgi(NRCGI_t *nrcgi)
{
uint8_t ret;
- uint8_t unused = 4;
+ uint8_t unused_bits = 4;
uint8_t byteSize = 5;
- uint8_t val = 16;
+ uint8_t val = 1;
/* Allocate Buffer Memory */
nrcgi->pLMN_Identity.size = 3 * sizeof(uint8_t);
CU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
{
return RFAILED;
}
+#if 0
ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val);
if(ret != ROK)
{
return RFAILED;
}
+#endif
+ memset(nrcgi->nRCellIdentity.buf, 0, nrcgi->nRCellIdentity.size);
+ nrcgi->nRCellIdentity.buf[0] |= val;
+ nrcgi->nRCellIdentity.bits_unused = unused_bits;
+
return ROK;
}
/*******************************************************************
uint8_t SplCellListret;
uint8_t SrbSetupret;
uint8_t elementCnt;
- uint8_t idx;
+ uint8_t idx, bufLen;
uint8_t idx1;
F1AP_PDU_t *f1apMsg = NULLP;
UEContextSetupRequest_t *ueSetReq = NULLP;
ueSetReq =
&f1apMsg->choice.initiatingMessage->value.choice.UEContextSetupRequest;
- elementCnt = 11;
+ elementCnt = 12;
ueSetReq->protocolIEs.list.count = elementCnt;
ueSetReq->protocolIEs.list.size = \
elementCnt * sizeof(UEContextSetupRequestIEs_t *);
{
break;
}
-
- /* RRC Container */
+ /* RRC Container for security mode */
idx++;
ueSetReq->protocolIEs.list.array[idx]->id = ProtocolIE_ID_id_RRCContainer;
ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_reject;
ueSetReq->protocolIEs.list.array[idx]->value.present = \
UEContextSetupRequestIEs__value_PR_RRCContainer;
- ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.size = rrcContLen;
+ char secModeBuf[9]={0x00, 0x02, 0x22, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00};
+ bufLen =9;
+ ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.size = bufLen;
CU_ALLOC(ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.buf,
ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.size);
if(!ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.buf)
DU_LOG(" F1AP : Memory allocation for BuildAndSendUeContextSetupReq failed");
break;
}
- memcpy(ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.buf, \
- rrcContainer, ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.size);
+ memset(ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.buf, 0, bufLen);
+ memcpy(ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCContainer.buf, secModeBuf, bufLen);
/* RRC delivery status request */
idx++;
UEContextSetupRequestIEs__value_PR_RRCDeliveryStatusRequest;
ueSetReq->protocolIEs.list.array[idx]->value.choice.RRCDeliveryStatusRequest = \
RRCDeliveryStatusRequest_true;
-
+
+ /* Bit Rate hardcoded as in reference logs */
+ idx++;
+ ueSetReq->protocolIEs.list.array[idx]->id = \
+ ProtocolIE_ID_id_GNB_DU_UE_AMBR_UL;
+ ueSetReq->protocolIEs.list.array[idx]->criticality = Criticality_ignore;
+ ueSetReq->protocolIEs.list.array[idx]->value.present = \
+ UEContextSetupRequestIEs__value_PR_BitRate;
+ char bitRateBuf[4]= {0x3B, 0x37, 0xF4, 0xCD};
+ bufLen = 4;
+ ueSetReq->protocolIEs.list.array[idx]->value.choice.BitRate.size = bufLen;
+ CU_ALLOC(ueSetReq->protocolIEs.list.array[idx]->value.choice.BitRate.buf,\
+ ueSetReq->protocolIEs.list.array[idx]->value.choice.BitRate.size);
+ if(!ueSetReq->protocolIEs.list.array[idx]->value.choice.BitRate.buf)
+ {
+ DU_LOG(" F1AP : Failed to allocate memory for Bit Rate in BuildAndSendUeContextSetupReq()");
+ break;
+ }
+ memset(ueSetReq->protocolIEs.list.array[idx]->value.choice.BitRate.buf, 0, bufLen);
+ memcpy(ueSetReq->protocolIEs.list.array[idx]->value.choice.BitRate.buf, bitRateBuf, bufLen);
+
xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
/* Encode the F1SetupRequest type as APER */
{
f1apMsgDb.dlRrcMsgCount++;
rrcMsgType = setDlRRCMsgType();
- if(rrcMsgType == RRC_SECURITY_MODE_COMMAND)
+ if(rrcMsgType == REGISTRATION_ACCEPT)
{
- ret = BuildAndSendUeContextSetupReq(cuUeF1apId, duUeF1apId, rrcContLen, rrcContainer);
+ DU_LOG("\nSending DL RRC MSG for RRC Registration Complete");
+ ret = BuildAndSendDLRRCMessageTransfer(srbId, rrcMsgType);
}
- if(rrcMsgType == RRC_RECONFIG)
+ if(rrcMsgType == UE_CONTEXT_SETUP_REQ)
{
- ret = BuildAndSendDLRRCMessageTransfer(rrcMsgType);
+ DU_LOG("\nSending Ue Context Setup Req");
+ ret = BuildAndSendUeContextSetupReq(cuUeF1apId, duUeF1apId,\
+ rrcContLen, rrcContainer);
}
}
return ret;
}
case SuccessfulOutcome__value_PR_UEContextSetupResponse:
{
+ uint8_t rrcMsgType;
+
DU_LOG("\nF1AP : UE ContextSetupResponse received");
+ f1apMsgDb.dlRrcMsgCount++;
+ rrcMsgType = setDlRRCMsgType();
+ if(rrcMsgType == RRC_RECONFIG)
+ {
+ DU_LOG("\nImplementing DL RRC MSG for RRC Reconfig Complete");
+ BuildAndSendDLRRCMessageTransfer(SRB1, rrcMsgType);
+ }
break;
}
default: