Use F1 UE context setup/mod Response in stack
Similarly to the commit "Use F1 UE context setup/modif Request in stack", we do both UE context setup/modification response at once because of some functions that are shared by the MAC message handler.
This commit is contained in:
@@ -69,134 +69,16 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(sctp_assoc_t assoc_id, const f1ap_ue_contex
|
||||
|
||||
int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
||||
{
|
||||
MessageDef *msg_p;
|
||||
F1AP_UEContextSetupResponse_t *container;
|
||||
F1AP_UEContextSetupResponseIEs_t *ie;
|
||||
DevAssert(pdu);
|
||||
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_ue_context_setup_t *f1ap_ue_context_setup_resp = &F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
||||
container = &pdu->choice.successfulOutcome->value.choice.UEContextSetupResponse;
|
||||
int i;
|
||||
/* GNB_CU_UE_F1AP_ID */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true);
|
||||
f1ap_ue_context_setup_resp->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID;
|
||||
LOG_D(F1AP, "f1ap_ue_context_setup_resp->gNB_CU_ue_id is: %d \n", f1ap_ue_context_setup_resp->gNB_CU_ue_id);
|
||||
/* GNB_DU_UE_F1AP_ID */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
|
||||
f1ap_ue_context_setup_resp->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID;
|
||||
LOG_D(F1AP, "f1ap_ue_context_setup_resp->gNB_DU_ue_id is: %d \n", f1ap_ue_context_setup_resp->gNB_DU_ue_id);
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container, F1AP_ProtocolIE_ID_id_C_RNTI, false);
|
||||
if (ie) {
|
||||
f1ap_ue_context_setup_resp->crnti = calloc(1, sizeof(uint16_t));
|
||||
*f1ap_ue_context_setup_resp->crnti = ie->value.choice.C_RNTI;
|
||||
}
|
||||
|
||||
// DUtoCURRCInformation
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_DUtoCURRCInformation, true);
|
||||
|
||||
if (ie == NULL) {
|
||||
LOG_E(F1AP,"%s %d: ie is a NULL pointer \n",__FILE__,__LINE__);
|
||||
f1ap_ue_context_setup_resp_t resp = {0};
|
||||
if (!decode_ue_context_setup_resp(pdu, &resp)) {
|
||||
LOG_E(F1AP, "cannot decode F1 UE Context Setup Resp\n");
|
||||
free_ue_context_setup_resp(&resp);
|
||||
return -1;
|
||||
}
|
||||
|
||||
f1ap_ue_context_setup_resp->du_to_cu_rrc_information = (du_to_cu_rrc_information_t *)calloc(1,sizeof(du_to_cu_rrc_information_t));
|
||||
f1ap_ue_context_setup_resp->du_to_cu_rrc_information->cellGroupConfig = (uint8_t *)calloc(1,ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
||||
memcpy(f1ap_ue_context_setup_resp->du_to_cu_rrc_information->cellGroupConfig, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.buf, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
||||
f1ap_ue_context_setup_resp->du_to_cu_rrc_information->cellGroupConfig_length = ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size;
|
||||
// DRBs_Setup_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_DRBs_Setup_List, false);
|
||||
|
||||
if(ie!=NULL) {
|
||||
f1ap_ue_context_setup_resp->drbs_to_be_setup_length = ie->value.choice.DRBs_Setup_List.list.count;
|
||||
f1ap_ue_context_setup_resp->drbs_to_be_setup = calloc(f1ap_ue_context_setup_resp->drbs_to_be_setup_length,
|
||||
sizeof(f1ap_drb_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_setup_resp->drbs_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_setup\n");
|
||||
|
||||
for (i = 0; i < f1ap_ue_context_setup_resp->drbs_to_be_setup_length; ++i) {
|
||||
f1ap_drb_to_be_setup_t *drb_p = &f1ap_ue_context_setup_resp->drbs_to_be_setup[i];
|
||||
F1AP_DRBs_Setup_Item_t *drbs_setup_item_p;
|
||||
drbs_setup_item_p = &((F1AP_DRBs_Setup_ItemIEs_t *)ie->value.choice.DRBs_Setup_List.list.array[i])->value.choice.DRBs_Setup_Item;
|
||||
drb_p->drb_id = drbs_setup_item_p->dRBID;
|
||||
// TODO in the following, assume only one UP UL TNL is present.
|
||||
// this matches/assumes OAI CU/DU implementation, can be up to 2!
|
||||
drb_p->up_dl_tnl_length = 1;
|
||||
AssertFatal(drbs_setup_item_p->dLUPTNLInformation_ToBeSetup_List.list.count > 0,
|
||||
"no DL UP TNL Information in DRBs to be Setup list\n");
|
||||
F1AP_DLUPTNLInformation_ToBeSetup_Item_t *dl_up_tnl_info_p = (F1AP_DLUPTNLInformation_ToBeSetup_Item_t *)drbs_setup_item_p->dLUPTNLInformation_ToBeSetup_List.list.array[0];
|
||||
F1AP_GTPTunnel_t *dl_up_tnl0 = dl_up_tnl_info_p->dLUPTNLInformation.choice.gTPTunnel;
|
||||
BIT_STRING_TO_TRANSPORT_LAYER_ADDRESS_IPv4(&dl_up_tnl0->transportLayerAddress, drb_p->up_dl_tnl[0].tl_address);
|
||||
OCTET_STRING_TO_UINT32(&dl_up_tnl0->gTP_TEID, drb_p->up_dl_tnl[0].teid);
|
||||
}
|
||||
}
|
||||
|
||||
// SRBs_FailedToBeSetup_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List, false);
|
||||
|
||||
if(ie!=NULL) {
|
||||
f1ap_ue_context_setup_resp->srbs_failed_to_be_setup_length = ie->value.choice.SRBs_FailedToBeSetup_List.list.count;
|
||||
f1ap_ue_context_setup_resp->srbs_failed_to_be_setup = calloc(f1ap_ue_context_setup_resp->srbs_failed_to_be_setup_length,
|
||||
sizeof(f1ap_rb_failed_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_setup_resp->srbs_failed_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->srbs_failed_to_be_setup\n");
|
||||
|
||||
for (i = 0; i < f1ap_ue_context_setup_resp->srbs_failed_to_be_setup_length; ++i) {
|
||||
f1ap_rb_failed_to_be_setup_t *srb_p = &f1ap_ue_context_setup_resp->srbs_failed_to_be_setup[i];
|
||||
srb_p->rb_id = ((F1AP_SRBs_FailedToBeSetup_Item_t *)ie->value.choice.SRBs_FailedToBeSetup_List.list.array[i])->sRBID;
|
||||
}
|
||||
}
|
||||
|
||||
// DRBs_FailedToBeSetup_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_List, false);
|
||||
|
||||
if(ie!=NULL) {
|
||||
f1ap_ue_context_setup_resp->drbs_failed_to_be_setup_length = ie->value.choice.DRBs_FailedToBeSetup_List.list.count;
|
||||
f1ap_ue_context_setup_resp->drbs_failed_to_be_setup = calloc(f1ap_ue_context_setup_resp->drbs_failed_to_be_setup_length,
|
||||
sizeof(f1ap_rb_failed_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_setup_resp->drbs_failed_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_failed_to_be_setup\n");
|
||||
|
||||
for (i = 0; i < f1ap_ue_context_setup_resp->drbs_failed_to_be_setup_length; ++i) {
|
||||
f1ap_rb_failed_to_be_setup_t *drb_p = &f1ap_ue_context_setup_resp->drbs_failed_to_be_setup[i];
|
||||
drb_p->rb_id = ((F1AP_DRBs_FailedToBeSetup_Item_t *)ie->value.choice.DRBs_FailedToBeSetup_List.list.array[i])->dRBID;
|
||||
}
|
||||
}
|
||||
|
||||
// SCell_FailedtoSetup_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_List, false);
|
||||
|
||||
if(ie!=NULL) {
|
||||
LOG_E (F1AP, "Not supporting handling of SCell_FailedtoSetup_List \n");
|
||||
}
|
||||
|
||||
// SRBs_Setup_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_SRBs_Setup_List, false);
|
||||
|
||||
if(ie!=NULL) {
|
||||
f1ap_ue_context_setup_resp->srbs_to_be_setup_length = ie->value.choice.SRBs_Setup_List.list.count;
|
||||
f1ap_ue_context_setup_resp->srbs_to_be_setup = calloc(f1ap_ue_context_setup_resp->srbs_to_be_setup_length,
|
||||
sizeof(f1ap_srb_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_setup_resp->srbs_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_setup\n");
|
||||
|
||||
for (i = 0; i < f1ap_ue_context_setup_resp->srbs_to_be_setup_length; ++i) {
|
||||
f1ap_srb_to_be_setup_t *srb_p = &f1ap_ue_context_setup_resp->srbs_to_be_setup[i];
|
||||
F1AP_SRBs_Setup_Item_t *srbs_setup_item_p;
|
||||
srbs_setup_item_p = &((F1AP_SRBs_Setup_ItemIEs_t *)ie->value.choice.SRBs_Setup_List.list.array[i])->value.choice.SRBs_Setup_Item;
|
||||
srb_p->srb_id = srbs_setup_item_p->sRBID;
|
||||
srb_p->lcid = srbs_setup_item_p->lCID;
|
||||
}
|
||||
}
|
||||
|
||||
MessageDef *msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_SETUP_RESP);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
F1AP_UE_CONTEXT_SETUP_RESP(msg_p) = resp;
|
||||
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
|
||||
return 0;
|
||||
}
|
||||
@@ -407,123 +289,17 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, const f1ap_ue
|
||||
|
||||
int CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
||||
{
|
||||
MessageDef *msg_p;
|
||||
F1AP_UEContextModificationResponse_t *container;
|
||||
F1AP_UEContextModificationResponseIEs_t *ie;
|
||||
DevAssert(pdu);
|
||||
msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_MODIFICATION_RESP);
|
||||
f1ap_ue_context_mod_resp_t resp = {0};
|
||||
if (!decode_ue_context_mod_resp(pdu, &resp)) {
|
||||
LOG_E(F1AP, "cannot decode F1 UE Context Modification Response\n");
|
||||
free_ue_context_mod_resp(&resp);
|
||||
return -1;
|
||||
}
|
||||
MessageDef *msg_p = itti_alloc_new_message(TASK_DU_F1, 0, F1AP_UE_CONTEXT_MODIFICATION_RESP);
|
||||
msg_p->ittiMsgHeader.originInstance = assoc_id;
|
||||
f1ap_ue_context_modif_resp_t *f1ap_ue_context_modification_resp = &F1AP_UE_CONTEXT_MODIFICATION_RESP(msg_p);
|
||||
container = &pdu->choice.successfulOutcome->value.choice.UEContextModificationResponse;
|
||||
int i;
|
||||
|
||||
/* GNB_CU_UE_F1AP_ID */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true);
|
||||
f1ap_ue_context_modification_resp->gNB_CU_ue_id = ie->value.choice.GNB_CU_UE_F1AP_ID;
|
||||
|
||||
LOG_D(F1AP, "f1ap_ue_context_modif_resp->gNB_CU_ue_id is: %d \n", f1ap_ue_context_modification_resp->gNB_CU_ue_id);
|
||||
|
||||
/* GNB_DU_UE_F1AP_ID */
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
|
||||
f1ap_ue_context_modification_resp->gNB_DU_ue_id = ie->value.choice.GNB_DU_UE_F1AP_ID;
|
||||
|
||||
LOG_D(F1AP, "f1ap_ue_context_modification_resp->gNB_DU_ue_id is: %d \n", f1ap_ue_context_modification_resp->gNB_DU_ue_id);
|
||||
|
||||
// DUtoCURRCInformation
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_DUtoCURRCInformation, false);
|
||||
if(ie!=NULL){
|
||||
f1ap_ue_context_modification_resp->du_to_cu_rrc_information = (du_to_cu_rrc_information_t *)calloc(1, sizeof(du_to_cu_rrc_information_t));
|
||||
f1ap_ue_context_modification_resp->du_to_cu_rrc_information->cellGroupConfig = (uint8_t *)calloc(1,ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
||||
|
||||
memcpy(f1ap_ue_context_modification_resp->du_to_cu_rrc_information->cellGroupConfig, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.buf, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
||||
f1ap_ue_context_modification_resp->du_to_cu_rrc_information->cellGroupConfig_length = ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size;
|
||||
}
|
||||
|
||||
// DRBs_SetupMod_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_DRBs_SetupMod_List, false);
|
||||
if(ie!=NULL){
|
||||
f1ap_ue_context_modification_resp->drbs_to_be_setup_length = ie->value.choice.DRBs_SetupMod_List.list.count;
|
||||
f1ap_ue_context_modification_resp->drbs_to_be_setup = calloc(f1ap_ue_context_modification_resp->drbs_to_be_setup_length,
|
||||
sizeof(f1ap_drb_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_modification_resp->drbs_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_setup\n");
|
||||
for (i = 0; i < f1ap_ue_context_modification_resp->drbs_to_be_setup_length; ++i) {
|
||||
f1ap_drb_to_be_setup_t *drb_p = &f1ap_ue_context_modification_resp->drbs_to_be_setup[i];
|
||||
F1AP_DRBs_SetupMod_Item_t *drbs_setupmod_item_p;
|
||||
drbs_setupmod_item_p = &((F1AP_DRBs_SetupMod_ItemIEs_t *)ie->value.choice.DRBs_SetupMod_List.list.array[i])->value.choice.DRBs_SetupMod_Item;
|
||||
drb_p->drb_id = drbs_setupmod_item_p->dRBID;
|
||||
// TODO in the following, assume only one UP UL TNL is present.
|
||||
// this matches/assumes OAI CU/DU implementation, can be up to 2!
|
||||
drb_p->up_dl_tnl_length = 1;
|
||||
AssertFatal(drbs_setupmod_item_p->dLUPTNLInformation_ToBeSetup_List.list.count > 0,
|
||||
"no DL UP TNL Information in DRBs to be Setup list\n");
|
||||
F1AP_DLUPTNLInformation_ToBeSetup_Item_t *dl_up_tnl_info_p = (F1AP_DLUPTNLInformation_ToBeSetup_Item_t *)drbs_setupmod_item_p->dLUPTNLInformation_ToBeSetup_List.list.array[0];
|
||||
F1AP_GTPTunnel_t *dl_up_tnl0 = dl_up_tnl_info_p->dLUPTNLInformation.choice.gTPTunnel;
|
||||
BIT_STRING_TO_TRANSPORT_LAYER_ADDRESS_IPv4(&dl_up_tnl0->transportLayerAddress, drb_p->up_dl_tnl[0].tl_address);
|
||||
OCTET_STRING_TO_UINT32(&dl_up_tnl0->gTP_TEID, drb_p->up_dl_tnl[0].teid);
|
||||
}
|
||||
}
|
||||
// SRBs_FailedToBeSetupMod_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetupMod_List, false);
|
||||
if(ie!=NULL){
|
||||
f1ap_ue_context_modification_resp->srbs_failed_to_be_setup_length = ie->value.choice.SRBs_FailedToBeSetupMod_List.list.count;
|
||||
f1ap_ue_context_modification_resp->srbs_failed_to_be_setup = calloc(f1ap_ue_context_modification_resp->srbs_failed_to_be_setup_length,
|
||||
sizeof(f1ap_rb_failed_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_modification_resp->srbs_failed_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->srbs_failed_to_be_setup\n");
|
||||
for (i = 0; i < f1ap_ue_context_modification_resp->srbs_failed_to_be_setup_length; ++i) {
|
||||
f1ap_rb_failed_to_be_setup_t *srb_p = &f1ap_ue_context_modification_resp->srbs_failed_to_be_setup[i];
|
||||
srb_p->rb_id = ((F1AP_SRBs_FailedToBeSetupMod_Item_t *)ie->value.choice.SRBs_FailedToBeSetupMod_List.list.array[i])->sRBID;
|
||||
}
|
||||
|
||||
}
|
||||
// DRBs_FailedToBeSetupMod_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetupMod_List, false);
|
||||
if(ie!=NULL){
|
||||
f1ap_ue_context_modification_resp->drbs_failed_to_be_setup_length = ie->value.choice.DRBs_FailedToBeSetupMod_List.list.count;
|
||||
f1ap_ue_context_modification_resp->drbs_failed_to_be_setup = calloc(f1ap_ue_context_modification_resp->drbs_failed_to_be_setup_length,
|
||||
sizeof(f1ap_rb_failed_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_modification_resp->drbs_failed_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_failed_to_be_setup\n");
|
||||
for (i = 0; i < f1ap_ue_context_modification_resp->drbs_failed_to_be_setup_length; ++i) {
|
||||
f1ap_rb_failed_to_be_setup_t *drb_p = &f1ap_ue_context_modification_resp->drbs_failed_to_be_setup[i];
|
||||
drb_p->rb_id = ((F1AP_DRBs_FailedToBeSetupMod_Item_t *)ie->value.choice.DRBs_FailedToBeSetupMod_List.list.array[i])->dRBID;
|
||||
}
|
||||
}
|
||||
|
||||
// SCell_FailedtoSetupMod_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_SCell_FailedtoSetupMod_List, false);
|
||||
if(ie!=NULL){
|
||||
LOG_E (F1AP, "Not supporting handling of SCell_FailedtoSetupMod_List \n");
|
||||
}
|
||||
|
||||
// SRBs_Setup_List
|
||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextModificationResponseIEs_t, ie, container,
|
||||
F1AP_ProtocolIE_ID_id_SRBs_SetupMod_List, false);
|
||||
if(ie!=NULL){
|
||||
f1ap_ue_context_modification_resp->srbs_to_be_setup_length = ie->value.choice.SRBs_SetupMod_List.list.count;
|
||||
f1ap_ue_context_modification_resp->srbs_to_be_setup = calloc(f1ap_ue_context_modification_resp->srbs_to_be_setup_length,
|
||||
sizeof(f1ap_srb_to_be_setup_t));
|
||||
AssertFatal(f1ap_ue_context_modification_resp->srbs_to_be_setup,
|
||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_setup\n");
|
||||
for (i = 0; i < f1ap_ue_context_modification_resp->srbs_to_be_setup_length; ++i) {
|
||||
f1ap_srb_to_be_setup_t *srb_p = &f1ap_ue_context_modification_resp->srbs_to_be_setup[i];
|
||||
F1AP_SRBs_SetupMod_Item_t *srbs_setup_item_p;
|
||||
srbs_setup_item_p = &((F1AP_SRBs_SetupMod_ItemIEs_t *)ie->value.choice.SRBs_SetupMod_List.list.array[i])->value.choice.SRBs_SetupMod_Item;
|
||||
srb_p->srb_id = srbs_setup_item_p->sRBID;
|
||||
srb_p->lcid = srbs_setup_item_p->lCID;
|
||||
}
|
||||
}
|
||||
|
||||
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
|
||||
return 0;
|
||||
F1AP_UE_CONTEXT_MODIFICATION_RESP(msg_p) = resp;
|
||||
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CU_handle_UE_CONTEXT_MODIFICATION_FAILURE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
||||
|
||||
@@ -189,6 +189,7 @@ void *F1AP_DU_task(void *arg) {
|
||||
|
||||
case F1AP_UE_CONTEXT_SETUP_RESP:
|
||||
DU_send_UE_CONTEXT_SETUP_RESPONSE(assoc_id, &F1AP_UE_CONTEXT_SETUP_RESP(msg));
|
||||
free_ue_context_setup_resp(&F1AP_UE_CONTEXT_SETUP_RESP(msg));
|
||||
break;
|
||||
|
||||
case F1AP_UE_CONTEXT_MODIFICATION_RESP:
|
||||
|
||||
@@ -55,344 +55,19 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance, sctp_assoc_t assoc_i
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DU_send_UE_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_setup_t *resp)
|
||||
int DU_send_UE_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_setup_resp_t *resp)
|
||||
{
|
||||
F1AP_F1AP_PDU_t pdu= {0};
|
||||
F1AP_UEContextSetupResponse_t *out;
|
||||
uint8_t *buffer=NULL;
|
||||
uint32_t len=0;
|
||||
/* Create */
|
||||
/* 0. Message Type */
|
||||
pdu.present = F1AP_F1AP_PDU_PR_successfulOutcome;
|
||||
asn1cCalloc(pdu.choice.successfulOutcome, tmp);
|
||||
tmp->procedureCode = F1AP_ProcedureCode_id_UEContextSetup;
|
||||
tmp->criticality = F1AP_Criticality_reject;
|
||||
tmp->value.present = F1AP_SuccessfulOutcome__value_PR_UEContextSetupResponse;
|
||||
out = &tmp->value.choice.UEContextSetupResponse;
|
||||
/* mandatory */
|
||||
/* c1. GNB_CU_UE_F1AP_ID */
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie1);
|
||||
ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
|
||||
ie1->criticality = F1AP_Criticality_reject;
|
||||
ie1->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_CU_UE_F1AP_ID;
|
||||
ie1->value.choice.GNB_CU_UE_F1AP_ID = resp->gNB_CU_ue_id;
|
||||
/* mandatory */
|
||||
/* c2. GNB_DU_UE_F1AP_ID */
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie2);
|
||||
ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
|
||||
ie2->criticality = F1AP_Criticality_reject;
|
||||
ie2->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_DU_UE_F1AP_ID;
|
||||
ie2->value.choice.GNB_DU_UE_F1AP_ID = resp->gNB_DU_ue_id;
|
||||
F1AP_F1AP_PDU_t *pdu = encode_ue_context_setup_resp(resp);
|
||||
|
||||
/* mandatory */
|
||||
/* c3. DUtoCURRCInformation */
|
||||
if(resp->du_to_cu_rrc_information){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie3);
|
||||
ie3->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation;
|
||||
ie3->criticality = F1AP_Criticality_reject;
|
||||
ie3->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DUtoCURRCInformation;
|
||||
if(resp->du_to_cu_rrc_information->cellGroupConfig!=NULL){
|
||||
/* cellGroupConfig */
|
||||
OCTET_STRING_fromBuf(&ie3->value.choice.DUtoCURRCInformation.cellGroupConfig, (const char *)resp->du_to_cu_rrc_information->cellGroupConfig,
|
||||
resp->du_to_cu_rrc_information->cellGroupConfig_length);
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* measGapConfig */
|
||||
if (resp->du_to_cu_rrc_information->measGapConfig!=NULL) {
|
||||
OCTET_STRING_fromBuf(ie3->value.choice.DUtoCURRCInformation.measGapConfig, (const char *)resp->du_to_cu_rrc_information->measGapConfig,
|
||||
resp->du_to_cu_rrc_information->measGapConfig_length);
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* requestedP_MaxFR1 */
|
||||
if (resp->du_to_cu_rrc_information->requestedP_MaxFR1!=NULL) {
|
||||
OCTET_STRING_fromBuf(ie3->value.choice.DUtoCURRCInformation.requestedP_MaxFR1, (const char *)resp->du_to_cu_rrc_information->requestedP_MaxFR1,
|
||||
resp->du_to_cu_rrc_information->requestedP_MaxFR1_length);
|
||||
}
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c4. C_RNTI */
|
||||
if (resp->crnti!=NULL) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie4);
|
||||
ie4->id = F1AP_ProtocolIE_ID_id_C_RNTI;
|
||||
ie4->criticality = F1AP_Criticality_ignore;
|
||||
ie4->value.present = F1AP_UEContextSetupResponseIEs__value_PR_C_RNTI;
|
||||
ie4->value.choice.C_RNTI = *resp->crnti;
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c5. ResourceCoordinationTransferContainer */
|
||||
if (0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie5);
|
||||
ie5->id = F1AP_ProtocolIE_ID_id_ResourceCoordinationTransferContainer;
|
||||
ie5->criticality = F1AP_Criticality_ignore;
|
||||
ie5->value.present = F1AP_UEContextSetupResponseIEs__value_PR_ResourceCoordinationTransferContainer;
|
||||
OCTET_STRING_fromBuf(&ie5->value.choice.ResourceCoordinationTransferContainer, "asdsa",
|
||||
strlen("asdsa"));
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c6. FullConfiguration */
|
||||
if (0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie6);
|
||||
ie6->id = F1AP_ProtocolIE_ID_id_FullConfiguration;
|
||||
ie6->criticality = F1AP_Criticality_ignore;
|
||||
ie6->value.present = F1AP_UEContextSetupResponseIEs__value_PR_FullConfiguration;
|
||||
ie6->value.choice.FullConfiguration = F1AP_FullConfiguration_full; //enum
|
||||
}
|
||||
|
||||
/* mandatory */
|
||||
/* c7. DRBs_Setup_List */
|
||||
if(resp->drbs_to_be_setup_length > 0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie7);
|
||||
ie7->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_List;
|
||||
ie7->criticality = F1AP_Criticality_ignore;
|
||||
ie7->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_Setup_List;
|
||||
for (int i=0; i< resp->drbs_to_be_setup_length; i++) {
|
||||
f1ap_drb_to_be_setup_t *drb = &resp->drbs_to_be_setup[i];
|
||||
//
|
||||
asn1cSequenceAdd(ie7->value.choice.DRBs_Setup_List.list,
|
||||
F1AP_DRBs_Setup_ItemIEs_t, drbs_setup_item_ies);
|
||||
drbs_setup_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_Item;
|
||||
drbs_setup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
drbs_setup_item_ies->value.present = F1AP_DRBs_Setup_ItemIEs__value_PR_DRBs_Setup_Item;
|
||||
/* 7.1 DRBs_Setup_Item */
|
||||
/* ADD */
|
||||
F1AP_DRBs_Setup_Item_t *drbs_setup_item=&drbs_setup_item_ies->value.choice.DRBs_Setup_Item;
|
||||
/* dRBID */
|
||||
drbs_setup_item->dRBID = drb->drb_id;
|
||||
|
||||
/* OPTIONAL */
|
||||
/* lCID */
|
||||
//drbs_setup_item.lCID = (F1AP_LCID_t *)calloc(1, sizeof(F1AP_LCID_t));
|
||||
//drbs_setup_item.lCID = 1L;
|
||||
|
||||
for (int j = 0; j < drb->up_dl_tnl_length; j++) {
|
||||
const f1ap_up_tnl_t *tnl = &drb->up_dl_tnl[j];
|
||||
DevAssert(tnl->teid > 0);
|
||||
|
||||
/* ADD */
|
||||
asn1cSequenceAdd(drbs_setup_item->dLUPTNLInformation_ToBeSetup_List.list,
|
||||
F1AP_DLUPTNLInformation_ToBeSetup_Item_t, dLUPTNLInformation_ToBeSetup_Item);
|
||||
dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.present = F1AP_UPTransportLayerInformation_PR_gTPTunnel;
|
||||
/* gTPTunnel */
|
||||
asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.choice.gTPTunnel,gTPTunnel);
|
||||
/* transportLayerAddress */
|
||||
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(tnl->tl_address, &gTPTunnel->transportLayerAddress);
|
||||
/* gTP_TEID */
|
||||
INT32_TO_OCTET_STRING(tnl->teid, &gTPTunnel->gTP_TEID);
|
||||
} // for j
|
||||
} // for i
|
||||
|
||||
}
|
||||
|
||||
/* mandatory */
|
||||
/* c8. SRBs_FailedToBeSetup_List */
|
||||
if(0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie8);
|
||||
ie8->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List;
|
||||
ie8->criticality = F1AP_Criticality_ignore;
|
||||
ie8->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_FailedToBeSetup_List;
|
||||
|
||||
for (int i=0; i<1; i++) {
|
||||
//
|
||||
asn1cSequenceAdd(ie8->value.choice.SRBs_FailedToBeSetup_List.list,
|
||||
F1AP_SRBs_FailedToBeSetup_ItemIEs_t, srbs_failedToBeSetup_item_ies);
|
||||
srbs_failedToBeSetup_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_Item;
|
||||
srbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
srbs_failedToBeSetup_item_ies->value.present = F1AP_SRBs_FailedToBeSetup_ItemIEs__value_PR_SRBs_FailedToBeSetup_Item;
|
||||
/* 8.1 SRBs_Setup_Item */
|
||||
F1AP_SRBs_FailedToBeSetup_Item_t *srbs_failedToBeSetup_item=
|
||||
&srbs_failedToBeSetup_item_ies->value.choice.SRBs_FailedToBeSetup_Item;
|
||||
/* sRBID */
|
||||
srbs_failedToBeSetup_item->sRBID = 13L;
|
||||
/* cause */
|
||||
asn1cCalloc(srbs_failedToBeSetup_item->cause, tmp);
|
||||
// dummy value
|
||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||
|
||||
switch(tmp->present) {
|
||||
case F1AP_Cause_PR_radioNetwork:
|
||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_transport:
|
||||
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_protocol:
|
||||
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_misc:
|
||||
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_NOTHING:
|
||||
default:
|
||||
break;
|
||||
} // switch
|
||||
} // for i
|
||||
}
|
||||
|
||||
/* */
|
||||
/* c9. DRBs_FailedToBeSetup_List */
|
||||
if(0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie9);
|
||||
ie9->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_List;
|
||||
ie9->criticality = F1AP_Criticality_ignore;
|
||||
ie9->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_FailedToBeSetup_List;
|
||||
|
||||
for (int i=0; i<1; i++) {
|
||||
asn1cSequenceAdd(ie9->value.choice.DRBs_FailedToBeSetup_List.list,
|
||||
F1AP_DRBs_FailedToBeSetup_ItemIEs_t, drbs_failedToBeSetup_item_ies);
|
||||
drbs_failedToBeSetup_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_Item;
|
||||
drbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
drbs_failedToBeSetup_item_ies->value.present = F1AP_DRBs_FailedToBeSetup_ItemIEs__value_PR_DRBs_FailedToBeSetup_Item;
|
||||
/* 9.1 DRBs_Setup_Item */
|
||||
/* ADD */
|
||||
F1AP_DRBs_FailedToBeSetup_Item_t *drbs_failedToBeSetup_item=
|
||||
&drbs_failedToBeSetup_item_ies->value.choice.DRBs_FailedToBeSetup_Item;
|
||||
/* dRBID */
|
||||
drbs_failedToBeSetup_item->dRBID = 14;
|
||||
/* cause */
|
||||
asn1cCalloc(drbs_failedToBeSetup_item->cause,tmp);
|
||||
// dummy value
|
||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||
|
||||
switch(tmp->present) {
|
||||
case F1AP_Cause_PR_radioNetwork:
|
||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_transport:
|
||||
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_protocol:
|
||||
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_misc:
|
||||
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_NOTHING:
|
||||
default:
|
||||
break;
|
||||
} // switch
|
||||
} // for i
|
||||
}
|
||||
|
||||
// /* */
|
||||
/* c10. SCell_FailedtoSetup_List */
|
||||
if(0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie10);
|
||||
ie10->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_List;
|
||||
ie10->criticality = F1AP_Criticality_ignore;
|
||||
ie10->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SCell_FailedtoSetup_List;
|
||||
|
||||
for (int i=0; i<1; i++) {
|
||||
asn1cSequenceAdd(ie10->value.choice.SCell_FailedtoSetup_List.list,
|
||||
F1AP_SCell_FailedtoSetup_ItemIEs_t, sCell_FailedtoSetup_item_ies);
|
||||
sCell_FailedtoSetup_item_ies->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_Item;
|
||||
sCell_FailedtoSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
sCell_FailedtoSetup_item_ies->value.present = F1AP_SCell_FailedtoSetup_ItemIEs__value_PR_SCell_FailedtoSetup_Item;
|
||||
/* 10.1 DRBs_Setup_Item */
|
||||
F1AP_SCell_FailedtoSetup_Item_t *sCell_FailedtoSetup_item=
|
||||
&sCell_FailedtoSetup_item_ies->value.choice.SCell_FailedtoSetup_Item;
|
||||
/* sCell_ID */
|
||||
AssertFatal(false, "handle correct CellID\n");
|
||||
f1ap_served_cell_info_t cellID = {0};
|
||||
addnRCGI(sCell_FailedtoSetup_item->sCell_ID, &cellID);
|
||||
/* cause */
|
||||
asn1cCalloc(sCell_FailedtoSetup_item->cause, tmp);
|
||||
// dummy value
|
||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||
|
||||
switch(tmp->present) {
|
||||
case F1AP_Cause_PR_radioNetwork:
|
||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_transport:
|
||||
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_protocol:
|
||||
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_misc:
|
||||
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
||||
break;
|
||||
|
||||
case F1AP_Cause_PR_NOTHING:
|
||||
default:
|
||||
break;
|
||||
} // switch
|
||||
} // for i
|
||||
}
|
||||
|
||||
/* mandatory */
|
||||
/* c11. SRBs_Setup_List */
|
||||
if(resp->srbs_to_be_setup_length > 0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie11);
|
||||
ie11->id = F1AP_ProtocolIE_ID_id_SRBs_Setup_List;
|
||||
ie11->criticality = F1AP_Criticality_ignore;
|
||||
ie11->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_Setup_List;
|
||||
|
||||
for (int i=0; i< resp->srbs_to_be_setup_length; i++) {//
|
||||
asn1cSequenceAdd(ie11->value.choice.SRBs_Setup_List.list,
|
||||
F1AP_SRBs_Setup_ItemIEs_t, srbs_setup_item_ies);
|
||||
srbs_setup_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_Setup_Item;
|
||||
srbs_setup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
srbs_setup_item_ies->value.present = F1AP_SRBs_Setup_ItemIEs__value_PR_SRBs_Setup_Item;
|
||||
/* 11.1 SRBs_Setup_Item */
|
||||
/* ADD */
|
||||
F1AP_SRBs_Setup_Item_t *srbs_setup_item=&srbs_setup_item_ies->value.choice.SRBs_Setup_Item;
|
||||
/* sRBID */
|
||||
srbs_setup_item->sRBID = resp->srbs_to_be_setup[i].srb_id;
|
||||
srbs_setup_item->lCID = resp->srbs_to_be_setup[i].lcid;
|
||||
}
|
||||
}
|
||||
|
||||
/* Optional */
|
||||
/* c12. InactivityMonitoringResponse */
|
||||
if (0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie11);
|
||||
ie11->id = F1AP_ProtocolIE_ID_id_InactivityMonitoringResponse;
|
||||
ie11->criticality = F1AP_Criticality_ignore;
|
||||
ie11->value.present = F1AP_UEContextSetupResponseIEs__value_PR_InactivityMonitoringResponse;
|
||||
ie11->value.choice.InactivityMonitoringResponse = F1AP_InactivityMonitoringResponse_not_supported;
|
||||
}
|
||||
|
||||
/* Optional */
|
||||
/* c13. CriticalityDiagnostics */
|
||||
if (0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie12);
|
||||
ie12->id = F1AP_ProtocolIE_ID_id_CriticalityDiagnostics;
|
||||
ie12->criticality = F1AP_Criticality_ignore;
|
||||
ie12->value.present = F1AP_UEContextSetupResponseIEs__value_PR_CriticalityDiagnostics;
|
||||
asn1cCallocOne(ie12->value.choice.CriticalityDiagnostics.procedureCode,
|
||||
F1AP_ProcedureCode_id_UEContextSetup);
|
||||
asn1cCallocOne(ie12->value.choice.CriticalityDiagnostics.triggeringMessage,
|
||||
F1AP_TriggeringMessage_initiating_message);
|
||||
asn1cCallocOne(ie12->value.choice.CriticalityDiagnostics.procedureCriticality,
|
||||
F1AP_Criticality_reject);
|
||||
asn1cCallocOne(ie12->value.choice.CriticalityDiagnostics.transactionID,
|
||||
0);
|
||||
}
|
||||
|
||||
/* encode */
|
||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
uint8_t *buffer = NULL;
|
||||
uint32_t len = 0;
|
||||
if (f1ap_encode_pdu(pdu, &buffer, &len) < 0) {
|
||||
LOG_E(F1AP, "Failed to encode F1 UE CONTEXT SETUP RESPONSE\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
|
||||
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -635,325 +310,18 @@ int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, sctp_assoc_t
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_modif_resp_t *resp)
|
||||
int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_mod_resp_t *resp)
|
||||
{
|
||||
F1AP_F1AP_PDU_t pdu= {0};
|
||||
F1AP_UEContextModificationResponse_t *out;
|
||||
uint8_t *buffer=NULL;
|
||||
uint32_t len=0;
|
||||
/* Create */
|
||||
/* 0. Message Type */
|
||||
pdu.present = F1AP_F1AP_PDU_PR_successfulOutcome;
|
||||
asn1cCalloc(pdu.choice.successfulOutcome,tmp);
|
||||
tmp->procedureCode = F1AP_ProcedureCode_id_UEContextModification;
|
||||
tmp->criticality = F1AP_Criticality_reject;
|
||||
tmp->value.present = F1AP_SuccessfulOutcome__value_PR_UEContextModificationResponse;
|
||||
out = &tmp->value.choice.UEContextModificationResponse;
|
||||
/* mandatory */
|
||||
/* c1. GNB_CU_UE_F1AP_ID */
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie1);
|
||||
ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
|
||||
ie1->criticality = F1AP_Criticality_reject;
|
||||
ie1->value.present = F1AP_UEContextModificationResponseIEs__value_PR_GNB_CU_UE_F1AP_ID;
|
||||
ie1->value.choice.GNB_CU_UE_F1AP_ID = resp->gNB_CU_ue_id;
|
||||
/* mandatory */
|
||||
/* c2. GNB_DU_UE_F1AP_ID */
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie2);
|
||||
ie2->id = F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID;
|
||||
ie2->criticality = F1AP_Criticality_reject;
|
||||
ie2->value.present = F1AP_UEContextModificationResponseIEs__value_PR_GNB_DU_UE_F1AP_ID;
|
||||
ie2->value.choice.GNB_DU_UE_F1AP_ID = resp->gNB_DU_ue_id;
|
||||
F1AP_F1AP_PDU_t *pdu = encode_ue_context_mod_resp(resp);
|
||||
|
||||
/* optional */
|
||||
/* c3. ResourceCoordinationTransferContainer */
|
||||
if (0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie3);
|
||||
ie3->id = F1AP_ProtocolIE_ID_id_ResourceCoordinationTransferContainer;
|
||||
ie3->criticality = F1AP_Criticality_ignore;
|
||||
ie3->value.present = F1AP_UEContextModificationResponseIEs__value_PR_ResourceCoordinationTransferContainer;
|
||||
OCTET_STRING_fromBuf(&ie3->value.choice.ResourceCoordinationTransferContainer, "asdsa1d32sa1d31asd31as",
|
||||
strlen("asdsa1d32sa1d31asd31as"));
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c4. DUtoCURRCInformation */
|
||||
if(resp->du_to_cu_rrc_information!=NULL){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie4);
|
||||
ie4->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation;
|
||||
ie4->criticality = F1AP_Criticality_reject;
|
||||
ie4->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DUtoCURRCInformation;
|
||||
if(resp->du_to_cu_rrc_information->cellGroupConfig!=NULL){
|
||||
/* cellGroupConfig */
|
||||
OCTET_STRING_fromBuf(&ie4->value.choice.DUtoCURRCInformation.cellGroupConfig, (const char *)resp->du_to_cu_rrc_information->cellGroupConfig,
|
||||
resp->du_to_cu_rrc_information->cellGroupConfig_length);
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* measGapConfig */
|
||||
if (resp->du_to_cu_rrc_information->measGapConfig!=NULL) {
|
||||
OCTET_STRING_fromBuf(ie4->value.choice.DUtoCURRCInformation.measGapConfig, (const char *)resp->du_to_cu_rrc_information->measGapConfig,
|
||||
resp->du_to_cu_rrc_information->measGapConfig_length);
|
||||
}
|
||||
|
||||
/* OPTIONAL */
|
||||
/* requestedP_MaxFR1 */
|
||||
if (resp->du_to_cu_rrc_information->requestedP_MaxFR1!=NULL) {
|
||||
OCTET_STRING_fromBuf(ie4->value.choice.DUtoCURRCInformation.requestedP_MaxFR1, (const char *)resp->du_to_cu_rrc_information->requestedP_MaxFR1,
|
||||
resp->du_to_cu_rrc_information->requestedP_MaxFR1_length);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* optional */
|
||||
/* c5. DRBs_Setup_List */
|
||||
if(resp->drbs_to_be_setup_length > 0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie5);
|
||||
ie5->id = F1AP_ProtocolIE_ID_id_DRBs_SetupMod_List;
|
||||
ie5->criticality = F1AP_Criticality_ignore;
|
||||
ie5->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DRBs_SetupMod_List;
|
||||
for (int i=0; i< resp->drbs_to_be_setup_length; i++) {
|
||||
asn1cSequenceAdd(ie5->value.choice.DRBs_SetupMod_List.list, F1AP_DRBs_SetupMod_ItemIEs_t, drbs_setupmod_item_ies);
|
||||
drbs_setupmod_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_SetupMod_Item;
|
||||
drbs_setupmod_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
drbs_setupmod_item_ies->value.present = F1AP_DRBs_SetupMod_ItemIEs__value_PR_DRBs_SetupMod_Item;
|
||||
/* 7.1 DRBs_Setup_Item */
|
||||
/* ADD */
|
||||
F1AP_DRBs_SetupMod_Item_t *drbs_setupmod_item=&drbs_setupmod_item_ies->value.choice.DRBs_SetupMod_Item;
|
||||
/* dRBID */
|
||||
drbs_setupmod_item->dRBID = resp->drbs_to_be_setup[i].drb_id;
|
||||
|
||||
for (int j=0; j<resp->drbs_to_be_setup[i].up_dl_tnl_length; j++) {
|
||||
const f1ap_up_tnl_t *tnl = &resp->drbs_to_be_setup[i].up_dl_tnl[j];
|
||||
DevAssert(tnl->teid > 0);
|
||||
|
||||
/* ADD */
|
||||
asn1cSequenceAdd(drbs_setupmod_item->dLUPTNLInformation_ToBeSetup_List.list,
|
||||
F1AP_DLUPTNLInformation_ToBeSetup_Item_t, dLUPTNLInformation_ToBeSetup_Item);
|
||||
dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.present = F1AP_UPTransportLayerInformation_PR_gTPTunnel;
|
||||
/* gTPTunnel */
|
||||
asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.choice.gTPTunnel,gTPTunnel);
|
||||
/* transportLayerAddress */
|
||||
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(tnl->tl_address, &gTPTunnel->transportLayerAddress);
|
||||
/* gTP_TEID */
|
||||
INT32_TO_OCTET_STRING(tnl->teid, &gTPTunnel->gTP_TEID);
|
||||
} // for j
|
||||
} // for i
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c6. DRBs_Modified_List */
|
||||
if(resp->drbs_to_be_modified_length > 0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie6);
|
||||
ie6->id = F1AP_ProtocolIE_ID_id_DRBs_Modified_List;
|
||||
ie6->criticality = F1AP_Criticality_ignore;
|
||||
ie6->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DRBs_Modified_List;
|
||||
|
||||
for (int i=0; i<resp->drbs_to_be_modified_length; i++) {
|
||||
asn1cSequenceAdd(ie6->value.choice.DRBs_Modified_List.list,
|
||||
F1AP_DRBs_Modified_ItemIEs_t, drbs_modified_item_ies);
|
||||
drbs_modified_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_Modified_Item;
|
||||
drbs_modified_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
drbs_modified_item_ies->value.present = F1AP_DRBs_Modified_ItemIEs__value_PR_DRBs_Modified_Item;
|
||||
/* DRBs_modified_Item */
|
||||
F1AP_DRBs_Modified_Item_t *drbs_modified_item= &drbs_modified_item_ies->value.choice.DRBs_Modified_Item;
|
||||
/* dRBID */
|
||||
drbs_modified_item->dRBID = resp->drbs_to_be_modified[i].drb_id;
|
||||
|
||||
/* ULTunnels_Modified_List */
|
||||
for (int j=0; j<resp->drbs_to_be_modified[i].up_dl_tnl_length; j++) {
|
||||
/* DLTunnels_Modified_Item */
|
||||
asn1cSequenceAdd(drbs_modified_item->dLUPTNLInformation_ToBeSetup_List.list,
|
||||
F1AP_DLUPTNLInformation_ToBeSetup_Item_t, dLUPTNLInformation_ToBeSetup_Item);
|
||||
asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item, tmp);
|
||||
tmp->dLUPTNLInformation.present = F1AP_UPTransportLayerInformation_PR_gTPTunnel;
|
||||
asn1cCalloc(dLUPTNLInformation_ToBeSetup_Item->dLUPTNLInformation.choice.gTPTunnel, gTPTunnel);
|
||||
/* transportLayerAddress */
|
||||
struct sockaddr_in addr= {0};
|
||||
inet_pton(AF_INET, getCxt(0)->net_config.DU_f1u_ip_address, &addr.sin_addr.s_addr);
|
||||
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(addr.sin_addr.s_addr, &gTPTunnel->transportLayerAddress);
|
||||
/* gTP_TEID */
|
||||
INT32_TO_OCTET_STRING(resp->drbs_to_be_modified[i].up_dl_tnl[j].teid, &gTPTunnel->gTP_TEID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c7. SRBs_FailedToBeSetupMod_List */
|
||||
if(resp->srbs_failed_to_be_setup_length > 0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie7);
|
||||
ie7->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetupMod_List;
|
||||
ie7->criticality = F1AP_Criticality_reject;
|
||||
ie7->value.present = F1AP_UEContextModificationResponseIEs__value_PR_SRBs_FailedToBeSetupMod_List;
|
||||
|
||||
for (int i=0; i<resp->srbs_to_be_setup_length; i++) {
|
||||
asn1cSequenceAdd(ie7->value.choice.SRBs_FailedToBeSetupMod_List.list,
|
||||
F1AP_SRBs_FailedToBeSetupMod_ItemIEs_t, srbs_failedToBeSetupMod_item_ies);
|
||||
srbs_failedToBeSetupMod_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetupMod_Item;
|
||||
srbs_failedToBeSetupMod_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
srbs_failedToBeSetupMod_item_ies->value.present = F1AP_SRBs_FailedToBeSetupMod_ItemIEs__value_PR_SRBs_FailedToBeSetupMod_Item;
|
||||
/* 9.1 SRBs_FailedToBeSetupMod_Item */
|
||||
F1AP_SRBs_FailedToBeSetupMod_Item_t *srbs_failedToBeSetupMod_item=
|
||||
&srbs_failedToBeSetupMod_item_ies->value.choice.SRBs_FailedToBeSetupMod_Item;
|
||||
/* - sRBID */
|
||||
srbs_failedToBeSetupMod_item->sRBID = resp->srbs_failed_to_be_setup[i].rb_id;
|
||||
asn1cCalloc(srbs_failedToBeSetupMod_item->cause, tmp);
|
||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
}
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c8. DRBs_FailedToBeSetupMod_List */
|
||||
if(resp->drbs_failed_to_be_setup_length > 0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie8);
|
||||
ie8->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetupMod_List;
|
||||
ie8->criticality = F1AP_Criticality_reject;
|
||||
ie8->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DRBs_FailedToBeSetupMod_List;
|
||||
|
||||
for (int i=0; i<resp->drbs_failed_to_be_setup_length; i++) {
|
||||
asn1cSequenceAdd(ie8->value.choice.DRBs_FailedToBeSetupMod_List.list,
|
||||
F1AP_DRBs_FailedToBeSetupMod_ItemIEs_t, drbs_failedToBeSetupMod_item_ies);
|
||||
drbs_failedToBeSetupMod_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetupMod_Item;
|
||||
drbs_failedToBeSetupMod_item_ies->criticality = F1AP_Criticality_reject;
|
||||
drbs_failedToBeSetupMod_item_ies->value.present = F1AP_DRBs_FailedToBeSetupMod_ItemIEs__value_PR_DRBs_FailedToBeSetupMod_Item;
|
||||
/* DRBs_FailedToBeSetupMod_Item */
|
||||
F1AP_DRBs_FailedToBeSetupMod_Item_t *drbs_failedToBeSetupMod_item=
|
||||
&drbs_failedToBeSetupMod_item_ies->value.choice.DRBs_FailedToBeSetupMod_Item;
|
||||
/* dRBID */
|
||||
drbs_failedToBeSetupMod_item->dRBID = resp->drbs_failed_to_be_setup[i].rb_id;
|
||||
drbs_failedToBeSetupMod_item->cause = (F1AP_Cause_t *)calloc(1, sizeof(F1AP_Cause_t));
|
||||
drbs_failedToBeSetupMod_item->cause->present = F1AP_Cause_PR_radioNetwork;
|
||||
drbs_failedToBeSetupMod_item->cause->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
}
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c9. SCell_FailedtoSetupMod_List */
|
||||
if(0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie9);
|
||||
ie9->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetupMod_List;
|
||||
ie9->criticality = F1AP_Criticality_ignore;
|
||||
ie9->value.present = F1AP_UEContextModificationResponseIEs__value_PR_SCell_FailedtoSetupMod_List;
|
||||
|
||||
for (int i=0; i<1; i++) {
|
||||
asn1cSequenceAdd(ie9->value.choice.SCell_FailedtoSetupMod_List.list,
|
||||
F1AP_SCell_FailedtoSetupMod_ItemIEs_t, scell_failedtoSetupMod_item_ies);
|
||||
scell_failedtoSetupMod_item_ies->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetupMod_Item;
|
||||
scell_failedtoSetupMod_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
scell_failedtoSetupMod_item_ies->value.present = F1AP_SCell_FailedtoSetupMod_ItemIEs__value_PR_SCell_FailedtoSetupMod_Item;
|
||||
/* 8.1 SCell_ToBeSetup_Item */
|
||||
F1AP_SCell_FailedtoSetupMod_Item_t *scell_failedtoSetupMod_item=&scell_failedtoSetupMod_item_ies->value.choice.SCell_FailedtoSetupMod_Item;
|
||||
/* - sCell_ID */
|
||||
addnRCGI(scell_failedtoSetupMod_item->sCell_ID, &getCxt(0)->setupReq.cell[i].info);
|
||||
asn1cCalloc(scell_failedtoSetupMod_item->cause, tmp);
|
||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
}
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* c10. DRBs_FailedToBeModified_List */
|
||||
if(0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie10);
|
||||
ie10->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeModified_List;
|
||||
ie10->criticality = F1AP_Criticality_reject;
|
||||
ie10->value.present = F1AP_UEContextModificationResponseIEs__value_PR_DRBs_FailedToBeModified_List;
|
||||
|
||||
for (int i=0; i<1; i++) {
|
||||
asn1cSequenceAdd(ie10->value.choice.DRBs_FailedToBeModified_List.list,
|
||||
F1AP_DRBs_FailedToBeModified_ItemIEs_t, drbs_failedToBeModified_item_ies);
|
||||
drbs_failedToBeModified_item_ies->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeModified_Item;
|
||||
drbs_failedToBeModified_item_ies->criticality = F1AP_Criticality_reject;
|
||||
drbs_failedToBeModified_item_ies->value.present = F1AP_DRBs_FailedToBeModified_ItemIEs__value_PR_DRBs_FailedToBeModified_Item;
|
||||
/* 13.1 DRBs_FailedToBeModified_Item */
|
||||
F1AP_DRBs_FailedToBeModified_Item_t *drbs_failedToBeModified_item=
|
||||
&drbs_failedToBeModified_item_ies->value.choice.DRBs_FailedToBeModified_Item ;
|
||||
/* dRBID */
|
||||
drbs_failedToBeModified_item->dRBID = 30L;
|
||||
asn1cCalloc(drbs_failedToBeModified_item->cause, tmp);
|
||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unknown_or_already_allocated_gnb_du_ue_f1ap_id;
|
||||
}
|
||||
}
|
||||
|
||||
// /* */
|
||||
/* c11. CriticalityDiagnostics */
|
||||
if (0) {
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie11);
|
||||
ie11->id = F1AP_ProtocolIE_ID_id_CriticalityDiagnostics;
|
||||
ie11->criticality = F1AP_Criticality_ignore;
|
||||
ie11->value.present = F1AP_UEContextModificationResponseIEs__value_PR_CriticalityDiagnostics;
|
||||
|
||||
// dummy value
|
||||
/* optional */
|
||||
/* procedureCode */
|
||||
if (0) {
|
||||
ie11->value.choice.CriticalityDiagnostics.procedureCode = (F1AP_ProcedureCode_t *)calloc(1, sizeof(F1AP_ProcedureCode_t));
|
||||
*ie11->value.choice.CriticalityDiagnostics.procedureCode = 0L;
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* triggeringMessage */
|
||||
if (0) {
|
||||
ie11->value.choice.CriticalityDiagnostics.triggeringMessage = (F1AP_TriggeringMessage_t *)calloc(1, sizeof(F1AP_TriggeringMessage_t));
|
||||
*ie11->value.choice.CriticalityDiagnostics.triggeringMessage = F1AP_TriggeringMessage_successful_outcome;
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* procedureCriticality */
|
||||
if (0) {
|
||||
ie11->value.choice.CriticalityDiagnostics.procedureCriticality = (F1AP_Criticality_t *)calloc(1, sizeof(F1AP_Criticality_t));
|
||||
*ie11->value.choice.CriticalityDiagnostics.procedureCriticality = F1AP_Criticality_reject;
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* transactionID */
|
||||
if (0) {
|
||||
ie11->value.choice.CriticalityDiagnostics.transactionID = (F1AP_TransactionID_t *)calloc(1, sizeof(F1AP_TransactionID_t));
|
||||
*ie11->value.choice.CriticalityDiagnostics.transactionID = 0L;
|
||||
}
|
||||
|
||||
/* optional */
|
||||
/* F1AP_CriticalityDiagnostics_IE_List */
|
||||
if (0) {
|
||||
for (int i=0; i<0; i++) {
|
||||
asn1cSequenceAdd(ie11->value.choice.CriticalityDiagnostics.iEsCriticalityDiagnostics->list, F1AP_CriticalityDiagnostics_IE_Item_t, criticalityDiagnostics_ie_item);
|
||||
criticalityDiagnostics_ie_item->iECriticality = F1AP_Criticality_reject;
|
||||
criticalityDiagnostics_ie_item->iE_ID = 0L;
|
||||
criticalityDiagnostics_ie_item->typeOfError = F1AP_TypeOfError_not_understood;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* optional */
|
||||
/* c12. SRBs_Setup_List */
|
||||
if(resp->srbs_to_be_setup_length > 0){
|
||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextModificationResponseIEs_t, ie12);
|
||||
ie12->id = F1AP_ProtocolIE_ID_id_SRBs_SetupMod_List;
|
||||
ie12->criticality = F1AP_Criticality_ignore;
|
||||
ie12->value.present = F1AP_UEContextModificationResponseIEs__value_PR_SRBs_SetupMod_List;
|
||||
|
||||
for (int i=0; i< resp->srbs_to_be_setup_length; i++) {//
|
||||
asn1cSequenceAdd(ie12->value.choice.SRBs_SetupMod_List.list,
|
||||
F1AP_SRBs_SetupMod_ItemIEs_t, srbs_setupmod_item_ies);
|
||||
srbs_setupmod_item_ies->id = F1AP_ProtocolIE_ID_id_SRBs_SetupMod_Item;
|
||||
srbs_setupmod_item_ies->criticality = F1AP_Criticality_ignore;
|
||||
srbs_setupmod_item_ies->value.present = F1AP_SRBs_SetupMod_ItemIEs__value_PR_SRBs_SetupMod_Item;
|
||||
/* 11.1 SRBs_Setup_Item */
|
||||
/* ADD */
|
||||
F1AP_SRBs_SetupMod_Item_t *srbs_setupmod_item=&srbs_setupmod_item_ies->value.choice.SRBs_SetupMod_Item;
|
||||
/* sRBID */
|
||||
srbs_setupmod_item->sRBID = resp->srbs_to_be_setup[i].srb_id;
|
||||
srbs_setupmod_item->lCID = resp->srbs_to_be_setup[i].srb_id;
|
||||
}
|
||||
}
|
||||
|
||||
/* encode */
|
||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
||||
LOG_E(F1AP, "Failed to encode F1 UE CONTEXT MODIFICATION RESPONSE\n");
|
||||
uint8_t *buffer = NULL;
|
||||
uint32_t len = 0;
|
||||
if (f1ap_encode_pdu(pdu, &buffer, &len) < 0) {
|
||||
LOG_E(F1AP, "Failed to encode F1 UE CONTEXT SETUP RESPONSE\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
|
||||
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
/*
|
||||
* UE Context Setup
|
||||
*/
|
||||
int DU_send_UE_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_setup_t *req);
|
||||
int DU_send_UE_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_setup_resp_t *resp);
|
||||
|
||||
int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu);
|
||||
int DU_send_UE_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id);
|
||||
@@ -63,7 +63,7 @@ int DU_send_UE_CONTEXT_RELEASE_COMPLETE(sctp_assoc_t assoc_id, f1ap_ue_context_r
|
||||
* UE Context Modification (gNB-CU initiated)
|
||||
*/
|
||||
int DU_handle_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu);
|
||||
int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_modif_resp_t *resp);
|
||||
int DU_send_UE_CONTEXT_MODIFICATION_RESPONSE(sctp_assoc_t assoc_id, f1ap_ue_context_mod_resp_t *resp);
|
||||
int DU_send_UE_CONTEXT_MODIFICATION_FAILURE(sctp_assoc_t assoc_id);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user