/* MACRO Define for PUSCH Configuration */
#define PUSCH_K2_CFG1 1
#define PUSCH_K2_CFG2 2
+#define PUSCH_START_SYMBOL 3
#define PUSCH_MSG3_DELTA_PREAMBLE 0
#define PUSCH_P0_NOMINAL_WITH_GRANT -70
switch(ueCb->f1apMsgDb.dlRrcMsgCount)
{
case RRC_SETUP:
- rrcMsgType = RRC_SETUP;
- break;
+ rrcMsgType = RRC_SETUP;
+ break;
case REGISTRATION_ACCEPT:
- rrcMsgType = REGISTRATION_ACCEPT;
- break;
+ rrcMsgType = REGISTRATION_ACCEPT;
+ break;
case UE_CONTEXT_SETUP_REQ:
- rrcMsgType = UE_CONTEXT_SETUP_REQ;
- break;
+ rrcMsgType = UE_CONTEXT_SETUP_REQ;
+ break;
case SECURITY_MODE_COMPLETE:
- rrcMsgType = SECURITY_MODE_COMPLETE;
- break;
+ rrcMsgType = SECURITY_MODE_COMPLETE;
+ break;
case RRC_RECONFIG:
- rrcMsgType = RRC_RECONFIG;
- break;
+ rrcMsgType = RRC_RECONFIG;
+ break;
+ case RRC_RECONFIG_COMPLETE:
+ rrcMsgType = RRC_RECONFIG_COMPLETE;
+ break;
case UE_CONTEXT_MOD_REQ:
- rrcMsgType = UE_CONTEXT_MOD_REQ;
- break;
+ rrcMsgType = UE_CONTEXT_MOD_REQ;
+ break;
default:
- break;
+ break;
}
return rrcMsgType;
}
ueCb->crnti = crnti;
ueCb->gnbDuUeF1apId = gnbDuUeF1apId;
ueCb->gnbCuUeF1apId = ++cuCb.gnbCuUeF1apIdGenerator;
+ ueCb->state = ATTACH_IN_PROGRESS;
(duDb->numUe)++;
cellCb->ueCb[cellCb->numUe] = ueCb;
resourceList->list.array[rsrcIdx]->transmissionComb.choice.n2->cyclicShift_n2\
= SRS_CYCLIC_SHIFT_N2;
- resourceList->list.array[rsrcIdx]->resourceMapping.startPosition = \
- 0;
+ resourceList->list.array[rsrcIdx]->resourceMapping.startPosition = PUSCH_START_SYMBOL;
resourceList->list.array[rsrcIdx]->resourceMapping.nrofSymbols = \
SRS_Resource__resourceMapping__nrofSymbols_n1;
resourceList->list.array[rsrcIdx]->resourceMapping.repetitionFactor = \
BuildAndSendDLRRCMessageTransfer(duId, ueCb, srbId, rrcMsgType);
}
}
- if(rrcMsgType == UE_CONTEXT_MOD_REQ)
+ if(rrcMsgType == RRC_RECONFIG_COMPLETE)
{
- DU_LOG("\nINFO --> F1AP: Sending UE Context Modification Request");
- BuildAndSendUeContextModificationReq(duId, ueCb);
+ ueCb->state = ACTIVE;
+ ueCb->f1apMsgDb.dlRrcMsgCount++;
+ rrcMsgType = setDlRRCMsgType(ueCb);
+ if(rrcMsgType == UE_CONTEXT_MOD_REQ)
+ {
+ DU_LOG("\nINFO --> F1AP: Sending UE Context Modification Request");
+ BuildAndSendUeContextModificationReq(duId, ueCb, MODIFY_UE);
+ }
}
}
return ret;
* RFAILED - failure
*
* ****************************************************************/
-uint8_t BuildAndSendUeContextModificationReq(uint32_t duId, void *cuUeCb)
+uint8_t BuildAndSendUeContextModificationReq(uint32_t duId, void *cuUeCb, UeCtxtModAction action)
{
uint8_t ieIdx = 0;
uint8_t elementCnt = 0;
ueContextModifyReq =&f1apMsg->choice.initiatingMessage->value.choice.UEContextModificationRequest;
- elementCnt = 4;
+ if(action == MODIFY_UE)
+ elementCnt = 4;
+ else if(action == QUERY_CONFIG)
+ elementCnt = 3;
ueContextModifyReq->protocolIEs.list.count = elementCnt;
ueContextModifyReq->protocolIEs.list.size = elementCnt*sizeof(UEContextModificationRequest_t *);
}
}
-
ieIdx=0;
ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
UEContextModificationRequestIEs__value_PR_GNB_DU_UE_F1AP_ID;
ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_DU_UE_F1AP_ID = ueCb->gnbDuUeF1apId;
- /* DRB to be setup list */
- ieIdx++;
- ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_ToBeSetupMod_List;
- ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
- ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present =\
- UEContextModificationRequestIEs__value_PR_DRBs_ToBeSetupMod_List;
- ret = BuildDrbToBeSetupList(ueCb->gnbCuUeF1apId, &(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\
- value.choice.DRBs_ToBeSetupMod_List));
-
- /* DRB to be modified list */
- ieIdx++;
- ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_ToBeModified_List;
- ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
- ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present =\
- UEContextModificationRequestIEs__value_PR_DRBs_ToBeModified_List;
- ret = BuildDrbToBeModifiedList(ueCb->gnbCuUeF1apId, &(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\
- value.choice.DRBs_ToBeModified_List));
-
- /* TODO: DRB to be release list */
-
- if(ret != ROK)
+ if(action == MODIFY_UE)
+ {
+ /* DRB to be setup list */
+ ieIdx++;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_ToBeSetupMod_List;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present =\
+ UEContextModificationRequestIEs__value_PR_DRBs_ToBeSetupMod_List;
+ ret = BuildDrbToBeSetupList(ueCb->gnbCuUeF1apId, &(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\
+ value.choice.DRBs_ToBeSetupMod_List));
+
+ /* DRB to be modified list */
+ ieIdx++;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_DRBs_ToBeModified_List;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present =\
+ UEContextModificationRequestIEs__value_PR_DRBs_ToBeModified_List;
+ ret = BuildDrbToBeModifiedList(ueCb->gnbCuUeF1apId, &(ueContextModifyReq->protocolIEs.list.array[ieIdx]->\
+ value.choice.DRBs_ToBeModified_List));
+
+ /* TODO: DRB to be release list */
+
+ if(ret != ROK)
+ {
+ break;
+ }
+ }
+ else if(action == QUERY_CONFIG)
{
- break;
+ ieIdx++;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->id = ProtocolIE_ID_id_GNB_DUConfigurationQuery;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->criticality = Criticality_reject;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.present = \
+ UEContextModificationRequestIEs__value_PR_GNB_DUConfigurationQuery;
+ ueContextModifyReq->protocolIEs.list.array[ieIdx]->value.choice.GNB_DUConfigurationQuery = GNB_DUConfigurationQuery_true;
}
+
xer_fprint(stdout, &asn_DEF_F1AP_PDU, f1apMsg);
/* Encode the F1SetupRequest type as APER */
* RFAILED - failure
*
* ****************************************************************/
-uint8_t procUeContextModificationResponse(F1AP_PDU_t *f1apMsg)
+uint8_t procUeContextModificationResponse(uint32_t duId, F1AP_PDU_t *f1apMsg)
{
uint8_t idx, duUeF1apId;
+ DuDb *duDb;
+ CuUeCb *ueCb;
UEContextModificationResponse_t *ueCtxtModRsp = NULLP;
+
+ duDb = getDuDb(duId);
ueCtxtModRsp = &f1apMsg->choice.successfulOutcome->value.choice.UEContextModificationResponse;
for(idx=0; idx < ueCtxtModRsp->protocolIEs.list.count; idx++)
case ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID:
{
duUeF1apId = ueCtxtModRsp->protocolIEs.list.array[idx]->value.choice.GNB_DU_UE_F1AP_ID;
+ ueCb = &duDb->ueCb[duUeF1apId-1];
+ if(ueCb->state == HANDOVER_IN_PROGRESS)
+ {
+ /* TODO : Next procedure i.e. UE context setup request to
+ * target DU should be triggerred here */
+ return ROK;
+ }
break;
}
case ProtocolIE_ID_id_DRBs_SetupMod_List:
}
}
}
+
return ROK;
}
case SuccessfulOutcome__value_PR_UEContextModificationResponse:
{
DU_LOG("\nINFO --> F1AP : UE Context Modification Response received");
- procUeContextModificationResponse(f1apMsg);
+ procUeContextModificationResponse(*duId, f1apMsg);
break;
}
case SuccessfulOutcome__value_PR_UEContextReleaseComplete: