astyle only
This commit is contained in:
@@ -100,6 +100,7 @@ int f1ap_add_ue(F1_t isCu,
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We didn't find the rnti
|
// We didn't find the rnti
|
||||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||||
if (f1_inst->f1ap_ue[i].rnti == 0 ) {
|
if (f1_inst->f1ap_ue[i].rnti == 0 ) {
|
||||||
@@ -188,12 +189,12 @@ int f1ap_du_add_cu_ue_id(instance_t instanceP,
|
|||||||
instance_t du_ue_f1ap_id,
|
instance_t du_ue_f1ap_id,
|
||||||
instance_t cu_ue_f1ap_id) {
|
instance_t cu_ue_f1ap_id) {
|
||||||
f1ap_cudu_inst_t *f1_inst=getCxt(DUtype, instanceP);
|
f1ap_cudu_inst_t *f1_inst=getCxt(DUtype, instanceP);
|
||||||
|
|
||||||
instance_t f1ap_uid=-1;
|
instance_t f1ap_uid=-1;
|
||||||
|
|
||||||
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
for (int i = 0; i < MAX_MOBILES_PER_ENB; i++) {
|
||||||
if (f1_inst->f1ap_ue[i].du_ue_f1ap_id == du_ue_f1ap_id) {
|
if (f1_inst->f1ap_ue[i].du_ue_f1ap_id == du_ue_f1ap_id) {
|
||||||
f1ap_uid=i;
|
f1ap_uid=i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,8 +97,6 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
|
|
||||||
/* assoc_id */
|
/* assoc_id */
|
||||||
f1ap_setup_req_t *req=&getCxt(true, instance)->setupReq;
|
f1ap_setup_req_t *req=&getCxt(true, instance)->setupReq;
|
||||||
|
|
||||||
|
|
||||||
req->assoc_id = assoc_id;
|
req->assoc_id = assoc_id;
|
||||||
/* gNB_DU_id */
|
/* gNB_DU_id */
|
||||||
// this function exits if the ie is mandatory
|
// this function exits if the ie is mandatory
|
||||||
@@ -124,8 +122,8 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
for (i=0; i<num_cells_available; i++) {
|
for (i=0; i<num_cells_available; i++) {
|
||||||
F1AP_GNB_DU_Served_Cells_Item_t *served_cells_item_p;
|
F1AP_GNB_DU_Served_Cells_Item_t *served_cells_item_p;
|
||||||
served_cells_item_p = &(((F1AP_GNB_DU_Served_Cells_ItemIEs_t *)
|
served_cells_item_p = &(((F1AP_GNB_DU_Served_Cells_ItemIEs_t *)
|
||||||
ie->value.choice.GNB_DU_Served_Cells_List.list.array[i])->
|
ie->value.choice.GNB_DU_Served_Cells_List.list.array[i])->
|
||||||
value.choice.GNB_DU_Served_Cells_Item);
|
value.choice.GNB_DU_Served_Cells_Item);
|
||||||
|
|
||||||
/* tac */
|
/* tac */
|
||||||
if (served_cells_item_p->served_Cell_Information.fiveGS_TAC) {
|
if (served_cells_item_p->served_Cell_Information.fiveGS_TAC) {
|
||||||
@@ -153,6 +151,7 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
f1ap_req(true, instance)->cell_type=CELL_MACRO_GNB;
|
f1ap_req(true, instance)->cell_type=CELL_MACRO_GNB;
|
||||||
else
|
else
|
||||||
f1ap_req(true, instance)->cell_type=CELL_MACRO_ENB;
|
f1ap_req(true, instance)->cell_type=CELL_MACRO_ENB;
|
||||||
|
|
||||||
LOG_I(F1AP, "Received Cell in %d context\n", f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB);
|
LOG_I(F1AP, "Received Cell in %d context\n", f1ap_req(true, instance)->cell_type==CELL_MACRO_GNB);
|
||||||
// System Information
|
// System Information
|
||||||
/* mib */
|
/* mib */
|
||||||
@@ -209,10 +208,10 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
|
|||||||
// uint16_t nr_sul_band[32];
|
// uint16_t nr_sul_band[32];
|
||||||
// } tdd;
|
// } tdd;
|
||||||
// } nr_mode_info[F1AP_MAX_NB_CELLS];
|
// } nr_mode_info[F1AP_MAX_NB_CELLS];
|
||||||
|
|
||||||
// We copy and store in F1 task data, RRC will free "req" as it frees all itti received messages
|
// We copy and store in F1 task data, RRC will free "req" as it frees all itti received messages
|
||||||
message_p = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_SETUP_REQ);
|
message_p = itti_alloc_new_message(TASK_CU_F1, 0, F1AP_SETUP_REQ);
|
||||||
memcpy(&F1AP_SETUP_REQ(message_p), req, sizeof(f1ap_setup_req_t) );
|
memcpy(&F1AP_SETUP_REQ(message_p), req, sizeof(f1ap_setup_req_t) );
|
||||||
|
|
||||||
if (num_cells_available > 0) {
|
if (num_cells_available > 0) {
|
||||||
if (f1ap_req(true, instance)->cell_type == CELL_MACRO_GNB) {
|
if (f1ap_req(true, instance)->cell_type == CELL_MACRO_GNB) {
|
||||||
itti_send_msg_to_task(TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(instance), message_p);
|
itti_send_msg_to_task(TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(instance), message_p);
|
||||||
@@ -521,14 +520,14 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
|
|||||||
ieC3->value.present = F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Deactivated_List;
|
ieC3->value.present = F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Deactivated_List;
|
||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ieC3->value.choice.Cells_to_be_Deactivated_List.list,
|
asn1cSequenceAdd(ieC3->value.choice.Cells_to_be_Deactivated_List.list,
|
||||||
F1AP_Cells_to_be_Deactivated_List_ItemIEs_t, cells_to_be_deactivated);
|
F1AP_Cells_to_be_Deactivated_List_ItemIEs_t, cells_to_be_deactivated);
|
||||||
cells_to_be_deactivated->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
|
cells_to_be_deactivated->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
|
||||||
cells_to_be_deactivated->criticality = F1AP_Criticality_reject;
|
cells_to_be_deactivated->criticality = F1AP_Criticality_reject;
|
||||||
cells_to_be_deactivated->value.present = F1AP_Cells_to_be_Deactivated_List_ItemIEs__value_PR_Cells_to_be_Deactivated_List_Item;
|
cells_to_be_deactivated->value.present = F1AP_Cells_to_be_Deactivated_List_ItemIEs__value_PR_Cells_to_be_Deactivated_List_Item;
|
||||||
// 3.1 cells to be Deactivated list item
|
// 3.1 cells to be Deactivated list item
|
||||||
F1AP_Cells_to_be_Deactivated_List_Item_t *cells_to_be_deactivated_list=
|
F1AP_Cells_to_be_Deactivated_List_Item_t *cells_to_be_deactivated_list=
|
||||||
cells_to_be_deactivated->value.choice.Cells_to_be_Deactivated_List_Item;
|
cells_to_be_deactivated->value.choice.Cells_to_be_Deactivated_List_Item;
|
||||||
addnRCGI(cells_to_be_deactivated_item->nRCGI, f1ap_setup_resp->cells_to_deactivate+i);
|
addnRCGI(cells_to_be_deactivated_item->nRCGI, f1ap_setup_resp->cells_to_deactivate+i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -543,19 +542,19 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
|
|||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ieC4->value.choice.GNB_CU_TNL_Association_To_Add_List.list,
|
asn1cSequenceAdd(ieC4->value.choice.GNB_CU_TNL_Association_To_Add_List.list,
|
||||||
F1AP_GNB_CU_TNL_Association_To_Add_ItemIEs_t, gnb_cu_tnl_association_to_add;
|
F1AP_GNB_CU_TNL_Association_To_Add_ItemIEs_t, gnb_cu_tnl_association_to_add;
|
||||||
gnb_cu_tnl_association_to_add->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Add_Item;
|
gnb_cu_tnl_association_to_add->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Add_Item;
|
||||||
gnb_cu_tnl_association_to_add->criticality = F1AP_Criticality_reject;
|
gnb_cu_tnl_association_to_add->criticality = F1AP_Criticality_reject;
|
||||||
gnb_cu_tnl_association_to_add->value.present = F1AP_GNB_CU_TNL_Association_To_Add_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Add_Item;
|
gnb_cu_tnl_association_to_add->value.present = F1AP_GNB_CU_TNL_Association_To_Add_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Add_Item;
|
||||||
|
|
||||||
// 4.1 GNB_CU_TNL_Association_To_Add_Item
|
// 4.1 GNB_CU_TNL_Association_To_Add_Item
|
||||||
F1AP_GNB_CU_TNL_Association_To_Add_Item_t *gnb_cu_tnl_association_to_add_item=
|
F1AP_GNB_CU_TNL_Association_To_Add_Item_t *gnb_cu_tnl_association_to_add_item=
|
||||||
&gnb_cu_tnl_association_to_add_item_ies->value.choice.GNB_CU_TNL_Association_To_Add_Item;
|
&gnb_cu_tnl_association_to_add_item_ies->value.choice.GNB_CU_TNL_Association_To_Add_Item;
|
||||||
|
|
||||||
// 4.1.1 tNLAssociationTransportLayerAddress
|
// 4.1.1 tNLAssociationTransportLayerAddress
|
||||||
F1AP_CP_TransportLayerAddress_t *transportLayerAddress=;
|
F1AP_CP_TransportLayerAddress_t *transportLayerAddress=;
|
||||||
gnb_cu_tnl_association_to_add->value.choice.GNB_CU_TNL_Association_To_Add_Item;
|
gnb_cu_tnl_association_to_add->value.choice.GNB_CU_TNL_Association_To_Add_Item;
|
||||||
|
|
||||||
transportLayerAddress->present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address;
|
transportLayerAddress->present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address;
|
||||||
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress->choice.endpoint_IP_address);
|
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress->choice.endpoint_IP_address);
|
||||||
|
|
||||||
@@ -577,18 +576,18 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
|
|||||||
ieC5->value.present = F1AP_GNBCUConfigurationUpdateIEs__value_PR_GNB_CU_TNL_Association_To_Remove_List;
|
ieC5->value.present = F1AP_GNBCUConfigurationUpdateIEs__value_PR_GNB_CU_TNL_Association_To_Remove_List;
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ieC5->value.choice.GNB_CU_TNL_Association_To_Remove_List.list,
|
asn1cSequenceAdd(ieC5->value.choice.GNB_CU_TNL_Association_To_Remove_List.list,
|
||||||
F1AP_GNB_CU_TNL_Association_To_Remove_ItemIEs_t, gnb_cu_tnl_association_to_remove);
|
F1AP_GNB_CU_TNL_Association_To_Remove_ItemIEs_t, gnb_cu_tnl_association_to_remove);
|
||||||
gnb_cu_tnl_association_to_remove->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Remove_Item;
|
gnb_cu_tnl_association_to_remove->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Remove_Item;
|
||||||
gnb_cu_tnl_association_to_remove->criticality = F1AP_Criticality_reject;
|
gnb_cu_tnl_association_to_remove->criticality = F1AP_Criticality_reject;
|
||||||
gnb_cu_tnl_association_to_remove->value.present = F1AP_GNB_CU_TNL_Association_To_Remove_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Remove_Item;
|
gnb_cu_tnl_association_to_remove->value.present = F1AP_GNB_CU_TNL_Association_To_Remove_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Remove_Item;
|
||||||
|
|
||||||
// 4.1 GNB_CU_TNL_Association_To_Remove_Item
|
// 4.1 GNB_CU_TNL_Association_To_Remove_Item
|
||||||
F1AP_GNB_CU_TNL_Association_To_Remove_Item_t *gnb_cu_tnl_association_to_remove_item=
|
F1AP_GNB_CU_TNL_Association_To_Remove_Item_t *gnb_cu_tnl_association_to_remove_item=
|
||||||
&gnb_cu_tnl_association_to_remove->value.choice.GNB_CU_TNL_Association_To_Remove_Item;
|
&gnb_cu_tnl_association_to_remove->value.choice.GNB_CU_TNL_Association_To_Remove_Item;
|
||||||
|
|
||||||
// 4.1.1 tNLAssociationTransportLayerAddress
|
// 4.1.1 tNLAssociationTransportLayerAddress
|
||||||
F1AP_CP_TransportLayerAddress_t *transportLayerAddress=
|
F1AP_CP_TransportLayerAddress_t *transportLayerAddress=
|
||||||
&gnb_cu_tnl_association_to_remove_item->tNLAssociationTransportLayerAddress;
|
&gnb_cu_tnl_association_to_remove_item->tNLAssociationTransportLayerAddress;
|
||||||
transportLayerAddress->present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address;
|
transportLayerAddress->present = F1AP_CP_TransportLayerAddress_PR_endpoint_IP_address;
|
||||||
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress->choice.endpoint_IP_address);
|
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(1234, &transportLayerAddress->choice.endpoint_IP_address);
|
||||||
|
|
||||||
@@ -609,7 +608,7 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
|
|||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ieC3->value.choice.GNB_CU_TNL_Association_To_Update_List.list,
|
asn1cSequenceAdd(ieC3->value.choice.GNB_CU_TNL_Association_To_Update_List.list,
|
||||||
F1AP_GNB_CU_TNL_Association_To_Update_ItemIEs_t, gnb_cu_tnl_association_to_update);
|
F1AP_GNB_CU_TNL_Association_To_Update_ItemIEs_t, gnb_cu_tnl_association_to_update);
|
||||||
gnb_cu_tnl_association_to_update->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Update_Item;
|
gnb_cu_tnl_association_to_update->id = F1AP_ProtocolIE_ID_id_GNB_CU_TNL_Association_To_Update_Item;
|
||||||
gnb_cu_tnl_association_to_update->criticality = F1AP_Criticality_reject;
|
gnb_cu_tnl_association_to_update->criticality = F1AP_Criticality_reject;
|
||||||
gnb_cu_tnl_association_to_update->value.present = F1AP_GNB_CU_TNL_Association_To_Update_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Update_Item;
|
gnb_cu_tnl_association_to_update->value.present = F1AP_GNB_CU_TNL_Association_To_Update_ItemIEs__value_PR_GNB_CU_TNL_Association_To_Update_Item;
|
||||||
@@ -642,7 +641,7 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
|
|||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ieC7->value.choice.Cells_to_be_Barred_List.list,
|
asn1cSequenceAdd(ieC7->value.choice.Cells_to_be_Barred_List.list,
|
||||||
F1AP_Cells_to_be_Barred_ItemIEs_t,cells_to_be_barred);
|
F1AP_Cells_to_be_Barred_ItemIEs_t,cells_to_be_barred);
|
||||||
cells_to_be_barred->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
|
cells_to_be_barred->id = F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item;
|
||||||
cells_to_be_barred->criticality = F1AP_Criticality_reject;
|
cells_to_be_barred->criticality = F1AP_Criticality_reject;
|
||||||
cells_to_be_barred->value.present = F1AP_Cells_to_be_Barred_ItemIEs__value_PR_Cells_to_be_Barred_Item;
|
cells_to_be_barred->value.present = F1AP_Cells_to_be_Barred_ItemIEs__value_PR_Cells_to_be_Barred_Item;
|
||||||
@@ -665,7 +664,7 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
|
|||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ieC8->value.choice.Protected_EUTRA_Resources_List.list,
|
asn1cSequenceAdd(ieC8->value.choice.Protected_EUTRA_Resources_List.list,
|
||||||
F1AP_Protected_EUTRA_Resources_ItemIEs_t, protected_eutra_resources);
|
F1AP_Protected_EUTRA_Resources_ItemIEs_t, protected_eutra_resources);
|
||||||
// 8.1 SpectrumSharingGroupID
|
// 8.1 SpectrumSharingGroupID
|
||||||
protected_eutra_resources->id = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
|
protected_eutra_resources->id = F1AP_ProtocolIE_ID_id_Protected_EUTRA_Resources_List;
|
||||||
protected_eutra_resources->criticality = F1AP_Criticality_reject;
|
protected_eutra_resources->criticality = F1AP_Criticality_reject;
|
||||||
@@ -675,11 +674,11 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
|
|||||||
sizeof(F1AP_Protected_EUTRA_Resources_Item_t));
|
sizeof(F1AP_Protected_EUTRA_Resources_Item_t));
|
||||||
|
|
||||||
asn1cSequenceAdd(protected_eutra_resources->value.choice.ListofEUTRACellsinGNBDUCoordination.list,
|
asn1cSequenceAdd(protected_eutra_resources->value.choice.ListofEUTRACellsinGNBDUCoordination.list,
|
||||||
F1AP_Served_EUTRA_Cells_Information_t, served_eutra_cells_information);
|
F1AP_Served_EUTRA_Cells_Information_t, served_eutra_cells_information);
|
||||||
memset((void *)&served_eutra_cells_information, 0, sizeof(F1AP_Served_EUTRA_Cells_Information_t));
|
memset((void *)&served_eutra_cells_information, 0, sizeof(F1AP_Served_EUTRA_Cells_Information_t));
|
||||||
|
|
||||||
F1AP_EUTRA_Mode_Info_t *eUTRA_Mode_Info=
|
F1AP_EUTRA_Mode_Info_t *eUTRA_Mode_Info=
|
||||||
&served_eutra_cells_information.eUTRA_Mode_Info;
|
&served_eutra_cells_information.eUTRA_Mode_Info;
|
||||||
|
|
||||||
// eUTRAFDD
|
// eUTRAFDD
|
||||||
eUTRA_Mode_Info->present = F1AP_EUTRA_Mode_Info_PR_eUTRAFDD;
|
eUTRA_Mode_Info->present = F1AP_EUTRA_Mode_Info_PR_eUTRAFDD;
|
||||||
|
|||||||
@@ -100,7 +100,6 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
}
|
}
|
||||||
|
|
||||||
LOG_I(F1AP, "%s() RRCContainer (CCCH) size %ld: ", __func__, ie->value.choice.RRCContainer.size);
|
LOG_I(F1AP, "%s() RRCContainer (CCCH) size %ld: ", __func__, ie->value.choice.RRCContainer.size);
|
||||||
|
|
||||||
/* DUtoCURRCContainer */
|
/* DUtoCURRCContainer */
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_InitialULRRCMessageTransferIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_DUtoCURRCContainer, false);
|
F1AP_ProtocolIE_ID_id_DUtoCURRCContainer, false);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
instance_t CUuniqInstance=0;
|
instance_t CUuniqInstance=0;
|
||||||
|
|
||||||
static instance_t cu_task_create_gtpu_instance_to_du(eth_params_t *IPaddrs) {
|
static instance_t cu_task_create_gtpu_instance_to_du(eth_params_t *IPaddrs) {
|
||||||
openAddr_t tmp={0};
|
openAddr_t tmp= {0};
|
||||||
strncpy(tmp.originHost, IPaddrs->my_addr, sizeof(tmp.originHost)-1);
|
strncpy(tmp.originHost, IPaddrs->my_addr, sizeof(tmp.originHost)-1);
|
||||||
strncpy(tmp.destinationHost, IPaddrs->remote_addr, sizeof(tmp.destinationHost)-1);
|
strncpy(tmp.destinationHost, IPaddrs->remote_addr, sizeof(tmp.destinationHost)-1);
|
||||||
sprintf(tmp.originService, "%d", IPaddrs->my_portd);
|
sprintf(tmp.originService, "%d", IPaddrs->my_portd);
|
||||||
@@ -51,7 +51,7 @@ static instance_t cu_task_create_gtpu_instance_to_du(eth_params_t *IPaddrs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void cu_task_handle_sctp_association_ind(instance_t instance, sctp_new_association_ind_t *sctp_new_association_ind,
|
static void cu_task_handle_sctp_association_ind(instance_t instance, sctp_new_association_ind_t *sctp_new_association_ind,
|
||||||
eth_params_t *IPaddrs) {
|
eth_params_t *IPaddrs) {
|
||||||
createF1inst(true, instance, NULL);
|
createF1inst(true, instance, NULL);
|
||||||
// save the assoc id
|
// save the assoc id
|
||||||
f1ap_setup_req_t *f1ap_cu_data=f1ap_req(true, instance);
|
f1ap_setup_req_t *f1ap_cu_data=f1ap_req(true, instance);
|
||||||
@@ -90,7 +90,7 @@ static void cu_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *s
|
|||||||
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
|
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cu_task_send_sctp_init_req(instance_t instance, char * my_addr) {
|
static void cu_task_send_sctp_init_req(instance_t instance, char *my_addr) {
|
||||||
// 1. get the itti msg, and retrive the enb_id from the message
|
// 1. get the itti msg, and retrive the enb_id from the message
|
||||||
// 2. use RC.rrc[enb_id] to fill the sctp_init_t with the ip, port
|
// 2. use RC.rrc[enb_id] to fill the sctp_init_t with the ip, port
|
||||||
// 3. creat an itti message to init
|
// 3. creat an itti message to init
|
||||||
@@ -103,7 +103,6 @@ static void cu_task_send_sctp_init_req(instance_t instance, char * my_addr) {
|
|||||||
message_p->ittiMsg.sctp_init.ipv6 = 0;
|
message_p->ittiMsg.sctp_init.ipv6 = 0;
|
||||||
message_p->ittiMsg.sctp_init.nb_ipv4_addr = 1;
|
message_p->ittiMsg.sctp_init.nb_ipv4_addr = 1;
|
||||||
message_p->ittiMsg.sctp_init.ipv4_address[0] = inet_addr(my_addr);
|
message_p->ittiMsg.sctp_init.ipv4_address[0] = inet_addr(my_addr);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SR WARNING: ipv6 multi-homing fails sometimes for localhost.
|
* SR WARNING: ipv6 multi-homing fails sometimes for localhost.
|
||||||
* * * * Disable it for now.
|
* * * * Disable it for now.
|
||||||
@@ -113,7 +112,7 @@ static void cu_task_send_sctp_init_req(instance_t instance, char * my_addr) {
|
|||||||
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
|
itti_send_msg_to_task(TASK_SCTP, instance, message_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void * F1AP_CU_task(void *arg) {
|
void *F1AP_CU_task(void *arg) {
|
||||||
MessageDef *received_msg = NULL;
|
MessageDef *received_msg = NULL;
|
||||||
int result;
|
int result;
|
||||||
LOG_I(F1AP, "Starting F1AP at CU\n");
|
LOG_I(F1AP, "Starting F1AP at CU\n");
|
||||||
@@ -121,13 +120,15 @@ void * F1AP_CU_task(void *arg) {
|
|||||||
pool_buffer_init();
|
pool_buffer_init();
|
||||||
itti_mark_task_ready(TASK_CU_F1);
|
itti_mark_task_ready(TASK_CU_F1);
|
||||||
eth_params_t *IPaddrs;
|
eth_params_t *IPaddrs;
|
||||||
|
|
||||||
// Hardcoded instance id!
|
// Hardcoded instance id!
|
||||||
if (RC.nrrrc && RC.nrrrc[0]->node_type == ngran_gNB_CU)
|
if (RC.nrrrc && RC.nrrrc[0]->node_type == ngran_gNB_CU)
|
||||||
IPaddrs=&RC.nrrrc[0]->eth_params_s;
|
IPaddrs=&RC.nrrrc[0]->eth_params_s;
|
||||||
else
|
else
|
||||||
IPaddrs=&RC.rrc[0]->eth_params_s;
|
IPaddrs=&RC.rrc[0]->eth_params_s;
|
||||||
|
|
||||||
cu_task_send_sctp_init_req(0, IPaddrs->my_addr);
|
cu_task_send_sctp_init_req(0, IPaddrs->my_addr);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
itti_receive_msg(TASK_CU_F1, &received_msg);
|
itti_receive_msg(TASK_CU_F1, &received_msg);
|
||||||
|
|
||||||
@@ -137,7 +138,7 @@ void * F1AP_CU_task(void *arg) {
|
|||||||
ITTI_MSG_DESTINATION_INSTANCE(received_msg));
|
ITTI_MSG_DESTINATION_INSTANCE(received_msg));
|
||||||
cu_task_handle_sctp_association_ind(ITTI_MSG_ORIGIN_INSTANCE(received_msg),
|
cu_task_handle_sctp_association_ind(ITTI_MSG_ORIGIN_INSTANCE(received_msg),
|
||||||
&received_msg->ittiMsg.sctp_new_association_ind,
|
&received_msg->ittiMsg.sctp_new_association_ind,
|
||||||
IPaddrs);
|
IPaddrs);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCTP_NEW_ASSOCIATION_RESP:
|
case SCTP_NEW_ASSOCIATION_RESP:
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
ie4->criticality = F1AP_Criticality_reject;
|
ie4->criticality = F1AP_Criticality_reject;
|
||||||
ie4->value.present = F1AP_UEContextSetupRequestIEs__value_PR_ServCellIndex;
|
ie4->value.present = F1AP_UEContextSetupRequestIEs__value_PR_ServCellIndex;
|
||||||
ie4->value.choice.ServCellIndex = 0;
|
ie4->value.choice.ServCellIndex = 0;
|
||||||
|
|
||||||
/* optional */
|
/* optional */
|
||||||
/* c5. CellULConfigured */
|
/* c5. CellULConfigured */
|
||||||
if (0) {
|
if (0) {
|
||||||
@@ -130,6 +130,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
ie6->id = F1AP_ProtocolIE_ID_id_CUtoDURRCInformation;
|
ie6->id = F1AP_ProtocolIE_ID_id_CUtoDURRCInformation;
|
||||||
ie6->criticality = F1AP_Criticality_reject;
|
ie6->criticality = F1AP_Criticality_reject;
|
||||||
ie6->value.present = F1AP_UEContextSetupRequestIEs__value_PR_CUtoDURRCInformation;
|
ie6->value.present = F1AP_UEContextSetupRequestIEs__value_PR_CUtoDURRCInformation;
|
||||||
|
|
||||||
/* optional */
|
/* optional */
|
||||||
/* 6.1 cG_ConfigInfo */
|
/* 6.1 cG_ConfigInfo */
|
||||||
if (0) {
|
if (0) {
|
||||||
@@ -152,7 +153,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
ie7->id = F1AP_ProtocolIE_ID_id_Candidate_SpCell_List; //90
|
ie7->id = F1AP_ProtocolIE_ID_id_Candidate_SpCell_List; //90
|
||||||
ie7->criticality = F1AP_Criticality_ignore;
|
ie7->criticality = F1AP_Criticality_ignore;
|
||||||
ie7->value.present = F1AP_UEContextSetupRequestIEs__value_PR_Candidate_SpCell_List;
|
ie7->value.present = F1AP_UEContextSetupRequestIEs__value_PR_Candidate_SpCell_List;
|
||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ie7->value.choice.Candidate_SpCell_List.list,F1AP_Candidate_SpCell_ItemIEs_t, candidate_spCell_item_ies);
|
asn1cSequenceAdd(ie7->value.choice.Candidate_SpCell_List.list,F1AP_Candidate_SpCell_ItemIEs_t, candidate_spCell_item_ies);
|
||||||
candidate_spCell_item_ies->id = F1AP_ProtocolIE_ID_id_Candidate_SpCell_Item; // 91
|
candidate_spCell_item_ies->id = F1AP_ProtocolIE_ID_id_Candidate_SpCell_Item; // 91
|
||||||
@@ -205,13 +206,14 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
OCTET_STRING_fromBuf(&ie9->value.choice.ResourceCoordinationTransferContainer, "asdsa1d32sa1d31asd31as",
|
OCTET_STRING_fromBuf(&ie9->value.choice.ResourceCoordinationTransferContainer, "asdsa1d32sa1d31asd31as",
|
||||||
strlen("asdsa1d32sa1d31asd31as"));
|
strlen("asdsa1d32sa1d31asd31as"));
|
||||||
}
|
}
|
||||||
/* mandatory */
|
|
||||||
|
/* mandatory */
|
||||||
/* c10. SCell_ToBeSetup_List */
|
/* c10. SCell_ToBeSetup_List */
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupRequestIEs_t, ie10);
|
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupRequestIEs_t, ie10);
|
||||||
ie10->id = F1AP_ProtocolIE_ID_id_SCell_ToBeSetup_List;
|
ie10->id = F1AP_ProtocolIE_ID_id_SCell_ToBeSetup_List;
|
||||||
ie10->criticality = F1AP_Criticality_ignore;
|
ie10->criticality = F1AP_Criticality_ignore;
|
||||||
ie10->value.present = F1AP_UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List;
|
ie10->value.present = F1AP_UEContextSetupRequestIEs__value_PR_SCell_ToBeSetup_List;
|
||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
//
|
//
|
||||||
asn1cSequenceAdd(ie10->value.choice.SCell_ToBeSetup_List.list, F1AP_SCell_ToBeSetup_ItemIEs_t, scell_toBeSetup_item_ies);
|
asn1cSequenceAdd(ie10->value.choice.SCell_ToBeSetup_List.list, F1AP_SCell_ToBeSetup_ItemIEs_t, scell_toBeSetup_item_ies);
|
||||||
@@ -391,7 +393,6 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
/* 12.1.2.2 sNSSAI */
|
/* 12.1.2.2 sNSSAI */
|
||||||
{
|
{
|
||||||
/* sST */
|
/* sST */
|
||||||
|
|
||||||
OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, "1", 1);
|
OCTET_STRING_fromBuf(&DRB_Information->sNSSAI.sST, "1", 1);
|
||||||
|
|
||||||
/* OPTIONAL */
|
/* OPTIONAL */
|
||||||
@@ -507,16 +508,15 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
int sz=sizeof(f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_dl_tnl[0].tl_address);
|
int sz=sizeof(f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_dl_tnl[0].tl_address);
|
||||||
memcpy(addr.buffer,&f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_dl_tnl[0].tl_address, sz);
|
memcpy(addr.buffer,&f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_dl_tnl[0].tl_address, sz);
|
||||||
addr.length = sz*8;
|
addr.length = sz*8;
|
||||||
|
|
||||||
f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_ul_tnl[j].teid=
|
f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_ul_tnl[j].teid=
|
||||||
newGtpuCreateTunnel(getCxt(CUtype, instance)->gtpInst,
|
newGtpuCreateTunnel(getCxt(CUtype, instance)->gtpInst,
|
||||||
f1ap_ue_context_setup_req->rnti,
|
f1ap_ue_context_setup_req->rnti,
|
||||||
f1ap_ue_context_setup_req->drbs_to_be_setup[i].drb_id,
|
f1ap_ue_context_setup_req->drbs_to_be_setup[i].drb_id,
|
||||||
f1ap_ue_context_setup_req->drbs_to_be_setup[i].drb_id,
|
f1ap_ue_context_setup_req->drbs_to_be_setup[i].drb_id,
|
||||||
0xFFFF, // We will set the right value from DU answer
|
0xFFFF, // We will set the right value from DU answer
|
||||||
addr,
|
addr,
|
||||||
f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_dl_tnl[0].port,
|
f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_dl_tnl[0].port,
|
||||||
cu_f1u_data_req);
|
cu_f1u_data_req);
|
||||||
/* 12.3.1 ULTunnels_ToBeSetup_Item */
|
/* 12.3.1 ULTunnels_ToBeSetup_Item */
|
||||||
asn1cSequenceAdd(drbs_toBeSetup_item->uLUPTNLInformation_ToBeSetup_List.list,
|
asn1cSequenceAdd(drbs_toBeSetup_item->uLUPTNLInformation_ToBeSetup_List.list,
|
||||||
F1AP_ULUPTNLInformation_ToBeSetup_Item_t, uLUPTNLInformation_ToBeSetup_Item);
|
F1AP_ULUPTNLInformation_ToBeSetup_Item_t, uLUPTNLInformation_ToBeSetup_Item);
|
||||||
@@ -525,10 +525,10 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
gTPTunnel);
|
gTPTunnel);
|
||||||
/* 12.3.1.1.1 transportLayerAddress */
|
/* 12.3.1.1.1 transportLayerAddress */
|
||||||
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_ul_tnl[j].tl_address,
|
TRANSPORT_LAYER_ADDRESS_IPv4_TO_BIT_STRING(f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_ul_tnl[j].tl_address,
|
||||||
&gTPTunnel->transportLayerAddress);
|
&gTPTunnel->transportLayerAddress);
|
||||||
/* 12.3.1.1.2 gTP_TEID */
|
/* 12.3.1.1.2 gTP_TEID */
|
||||||
INT32_TO_OCTET_STRING(f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_ul_tnl[j].teid,
|
INT32_TO_OCTET_STRING(f1ap_ue_context_setup_req->drbs_to_be_setup[i].up_ul_tnl[j].teid,
|
||||||
&gTPTunnel->gTP_TEID);
|
&gTPTunnel->gTP_TEID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 12.1.4 rLCMode */
|
/* 12.1.4 rLCMode */
|
||||||
@@ -641,111 +641,115 @@ int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance,
|
|||||||
f1ap_ue_context_setup_t *f1ap_ue_context_setup_resp = &F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
f1ap_ue_context_setup_t *f1ap_ue_context_setup_resp = &F1AP_UE_CONTEXT_SETUP_RESP(msg_p);
|
||||||
container = &pdu->choice.successfulOutcome->value.choice.UEContextSetupResponse;
|
container = &pdu->choice.successfulOutcome->value.choice.UEContextSetupResponse;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* GNB_CU_UE_F1AP_ID */
|
/* GNB_CU_UE_F1AP_ID */
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID, true);
|
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;
|
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);
|
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 */
|
/* GNB_DU_UE_F1AP_ID */
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID, true);
|
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;
|
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);
|
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_ue_context_setup_resp->rnti =
|
f1ap_ue_context_setup_resp->rnti =
|
||||||
f1ap_get_rnti_by_du_id(CUtype, instance, f1ap_ue_context_setup_resp->gNB_DU_ue_id);
|
f1ap_get_rnti_by_du_id(CUtype, instance, f1ap_ue_context_setup_resp->gNB_DU_ue_id);
|
||||||
|
// DUtoCURRCInformation
|
||||||
// DUtoCURRCInformation
|
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_DUtoCURRCInformation, true);
|
F1AP_ProtocolIE_ID_id_DUtoCURRCInformation, true);
|
||||||
if (ie == NULL){
|
|
||||||
|
if (ie == NULL) {
|
||||||
LOG_E(F1AP,"%s %d: ie is a NULL pointer \n",__FILE__,__LINE__);
|
LOG_E(F1AP,"%s %d: ie is a NULL pointer \n",__FILE__,__LINE__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
f1ap_ue_context_setup_resp->du_to_cu_rrc_information = (uint8_t *)calloc(1,ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
|
||||||
|
|
||||||
|
f1ap_ue_context_setup_resp->du_to_cu_rrc_information = (uint8_t *)calloc(1,ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
||||||
memcpy(f1ap_ue_context_setup_resp->du_to_cu_rrc_information, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.buf, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
memcpy(f1ap_ue_context_setup_resp->du_to_cu_rrc_information, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.buf, ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size);
|
||||||
f1ap_ue_context_setup_resp->du_to_cu_rrc_information_length = ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size;
|
f1ap_ue_context_setup_resp->du_to_cu_rrc_information_length = ie->value.choice.DUtoCURRCInformation.cellGroupConfig.size;
|
||||||
|
// DRBs_Setup_List
|
||||||
// DRBs_Setup_List
|
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_DRBs_Setup_List, false);
|
F1AP_ProtocolIE_ID_id_DRBs_Setup_List, false);
|
||||||
if(ie!=NULL){
|
|
||||||
|
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_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,
|
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));
|
sizeof(f1ap_drb_to_be_setup_t));
|
||||||
AssertFatal(f1ap_ue_context_setup_resp->drbs_to_be_setup,
|
AssertFatal(f1ap_ue_context_setup_resp->drbs_to_be_setup,
|
||||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_setup\n");
|
"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) {
|
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_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;
|
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;
|
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;
|
drb_p->drb_id = drbs_setup_item_p->dRBID;
|
||||||
// TODO in the following, assume only one UP UL TNL is present.
|
// TODO in the following, assume only one UP UL TNL is present.
|
||||||
// this matches/assumes OAI CU/DU implementation, can be up to 2!
|
// this matches/assumes OAI CU/DU implementation, can be up to 2!
|
||||||
drb_p->up_dl_tnl_length = 1;
|
drb_p->up_dl_tnl_length = 1;
|
||||||
AssertFatal(drbs_setup_item_p->dLUPTNLInformation_ToBeSetup_List.list.count > 0,
|
AssertFatal(drbs_setup_item_p->dLUPTNLInformation_ToBeSetup_List.list.count > 0,
|
||||||
"no DL UP TNL Information in DRBs to be Setup list\n");
|
"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_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;
|
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);
|
BIT_STRING_TO_TRANSPORT_LAYER_ADDRESS_IPv4(&dl_up_tnl0->transportLayerAddress, drb_p->up_dl_tnl[0].tl_address);
|
||||||
OCTET_STRING_TO_INT32(&dl_up_tnl0->gTP_TEID, drb_p->up_dl_tnl[0].teid);
|
OCTET_STRING_TO_INT32(&dl_up_tnl0->gTP_TEID, drb_p->up_dl_tnl[0].teid);
|
||||||
GtpuUpdateTunnelOutgoingTeid(getCxt(CUtype, instance)->gtpInst,
|
GtpuUpdateTunnelOutgoingTeid(getCxt(CUtype, instance)->gtpInst,
|
||||||
f1ap_ue_context_setup_resp->rnti,
|
f1ap_ue_context_setup_resp->rnti,
|
||||||
(ebi_t)drbs_setup_item_p->dRBID,
|
(ebi_t)drbs_setup_item_p->dRBID,
|
||||||
drb_p->up_dl_tnl[0].teid);
|
drb_p->up_dl_tnl[0].teid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SRBs_FailedToBeSetup_List
|
|
||||||
|
// SRBs_FailedToBeSetup_List
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List, false);
|
F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List, false);
|
||||||
if(ie!=NULL){
|
|
||||||
|
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_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,
|
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));
|
sizeof(f1ap_rb_failed_to_be_setup_t));
|
||||||
AssertFatal(f1ap_ue_context_setup_resp->srbs_failed_to_be_setup,
|
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");
|
"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) {
|
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];
|
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;
|
srb_p->rb_id = ((F1AP_SRBs_FailedToBeSetup_Item_t *)ie->value.choice.SRBs_FailedToBeSetup_List.list.array[i])->sRBID;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// DRBs_FailedToBeSetup_List
|
|
||||||
|
// DRBs_FailedToBeSetup_List
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_List, false);
|
F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_List, false);
|
||||||
if(ie!=NULL){
|
|
||||||
|
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_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,
|
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));
|
sizeof(f1ap_rb_failed_to_be_setup_t));
|
||||||
AssertFatal(f1ap_ue_context_setup_resp->drbs_failed_to_be_setup,
|
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");
|
"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) {
|
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];
|
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;
|
drb_p->rb_id = ((F1AP_DRBs_FailedToBeSetup_Item_t *)ie->value.choice.DRBs_FailedToBeSetup_List.list.array[i])->dRBID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SCell_FailedtoSetup_List
|
// SCell_FailedtoSetup_List
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_List, false);
|
F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_List, false);
|
||||||
if(ie!=NULL){
|
|
||||||
|
if(ie!=NULL) {
|
||||||
LOG_E (F1AP, "Not supporting handling of SCell_FailedtoSetup_List \n");
|
LOG_E (F1AP, "Not supporting handling of SCell_FailedtoSetup_List \n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRBs_Setup_List
|
// SRBs_Setup_List
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupResponseIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_SRBs_Setup_List, false);
|
F1AP_ProtocolIE_ID_id_SRBs_Setup_List, false);
|
||||||
if(ie!=NULL){
|
|
||||||
|
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_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,
|
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));
|
sizeof(f1ap_srb_to_be_setup_t));
|
||||||
AssertFatal(f1ap_ue_context_setup_resp->srbs_to_be_setup,
|
AssertFatal(f1ap_ue_context_setup_resp->srbs_to_be_setup,
|
||||||
"could not allocate memory for f1ap_ue_context_setup_resp->drbs_setup\n");
|
"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) {
|
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_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;
|
F1AP_SRBs_Setup_Item_t *srbs_setup_item_p;
|
||||||
@@ -1063,8 +1067,8 @@ int CU_send_UE_CONTEXT_MODIFICATION_REQUEST(instance_t instance) {
|
|||||||
ie5->value.choice.DRXCycle.longDRXCycleLength = F1AP_LongDRXCycleLength_ms10; // enum
|
ie5->value.choice.DRXCycle.longDRXCycleLength = F1AP_LongDRXCycleLength_ms10; // enum
|
||||||
|
|
||||||
if (0) {
|
if (0) {
|
||||||
asn1cCallocOne(ie5->value.choice.DRXCycle.shortDRXCycleLength,
|
asn1cCallocOne(ie5->value.choice.DRXCycle.shortDRXCycleLength,
|
||||||
F1AP_ShortDRXCycleLength_ms2); // enum
|
F1AP_ShortDRXCycleLength_ms2); // enum
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0) {
|
if (0) {
|
||||||
|
|||||||
@@ -44,8 +44,10 @@ int to_NRNRB(int nrb) {
|
|||||||
for (int i=0; i<sizeofArray(nrb_lut); i++)
|
for (int i=0; i<sizeofArray(nrb_lut); i++)
|
||||||
if (nrb_lut[i] == nrb)
|
if (nrb_lut[i] == nrb)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
if(!RC.nrrrc)
|
if(!RC.nrrrc)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
AssertFatal(1==0,"nrb %d is not in the list of possible NRNRB\n",nrb);
|
AssertFatal(1==0,"nrb %d is not in the list of possible NRNRB\n",nrb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,7 +437,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
|
|||||||
memcpy((void *)F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_container[si],
|
memcpy((void *)F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_container[si],
|
||||||
(void *)sib_item->sIBmessage.buf,
|
(void *)sib_item->sIBmessage.buf,
|
||||||
size);
|
size);
|
||||||
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_type[si]=sib_item->sIBtype;
|
F1AP_SETUP_RESP (msg_p).cells_to_activate[i].SI_type[si]=sib_item->sIBtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -869,7 +871,7 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
|
|||||||
memcpy((void *)F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).cells_to_activate[i].SI_container[si],
|
memcpy((void *)F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).cells_to_activate[i].SI_container[si],
|
||||||
(void *)sib_item->sIBmessage.buf,
|
(void *)sib_item->sIBmessage.buf,
|
||||||
size);
|
size);
|
||||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).cells_to_activate[i].SI_type[si]=sib_item->sIBtype;
|
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p).cells_to_activate[i].SI_type[si]=sib_item->sIBtype;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -137,7 +137,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
/* RRC Container */
|
/* RRC Container */
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_RRCContainer, true);
|
F1AP_ProtocolIE_ID_id_RRCContainer, true);
|
||||||
|
|
||||||
rrc_dl_sdu_len = ie->value.choice.RRCContainer.size;
|
rrc_dl_sdu_len = ie->value.choice.RRCContainer.size;
|
||||||
|
|
||||||
/* optional */
|
/* optional */
|
||||||
@@ -763,7 +762,7 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP,
|
|||||||
LOG_E(F1AP, "Failed to add UE \n");
|
LOG_E(F1AP, "Failed to add UE \n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create */
|
/* Create */
|
||||||
/* 0. Message Type */
|
/* 0. Message Type */
|
||||||
pdu.present = F1AP_F1AP_PDU_PR_initiatingMessage;
|
pdu.present = F1AP_F1AP_PDU_PR_initiatingMessage;
|
||||||
@@ -920,7 +919,7 @@ int DU_handle_DL_NR_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
LOG_E(F1AP, "Failed to find the F1AP UID \n");
|
LOG_E(F1AP, "Failed to find the F1AP UID \n");
|
||||||
//return -1;
|
//return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* optional */
|
/* optional */
|
||||||
/* oldgNB_DU_UE_F1AP_ID */
|
/* oldgNB_DU_UE_F1AP_ID */
|
||||||
if (0) {
|
if (0) {
|
||||||
@@ -932,7 +931,6 @@ int DU_handle_DL_NR_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
/* SRBID */
|
/* SRBID */
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_DLRRCMessageTransferIEs_t, ie, container,
|
||||||
F1AP_ProtocolIE_ID_id_SRBID, true);
|
F1AP_ProtocolIE_ID_id_SRBID, true);
|
||||||
|
|
||||||
uint64_t srb_id = ie->value.choice.SRBID;
|
uint64_t srb_id = ie->value.choice.SRBID;
|
||||||
LOG_D(F1AP, "srb_id %lu \n", srb_id);
|
LOG_D(F1AP, "srb_id %lu \n", srb_id);
|
||||||
|
|
||||||
@@ -985,13 +983,12 @@ int DU_handle_DL_NR_RRC_MESSAGE_TRANSFER(instance_t instance,
|
|||||||
|
|
||||||
// decode RRC Container and act on the message type
|
// decode RRC Container and act on the message type
|
||||||
AssertFatal(srb_id<3,"illegal srb_id\n");
|
AssertFatal(srb_id<3,"illegal srb_id\n");
|
||||||
MessageDef * msg = itti_alloc_new_message(TASK_DU_F1, 0, NR_DU_RRC_DL_INDICATION);
|
MessageDef *msg = itti_alloc_new_message(TASK_DU_F1, 0, NR_DU_RRC_DL_INDICATION);
|
||||||
NRDuDlReq_t * req=&NRDuDlReq(msg);
|
NRDuDlReq_t *req=&NRDuDlReq(msg);
|
||||||
req->rnti=f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id);
|
req->rnti=f1ap_get_rnti_by_du_id(DUtype, instance, du_ue_f1ap_id);
|
||||||
req->srb_id=srb_id;
|
req->srb_id=srb_id;
|
||||||
req->buf= get_free_mem_block( ie->value.choice.RRCContainer.size, __func__);
|
req->buf= get_free_mem_block( ie->value.choice.RRCContainer.size, __func__);
|
||||||
memcpy(req->buf->data, ie->value.choice.RRCContainer.buf, ie->value.choice.RRCContainer.size);
|
memcpy(req->buf->data, ie->value.choice.RRCContainer.buf, ie->value.choice.RRCContainer.size);
|
||||||
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg);
|
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,6 @@ void du_task_handle_sctp_association_resp(instance_t instance, sctp_new_associat
|
|||||||
f1ap_du_data->sctp_out_streams = sctp_new_association_resp->out_streams;
|
f1ap_du_data->sctp_out_streams = sctp_new_association_resp->out_streams;
|
||||||
f1ap_du_data->default_sctp_stream_id = 0;
|
f1ap_du_data->default_sctp_stream_id = 0;
|
||||||
/* setup parameters for F1U and start the server */
|
/* setup parameters for F1U and start the server */
|
||||||
|
|
||||||
DU_send_F1_SETUP_REQUEST(instance);
|
DU_send_F1_SETUP_REQUEST(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,8 +97,8 @@ void du_task_handle_sctp_data_ind(instance_t instance, sctp_data_ind_t *sctp_dat
|
|||||||
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
|
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
static instance_t du_create_gtpu_instance_to_cu(char* CUaddr, uint16_t CUport, char * DUaddr, uint16_t DUport) {
|
static instance_t du_create_gtpu_instance_to_cu(char *CUaddr, uint16_t CUport, char *DUaddr, uint16_t DUport) {
|
||||||
openAddr_t tmp={0};
|
openAddr_t tmp= {0};
|
||||||
strncpy(tmp.originHost, DUaddr, sizeof(tmp.originHost)-1);
|
strncpy(tmp.originHost, DUaddr, sizeof(tmp.originHost)-1);
|
||||||
strncpy(tmp.destinationHost, CUaddr, sizeof(tmp.destinationHost)-1);
|
strncpy(tmp.destinationHost, CUaddr, sizeof(tmp.destinationHost)-1);
|
||||||
sprintf(tmp.originService, "%d", DUport);
|
sprintf(tmp.originService, "%d", DUport);
|
||||||
@@ -121,22 +120,22 @@ void *F1AP_DU_task(void *arg) {
|
|||||||
|
|
||||||
switch (ITTI_MSG_ID(msg)) {
|
switch (ITTI_MSG_ID(msg)) {
|
||||||
case F1AP_SETUP_REQ:
|
case F1AP_SETUP_REQ:
|
||||||
// this is not a true F1 message, but rather an ITTI message sent by enb_app
|
// this is not a true F1 message, but rather an ITTI message sent by enb_app
|
||||||
// 1. save the itti msg so that you can use it to sen f1ap_setup_req, fill the f1ap_setup_req message,
|
// 1. save the itti msg so that you can use it to sen f1ap_setup_req, fill the f1ap_setup_req message,
|
||||||
// 2. store the message in f1ap context, that is also stored in RC
|
// 2. store the message in f1ap context, that is also stored in RC
|
||||||
// 2. send a sctp_association req
|
// 2. send a sctp_association req
|
||||||
LOG_I(F1AP, "DU Task Received F1AP_SETUP_REQ\n");
|
LOG_I(F1AP, "DU Task Received F1AP_SETUP_REQ\n");
|
||||||
f1ap_setup_req_t * msgSetup=&F1AP_SETUP_REQ(msg);
|
f1ap_setup_req_t *msgSetup=&F1AP_SETUP_REQ(msg);
|
||||||
createF1inst(false, myInstance, msgSetup);
|
createF1inst(false, myInstance, msgSetup);
|
||||||
getCxt(DUtype, myInstance)->gtpInst=du_create_gtpu_instance_to_cu(msgSetup->CU_f1_ip_address.ipv4_address,
|
getCxt(DUtype, myInstance)->gtpInst=du_create_gtpu_instance_to_cu(msgSetup->CU_f1_ip_address.ipv4_address,
|
||||||
msgSetup->CUport,
|
msgSetup->CUport,
|
||||||
msgSetup->DU_f1_ip_address.ipv4_address,
|
msgSetup->DU_f1_ip_address.ipv4_address,
|
||||||
msgSetup->DUport);
|
msgSetup->DUport);
|
||||||
AssertFatal(getCxt(DUtype, myInstance)->gtpInst>0,"Failed to create CU F1-U UDP listener");
|
AssertFatal(getCxt(DUtype, myInstance)->gtpInst>0,"Failed to create CU F1-U UDP listener");
|
||||||
// Fixme: fully inconsistent instances management
|
// Fixme: fully inconsistent instances management
|
||||||
// dirty global var is a bad fix
|
// dirty global var is a bad fix
|
||||||
extern instance_t legacyInstanceMapping;
|
extern instance_t legacyInstanceMapping;
|
||||||
legacyInstanceMapping = DUuniqInstance = getCxt(DUtype, myInstance)->gtpInst;
|
legacyInstanceMapping = DUuniqInstance = getCxt(DUtype, myInstance)->gtpInst;
|
||||||
du_task_send_sctp_association_req(myInstance,msgSetup);
|
du_task_send_sctp_association_req(myInstance,msgSetup);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -43,15 +43,15 @@
|
|||||||
#include <openair3/ocp-gtpu/gtp_itf.h>
|
#include <openair3/ocp-gtpu/gtp_itf.h>
|
||||||
|
|
||||||
boolean_t lteDURecvCb( protocol_ctxt_t *ctxt_pP,
|
boolean_t lteDURecvCb( protocol_ctxt_t *ctxt_pP,
|
||||||
const srb_flag_t srb_flagP,
|
const srb_flag_t srb_flagP,
|
||||||
const rb_id_t rb_idP,
|
const rb_id_t rb_idP,
|
||||||
const mui_t muiP,
|
const mui_t muiP,
|
||||||
const confirm_t confirmP,
|
const confirm_t confirmP,
|
||||||
const sdu_size_t sdu_buffer_sizeP,
|
const sdu_size_t sdu_buffer_sizeP,
|
||||||
unsigned char *const sdu_buffer_pP,
|
unsigned char *const sdu_buffer_pP,
|
||||||
const pdcp_transmission_mode_t modeP,
|
const pdcp_transmission_mode_t modeP,
|
||||||
const uint32_t *sourceL2Id,
|
const uint32_t *sourceL2Id,
|
||||||
const uint32_t *destinationL2Id) {
|
const uint32_t *destinationL2Id) {
|
||||||
// The buffer comes from the stack in gtp-u thread, we have a make a separate buffer to enqueue in a inter-thread message queue
|
// The buffer comes from the stack in gtp-u thread, we have a make a separate buffer to enqueue in a inter-thread message queue
|
||||||
mem_block_t *sdu=get_free_mem_block(sdu_buffer_sizeP, __func__);
|
mem_block_t *sdu=get_free_mem_block(sdu_buffer_sizeP, __func__);
|
||||||
memcpy(sdu->data, sdu_buffer_pP, sdu_buffer_sizeP);
|
memcpy(sdu->data, sdu_buffer_pP, sdu_buffer_sizeP);
|
||||||
@@ -134,53 +134,55 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
/* DRB */
|
/* DRB */
|
||||||
F1AP_UEContextSetupRequestIEs_t *ieDrb;
|
F1AP_UEContextSetupRequestIEs_t *ieDrb;
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupRequestIEs_t, ieDrb, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupRequestIEs_t, ieDrb, container,
|
||||||
F1AP_ProtocolIE_ID_id_DRBs_ToBeSetup_List, false);
|
F1AP_ProtocolIE_ID_id_DRBs_ToBeSetup_List, false);
|
||||||
|
|
||||||
if(ieDrb!=NULL) {
|
if(ieDrb!=NULL) {
|
||||||
f1ap_ue_context_setup_req->drbs_to_be_setup_length = ieDrb->value.choice.DRBs_ToBeSetup_List.list.count;
|
f1ap_ue_context_setup_req->drbs_to_be_setup_length = ieDrb->value.choice.DRBs_ToBeSetup_List.list.count;
|
||||||
f1ap_ue_context_setup_req->drbs_to_be_setup = calloc(f1ap_ue_context_setup_req->drbs_to_be_setup_length,
|
f1ap_ue_context_setup_req->drbs_to_be_setup = calloc(f1ap_ue_context_setup_req->drbs_to_be_setup_length,
|
||||||
sizeof(f1ap_drb_to_be_setup_t));
|
sizeof(f1ap_drb_to_be_setup_t));
|
||||||
AssertFatal(f1ap_ue_context_setup_req->drbs_to_be_setup,
|
AssertFatal(f1ap_ue_context_setup_req->drbs_to_be_setup,
|
||||||
"could not allocate memory for f1ap_ue_context_setup_req->drbs_to_be_setup\n");
|
"could not allocate memory for f1ap_ue_context_setup_req->drbs_to_be_setup\n");
|
||||||
|
|
||||||
for (i = 0; i < f1ap_ue_context_setup_req->drbs_to_be_setup_length; ++i) {
|
for (i = 0; i < f1ap_ue_context_setup_req->drbs_to_be_setup_length; ++i) {
|
||||||
f1ap_drb_to_be_setup_t *drb_p = &f1ap_ue_context_setup_req->drbs_to_be_setup[i];
|
f1ap_drb_to_be_setup_t *drb_p = &f1ap_ue_context_setup_req->drbs_to_be_setup[i];
|
||||||
F1AP_DRBs_ToBeSetup_Item_t *drbs_tobesetup_item_p =
|
F1AP_DRBs_ToBeSetup_Item_t *drbs_tobesetup_item_p =
|
||||||
&((F1AP_DRBs_ToBeSetup_ItemIEs_t *)ieDrb->value.choice.DRBs_ToBeSetup_List.list.array[i])->value.choice.DRBs_ToBeSetup_Item;
|
&((F1AP_DRBs_ToBeSetup_ItemIEs_t *)ieDrb->value.choice.DRBs_ToBeSetup_List.list.array[i])->value.choice.DRBs_ToBeSetup_Item;
|
||||||
drb_p->drb_id = drbs_tobesetup_item_p->dRBID;
|
drb_p->drb_id = drbs_tobesetup_item_p->dRBID;
|
||||||
/* TODO in the following, assume only one UP UL TNL is present.
|
/* TODO in the following, assume only one UP UL TNL is present.
|
||||||
* this matches/assumes OAI CU implementation, can be up to 2! */
|
* this matches/assumes OAI CU implementation, can be up to 2! */
|
||||||
drb_p->up_ul_tnl_length = 1;
|
drb_p->up_ul_tnl_length = 1;
|
||||||
AssertFatal(drbs_tobesetup_item_p->uLUPTNLInformation_ToBeSetup_List.list.count > 0,
|
AssertFatal(drbs_tobesetup_item_p->uLUPTNLInformation_ToBeSetup_List.list.count > 0,
|
||||||
"no UL UP TNL Information in DRBs to be Setup list\n");
|
"no UL UP TNL Information in DRBs to be Setup list\n");
|
||||||
F1AP_ULUPTNLInformation_ToBeSetup_Item_t *ul_up_tnl_info_p = (F1AP_ULUPTNLInformation_ToBeSetup_Item_t *)drbs_tobesetup_item_p->uLUPTNLInformation_ToBeSetup_List.list.array[0];
|
F1AP_ULUPTNLInformation_ToBeSetup_Item_t *ul_up_tnl_info_p = (F1AP_ULUPTNLInformation_ToBeSetup_Item_t *)drbs_tobesetup_item_p->uLUPTNLInformation_ToBeSetup_List.list.array[0];
|
||||||
F1AP_GTPTunnel_t *ul_up_tnl0 = ul_up_tnl_info_p->uLUPTNLInformation.choice.gTPTunnel;
|
F1AP_GTPTunnel_t *ul_up_tnl0 = ul_up_tnl_info_p->uLUPTNLInformation.choice.gTPTunnel;
|
||||||
BIT_STRING_TO_TRANSPORT_LAYER_ADDRESS_IPv4(&ul_up_tnl0->transportLayerAddress, drb_p->up_ul_tnl[0].tl_address);
|
BIT_STRING_TO_TRANSPORT_LAYER_ADDRESS_IPv4(&ul_up_tnl0->transportLayerAddress, drb_p->up_ul_tnl[0].tl_address);
|
||||||
OCTET_STRING_TO_INT32(&ul_up_tnl0->gTP_TEID, drb_p->up_ul_tnl[0].teid);
|
OCTET_STRING_TO_INT32(&ul_up_tnl0->gTP_TEID, drb_p->up_ul_tnl[0].teid);
|
||||||
// 3GPP assumes GTP-U is on port 2152, but OAI is configurable
|
// 3GPP assumes GTP-U is on port 2152, but OAI is configurable
|
||||||
drb_p->up_ul_tnl[0].port=getCxt(false,instance)->setupReq.CUport;
|
drb_p->up_ul_tnl[0].port=getCxt(false,instance)->setupReq.CUport;
|
||||||
|
|
||||||
switch (drbs_tobesetup_item_p->rLCMode) {
|
switch (drbs_tobesetup_item_p->rLCMode) {
|
||||||
case F1AP_RLCMode_rlc_am:
|
case F1AP_RLCMode_rlc_am:
|
||||||
drb_p->rlc_mode = RLC_MODE_AM;
|
drb_p->rlc_mode = RLC_MODE_AM;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
drb_p->rlc_mode = RLC_MODE_TM;
|
drb_p->rlc_mode = RLC_MODE_TM;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU)) {
|
if (!(RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU)) {
|
||||||
transport_layer_addr_t addr;
|
transport_layer_addr_t addr;
|
||||||
memcpy(addr.buffer, &drb_p->up_ul_tnl[0].tl_address, sizeof(drb_p->up_ul_tnl[0].tl_address));
|
memcpy(addr.buffer, &drb_p->up_ul_tnl[0].tl_address, sizeof(drb_p->up_ul_tnl[0].tl_address));
|
||||||
addr.length=sizeof(drb_p->up_ul_tnl[0].tl_address)*8;
|
addr.length=sizeof(drb_p->up_ul_tnl[0].tl_address)*8;
|
||||||
drb_p->up_dl_tnl[0].teid=newGtpuCreateTunnel(INSTANCE_DEFAULT,
|
drb_p->up_dl_tnl[0].teid=newGtpuCreateTunnel(INSTANCE_DEFAULT,
|
||||||
f1ap_ue_context_setup_req->rnti,
|
f1ap_ue_context_setup_req->rnti,
|
||||||
drb_p->drb_id,
|
drb_p->drb_id,
|
||||||
drb_p->drb_id,
|
drb_p->drb_id,
|
||||||
drb_p->up_ul_tnl[0].teid,
|
drb_p->up_ul_tnl[0].teid,
|
||||||
addr,
|
addr,
|
||||||
drb_p->up_ul_tnl[0].port,
|
drb_p->up_ul_tnl[0].port,
|
||||||
lteDURecvCb);
|
lteDURecvCb);
|
||||||
drb_p->up_dl_tnl_length++;
|
drb_p->up_dl_tnl_length++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,15 +190,15 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
/* SRB */
|
/* SRB */
|
||||||
F1AP_UEContextSetupRequestIEs_t *ieSrb;
|
F1AP_UEContextSetupRequestIEs_t *ieSrb;
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupRequestIEs_t, ieSrb, container,
|
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_UEContextSetupRequestIEs_t, ieSrb, container,
|
||||||
F1AP_ProtocolIE_ID_id_SRBs_ToBeSetup_List, false);
|
F1AP_ProtocolIE_ID_id_SRBs_ToBeSetup_List, false);
|
||||||
|
|
||||||
if(ieSrb != NULL) {
|
if(ieSrb != NULL) {
|
||||||
f1ap_ue_context_setup_req->srbs_to_be_setup_length = ieSrb->value.choice.SRBs_ToBeSetup_List.list.count;
|
f1ap_ue_context_setup_req->srbs_to_be_setup_length = ieSrb->value.choice.SRBs_ToBeSetup_List.list.count;
|
||||||
f1ap_ue_context_setup_req->srbs_to_be_setup = calloc(f1ap_ue_context_setup_req->srbs_to_be_setup_length,
|
f1ap_ue_context_setup_req->srbs_to_be_setup = calloc(f1ap_ue_context_setup_req->srbs_to_be_setup_length,
|
||||||
sizeof(f1ap_srb_to_be_setup_t));
|
sizeof(f1ap_srb_to_be_setup_t));
|
||||||
AssertFatal(f1ap_ue_context_setup_req->srbs_to_be_setup,
|
AssertFatal(f1ap_ue_context_setup_req->srbs_to_be_setup,
|
||||||
"could not allocate memory for f1ap_ue_context_setup_req->srbs_to_be_setup\n");
|
"could not allocate memory for f1ap_ue_context_setup_req->srbs_to_be_setup\n");
|
||||||
|
|
||||||
for (i = 0; i < f1ap_ue_context_setup_req->srbs_to_be_setup_length; ++i) {
|
for (i = 0; i < f1ap_ue_context_setup_req->srbs_to_be_setup_length; ++i) {
|
||||||
f1ap_srb_to_be_setup_t *srb_p = &f1ap_ue_context_setup_req->srbs_to_be_setup[i];
|
f1ap_srb_to_be_setup_t *srb_p = &f1ap_ue_context_setup_req->srbs_to_be_setup[i];
|
||||||
F1AP_SRBs_ToBeSetup_Item_t *srbs_tobesetup_item_p;
|
F1AP_SRBs_ToBeSetup_Item_t *srbs_tobesetup_item_p;
|
||||||
@@ -234,11 +236,12 @@ int DU_handle_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
|
|||||||
LOG_W(F1AP, "can't find RRCContainer in UEContextSetupRequestIEs by id %ld \n", F1AP_ProtocolIE_ID_id_RRCContainer);
|
LOG_W(F1AP, "can't find RRCContainer in UEContextSetupRequestIEs by id %ld \n", F1AP_ProtocolIE_ID_id_RRCContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU)
|
if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU)
|
||||||
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
|
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg_p);
|
||||||
else
|
else
|
||||||
// in 4G, race conditon is to fix
|
// in 4G, race conditon is to fix
|
||||||
DU_send_UE_CONTEXT_SETUP_RESPONSE(instance, f1ap_ue_context_setup_req);
|
DU_send_UE_CONTEXT_SETUP_RESPONSE(instance, f1ap_ue_context_setup_req);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,7 +264,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
|
|||||||
ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
|
ie1->id = F1AP_ProtocolIE_ID_id_gNB_CU_UE_F1AP_ID;
|
||||||
ie1->criticality = F1AP_Criticality_reject;
|
ie1->criticality = F1AP_Criticality_reject;
|
||||||
ie1->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_CU_UE_F1AP_ID;
|
ie1->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_CU_UE_F1AP_ID;
|
||||||
ie1->value.choice.GNB_CU_UE_F1AP_ID = req->gNB_CU_ue_id;
|
ie1->value.choice.GNB_CU_UE_F1AP_ID = req->gNB_CU_ue_id;
|
||||||
/* mandatory */
|
/* mandatory */
|
||||||
/* c2. GNB_DU_UE_F1AP_ID */
|
/* c2. GNB_DU_UE_F1AP_ID */
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie2);
|
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie2);
|
||||||
@@ -269,33 +272,32 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
|
|||||||
ie2->criticality = F1AP_Criticality_reject;
|
ie2->criticality = F1AP_Criticality_reject;
|
||||||
ie2->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_DU_UE_F1AP_ID;
|
ie2->value.present = F1AP_UEContextSetupResponseIEs__value_PR_GNB_DU_UE_F1AP_ID;
|
||||||
ie2->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(DUtype, instance, req->rnti);
|
ie2->value.choice.GNB_DU_UE_F1AP_ID = f1ap_get_du_ue_f1ap_id(DUtype, instance, req->rnti);
|
||||||
|
|
||||||
/* mandatory */
|
/* mandatory */
|
||||||
/* c3. DUtoCURRCInformation */
|
/* c3. DUtoCURRCInformation */
|
||||||
//if (0) {
|
//if (0) {
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie3);
|
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie3);
|
||||||
ie3->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation;
|
ie3->id = F1AP_ProtocolIE_ID_id_DUtoCURRCInformation;
|
||||||
ie3->criticality = F1AP_Criticality_reject;
|
ie3->criticality = F1AP_Criticality_reject;
|
||||||
ie3->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DUtoCURRCInformation;
|
ie3->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DUtoCURRCInformation;
|
||||||
{
|
{
|
||||||
/* cellGroupConfig */
|
/* cellGroupConfig */
|
||||||
OCTET_STRING_fromBuf(&ie3->value.choice.DUtoCURRCInformation.cellGroupConfig, (const char *)req->du_to_cu_rrc_information,
|
OCTET_STRING_fromBuf(&ie3->value.choice.DUtoCURRCInformation.cellGroupConfig, (const char *)req->du_to_cu_rrc_information,
|
||||||
req->du_to_cu_rrc_information_length);
|
req->du_to_cu_rrc_information_length);
|
||||||
|
|
||||||
/* OPTIONAL */
|
/* OPTIONAL */
|
||||||
/* measGapConfig */
|
/* measGapConfig */
|
||||||
if (0) {
|
if (0) {
|
||||||
asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.measGapConfig, tmp);
|
asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.measGapConfig, tmp);
|
||||||
OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
|
OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
|
||||||
}
|
|
||||||
|
|
||||||
/* OPTIONAL */
|
|
||||||
/* requestedP_MaxFR1 */
|
|
||||||
if (0) {
|
|
||||||
asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.requestedP_MaxFR1, tmp);
|
|
||||||
OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* OPTIONAL */
|
||||||
|
/* requestedP_MaxFR1 */
|
||||||
|
if (0) {
|
||||||
|
asn1cCalloc(ie3->value.choice.DUtoCURRCInformation.requestedP_MaxFR1, tmp);
|
||||||
|
OCTET_STRING_fromBuf(tmp, "asdsa", strlen("asdsa"));
|
||||||
|
}
|
||||||
|
}
|
||||||
//}
|
//}
|
||||||
|
|
||||||
/* optional */
|
/* optional */
|
||||||
@@ -337,6 +339,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
|
|||||||
ie7->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_List;
|
ie7->id = F1AP_ProtocolIE_ID_id_DRBs_Setup_List;
|
||||||
ie7->criticality = F1AP_Criticality_ignore;
|
ie7->criticality = F1AP_Criticality_ignore;
|
||||||
ie7->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_Setup_List;
|
ie7->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_Setup_List;
|
||||||
|
|
||||||
for (int i=0; i< req->drbs_to_be_setup_length; i++) {
|
for (int i=0; i< req->drbs_to_be_setup_length; i++) {
|
||||||
//
|
//
|
||||||
asn1cSequenceAdd(ie7->value.choice.DRBs_Setup_List.list,
|
asn1cSequenceAdd(ie7->value.choice.DRBs_Setup_List.list,
|
||||||
@@ -375,148 +378,148 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
|
|||||||
|
|
||||||
/* mandatory */
|
/* mandatory */
|
||||||
/* c8. SRBs_FailedToBeSetup_List */
|
/* c8. SRBs_FailedToBeSetup_List */
|
||||||
if(0){
|
if(0) {
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie8);
|
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie8);
|
||||||
ie8->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List;
|
ie8->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_List;
|
||||||
ie8->criticality = F1AP_Criticality_ignore;
|
ie8->criticality = F1AP_Criticality_ignore;
|
||||||
ie8->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_FailedToBeSetup_List;
|
ie8->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SRBs_FailedToBeSetup_List;
|
||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
//
|
//
|
||||||
asn1cSequenceAdd(ie8->value.choice.SRBs_FailedToBeSetup_List.list,
|
asn1cSequenceAdd(ie8->value.choice.SRBs_FailedToBeSetup_List.list,
|
||||||
F1AP_SRBs_FailedToBeSetup_ItemIEs_t, srbs_failedToBeSetup_item_ies);
|
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->id = F1AP_ProtocolIE_ID_id_SRBs_FailedToBeSetup_Item;
|
||||||
srbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
srbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||||
srbs_failedToBeSetup_item_ies->value.present = F1AP_SRBs_FailedToBeSetup_ItemIEs__value_PR_SRBs_FailedToBeSetup_Item;
|
srbs_failedToBeSetup_item_ies->value.present = F1AP_SRBs_FailedToBeSetup_ItemIEs__value_PR_SRBs_FailedToBeSetup_Item;
|
||||||
/* 8.1 SRBs_Setup_Item */
|
/* 8.1 SRBs_Setup_Item */
|
||||||
F1AP_SRBs_FailedToBeSetup_Item_t *srbs_failedToBeSetup_item=
|
F1AP_SRBs_FailedToBeSetup_Item_t *srbs_failedToBeSetup_item=
|
||||||
&srbs_failedToBeSetup_item_ies->value.choice.SRBs_FailedToBeSetup_Item;
|
&srbs_failedToBeSetup_item_ies->value.choice.SRBs_FailedToBeSetup_Item;
|
||||||
/* sRBID */
|
/* sRBID */
|
||||||
srbs_failedToBeSetup_item->sRBID = 13L;
|
srbs_failedToBeSetup_item->sRBID = 13L;
|
||||||
/* cause */
|
/* cause */
|
||||||
asn1cCalloc(srbs_failedToBeSetup_item->cause, tmp);
|
asn1cCalloc(srbs_failedToBeSetup_item->cause, tmp);
|
||||||
// dummy value
|
// dummy value
|
||||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||||
|
|
||||||
switch(tmp->present) {
|
switch(tmp->present) {
|
||||||
case F1AP_Cause_PR_radioNetwork:
|
case F1AP_Cause_PR_radioNetwork:
|
||||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_transport:
|
case F1AP_Cause_PR_transport:
|
||||||
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_protocol:
|
case F1AP_Cause_PR_protocol:
|
||||||
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_misc:
|
case F1AP_Cause_PR_misc:
|
||||||
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_NOTHING:
|
case F1AP_Cause_PR_NOTHING:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
} // switch
|
} // switch
|
||||||
} // for i
|
} // for i
|
||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
/* c9. DRBs_FailedToBeSetup_List */
|
/* c9. DRBs_FailedToBeSetup_List */
|
||||||
if(0){
|
if(0) {
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie9);
|
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie9);
|
||||||
ie9->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_List;
|
ie9->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_List;
|
||||||
ie9->criticality = F1AP_Criticality_ignore;
|
ie9->criticality = F1AP_Criticality_ignore;
|
||||||
ie9->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_FailedToBeSetup_List;
|
ie9->value.present = F1AP_UEContextSetupResponseIEs__value_PR_DRBs_FailedToBeSetup_List;
|
||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ie9->value.choice.DRBs_FailedToBeSetup_List.list,
|
asn1cSequenceAdd(ie9->value.choice.DRBs_FailedToBeSetup_List.list,
|
||||||
F1AP_DRBs_FailedToBeSetup_ItemIEs_t, drbs_failedToBeSetup_item_ies);
|
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->id = F1AP_ProtocolIE_ID_id_DRBs_FailedToBeSetup_Item;
|
||||||
drbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
drbs_failedToBeSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||||
drbs_failedToBeSetup_item_ies->value.present = F1AP_DRBs_FailedToBeSetup_ItemIEs__value_PR_DRBs_FailedToBeSetup_Item;
|
drbs_failedToBeSetup_item_ies->value.present = F1AP_DRBs_FailedToBeSetup_ItemIEs__value_PR_DRBs_FailedToBeSetup_Item;
|
||||||
/* 9.1 DRBs_Setup_Item */
|
/* 9.1 DRBs_Setup_Item */
|
||||||
/* ADD */
|
/* ADD */
|
||||||
F1AP_DRBs_FailedToBeSetup_Item_t *drbs_failedToBeSetup_item=
|
F1AP_DRBs_FailedToBeSetup_Item_t *drbs_failedToBeSetup_item=
|
||||||
&drbs_failedToBeSetup_item_ies->value.choice.DRBs_FailedToBeSetup_Item;
|
&drbs_failedToBeSetup_item_ies->value.choice.DRBs_FailedToBeSetup_Item;
|
||||||
/* dRBID */
|
/* dRBID */
|
||||||
drbs_failedToBeSetup_item->dRBID = 14;
|
drbs_failedToBeSetup_item->dRBID = 14;
|
||||||
/* cause */
|
/* cause */
|
||||||
asn1cCalloc(drbs_failedToBeSetup_item->cause,tmp);
|
asn1cCalloc(drbs_failedToBeSetup_item->cause,tmp);
|
||||||
// dummy value
|
// dummy value
|
||||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||||
|
|
||||||
switch(tmp->present) {
|
switch(tmp->present) {
|
||||||
case F1AP_Cause_PR_radioNetwork:
|
case F1AP_Cause_PR_radioNetwork:
|
||||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_transport:
|
case F1AP_Cause_PR_transport:
|
||||||
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_protocol:
|
case F1AP_Cause_PR_protocol:
|
||||||
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_misc:
|
case F1AP_Cause_PR_misc:
|
||||||
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_NOTHING:
|
case F1AP_Cause_PR_NOTHING:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
} // switch
|
} // switch
|
||||||
} // for i
|
} // for i
|
||||||
}
|
}
|
||||||
|
|
||||||
// /* */
|
// /* */
|
||||||
/* c10. SCell_FailedtoSetup_List */
|
/* c10. SCell_FailedtoSetup_List */
|
||||||
if(0){
|
if(0) {
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie10);
|
asn1cSequenceAdd(out->protocolIEs.list, F1AP_UEContextSetupResponseIEs_t, ie10);
|
||||||
ie10->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_List;
|
ie10->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_List;
|
||||||
ie10->criticality = F1AP_Criticality_ignore;
|
ie10->criticality = F1AP_Criticality_ignore;
|
||||||
ie10->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SCell_FailedtoSetup_List;
|
ie10->value.present = F1AP_UEContextSetupResponseIEs__value_PR_SCell_FailedtoSetup_List;
|
||||||
|
|
||||||
for (int i=0; i<1; i++) {
|
for (int i=0; i<1; i++) {
|
||||||
asn1cSequenceAdd(ie10->value.choice.SCell_FailedtoSetup_List.list,
|
asn1cSequenceAdd(ie10->value.choice.SCell_FailedtoSetup_List.list,
|
||||||
F1AP_SCell_FailedtoSetup_ItemIEs_t, sCell_FailedtoSetup_item_ies);
|
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->id = F1AP_ProtocolIE_ID_id_SCell_FailedtoSetup_Item;
|
||||||
sCell_FailedtoSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
sCell_FailedtoSetup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||||
sCell_FailedtoSetup_item_ies->value.present = F1AP_SCell_FailedtoSetup_ItemIEs__value_PR_SCell_FailedtoSetup_Item;
|
sCell_FailedtoSetup_item_ies->value.present = F1AP_SCell_FailedtoSetup_ItemIEs__value_PR_SCell_FailedtoSetup_Item;
|
||||||
/* 10.1 DRBs_Setup_Item */
|
/* 10.1 DRBs_Setup_Item */
|
||||||
F1AP_SCell_FailedtoSetup_Item_t *sCell_FailedtoSetup_item=
|
F1AP_SCell_FailedtoSetup_Item_t *sCell_FailedtoSetup_item=
|
||||||
&sCell_FailedtoSetup_item_ies->value.choice.SCell_FailedtoSetup_Item;
|
&sCell_FailedtoSetup_item_ies->value.choice.SCell_FailedtoSetup_Item;
|
||||||
/* sCell_ID */
|
/* sCell_ID */
|
||||||
addnRCGI(sCell_FailedtoSetup_item->sCell_ID,f1ap_req(false, instance)->cell+i);
|
addnRCGI(sCell_FailedtoSetup_item->sCell_ID,f1ap_req(false, instance)->cell+i);
|
||||||
/* cause */
|
/* cause */
|
||||||
asn1cCalloc(sCell_FailedtoSetup_item->cause, tmp);
|
asn1cCalloc(sCell_FailedtoSetup_item->cause, tmp);
|
||||||
// dummy value
|
// dummy value
|
||||||
tmp->present = F1AP_Cause_PR_radioNetwork;
|
tmp->present = F1AP_Cause_PR_radioNetwork;
|
||||||
|
|
||||||
switch(tmp->present) {
|
switch(tmp->present) {
|
||||||
case F1AP_Cause_PR_radioNetwork:
|
case F1AP_Cause_PR_radioNetwork:
|
||||||
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
tmp->choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_transport:
|
case F1AP_Cause_PR_transport:
|
||||||
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
tmp->choice.transport = F1AP_CauseTransport_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_protocol:
|
case F1AP_Cause_PR_protocol:
|
||||||
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
tmp->choice.protocol = F1AP_CauseProtocol_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_misc:
|
case F1AP_Cause_PR_misc:
|
||||||
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
tmp->choice.misc = F1AP_CauseMisc_unspecified;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F1AP_Cause_PR_NOTHING:
|
case F1AP_Cause_PR_NOTHING:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
} // switch
|
} // switch
|
||||||
} // for i
|
} // for i
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mandatory */
|
/* mandatory */
|
||||||
@@ -528,7 +531,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
|
|||||||
|
|
||||||
for (int i=0; i< req->srbs_to_be_setup_length; i++) {//
|
for (int i=0; i< req->srbs_to_be_setup_length; i++) {//
|
||||||
asn1cSequenceAdd(ie11->value.choice.SRBs_Setup_List.list,
|
asn1cSequenceAdd(ie11->value.choice.SRBs_Setup_List.list,
|
||||||
F1AP_SRBs_Setup_ItemIEs_t, srbs_setup_item_ies);
|
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->id = F1AP_ProtocolIE_ID_id_SRBs_Setup_Item;
|
||||||
srbs_setup_item_ies->criticality = F1AP_Criticality_ignore;
|
srbs_setup_item_ies->criticality = F1AP_Criticality_ignore;
|
||||||
srbs_setup_item_ies->value.present = F1AP_SRBs_Setup_ItemIEs__value_PR_SRBs_Setup_Item;
|
srbs_setup_item_ies->value.present = F1AP_SRBs_Setup_ItemIEs__value_PR_SRBs_Setup_Item;
|
||||||
@@ -679,7 +682,6 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance,
|
|||||||
AssertFatal(ctxt.rnti == rnti,
|
AssertFatal(ctxt.rnti == rnti,
|
||||||
"RNTI obtained through DU ID (%x) is different from CU ID (%x)\n",
|
"RNTI obtained through DU ID (%x) is different from CU ID (%x)\n",
|
||||||
rnti, ctxt.rnti);
|
rnti, ctxt.rnti);
|
||||||
|
|
||||||
int UE_out_of_sync = 0;
|
int UE_out_of_sync = 0;
|
||||||
|
|
||||||
if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU) {
|
if (RC.nrrrc && RC.nrrrc[instance]->node_type == ngran_gNB_DU) {
|
||||||
@@ -753,34 +755,32 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance,
|
|||||||
DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance, &cplt);
|
DU_send_UE_CONTEXT_RELEASE_COMPLETE(instance, &cplt);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
struct rrc_eNB_ue_context_s *ue_context_p;
|
struct rrc_eNB_ue_context_s *ue_context_p;
|
||||||
|
|
||||||
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.instance], ctxt.rnti);
|
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt.instance], ctxt.rnti);
|
||||||
|
|
||||||
if (ue_context_p && !UE_out_of_sync) {
|
if (ue_context_p && !UE_out_of_sync) {
|
||||||
/* UE exists and is in sync so we start a timer before releasing the
|
/* UE exists and is in sync so we start a timer before releasing the
|
||||||
* connection */
|
* connection */
|
||||||
pthread_mutex_lock(&rrc_release_freelist);
|
pthread_mutex_lock(&rrc_release_freelist);
|
||||||
|
|
||||||
for (uint16_t release_num = 0; release_num < NUMBER_OF_UE_MAX; release_num++) {
|
for (uint16_t release_num = 0; release_num < NUMBER_OF_UE_MAX; release_num++) {
|
||||||
if (rrc_release_info.RRC_release_ctrl[release_num].flag == 0) {
|
if (rrc_release_info.RRC_release_ctrl[release_num].flag == 0) {
|
||||||
if (ue_context_p->ue_context.ue_release_timer_s1 > 0)
|
if (ue_context_p->ue_context.ue_release_timer_s1 > 0)
|
||||||
rrc_release_info.RRC_release_ctrl[release_num].flag = 1;
|
rrc_release_info.RRC_release_ctrl[release_num].flag = 1;
|
||||||
else
|
else
|
||||||
rrc_release_info.RRC_release_ctrl[release_num].flag = 2;
|
rrc_release_info.RRC_release_ctrl[release_num].flag = 2;
|
||||||
|
|
||||||
rrc_release_info.RRC_release_ctrl[release_num].rnti = ctxt.rnti;
|
rrc_release_info.RRC_release_ctrl[release_num].rnti = ctxt.rnti;
|
||||||
LOG_D(F1AP, "add rrc_release_info RNTI %x\n", ctxt.rnti);
|
LOG_D(F1AP, "add rrc_release_info RNTI %x\n", ctxt.rnti);
|
||||||
// TODO: how to provide the correct MUI?
|
// TODO: how to provide the correct MUI?
|
||||||
rrc_release_info.RRC_release_ctrl[release_num].rrc_eNB_mui = 0;
|
rrc_release_info.RRC_release_ctrl[release_num].rrc_eNB_mui = 0;
|
||||||
rrc_release_info.num_UEs++;
|
rrc_release_info.num_UEs++;
|
||||||
LOG_D(RRC,"Generate DLSCH Release send: index %d rnti %x mui %d flag %d \n",release_num,
|
LOG_D(RRC,"Generate DLSCH Release send: index %d rnti %x mui %d flag %d \n",release_num,
|
||||||
ctxt.rnti, 0, rrc_release_info.RRC_release_ctrl[release_num].flag);
|
ctxt.rnti, 0, rrc_release_info.RRC_release_ctrl[release_num].flag);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_mutex_unlock(&rrc_release_freelist);
|
pthread_mutex_unlock(&rrc_release_freelist);
|
||||||
ue_context_p->ue_context.ue_release_timer_s1 = 0;
|
ue_context_p->ue_context.ue_release_timer_s1 = 0;
|
||||||
} else if (ue_context_p && UE_out_of_sync) {
|
} else if (ue_context_p && UE_out_of_sync) {
|
||||||
@@ -789,7 +789,7 @@ int DU_handle_UE_CONTEXT_RELEASE_COMMAND(instance_t instance,
|
|||||||
} else {
|
} else {
|
||||||
LOG_E(F1AP, "no ue_context for RNTI %x, acknowledging release\n", rnti);
|
LOG_E(F1AP, "no ue_context for RNTI %x, acknowledging release\n", rnti);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO send this once the connection has really been released */
|
/* TODO send this once the connection has really been released */
|
||||||
f1ap_ue_context_release_cplt_t cplt;
|
f1ap_ue_context_release_cplt_t cplt;
|
||||||
cplt.rnti = ctxt.rnti;
|
cplt.rnti = ctxt.rnti;
|
||||||
|
|||||||
@@ -50,10 +50,12 @@ int f1ap_encode_pdu(F1AP_F1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *length) {
|
|||||||
char errbuf[128]; /* Buffer for error message */
|
char errbuf[128]; /* Buffer for error message */
|
||||||
size_t errlen = sizeof(errbuf); /* Size of the buffer */
|
size_t errlen = sizeof(errbuf); /* Size of the buffer */
|
||||||
int ret = asn_check_constraints(&asn_DEF_F1AP_F1AP_PDU, pdu, errbuf, &errlen);
|
int ret = asn_check_constraints(&asn_DEF_F1AP_F1AP_PDU, pdu, errbuf, &errlen);
|
||||||
|
|
||||||
/* assert(errlen < sizeof(errbuf)); // Guaranteed: you may rely on that */
|
/* assert(errlen < sizeof(errbuf)); // Guaranteed: you may rely on that */
|
||||||
if(ret) {
|
if(ret) {
|
||||||
fprintf(stderr, "Constraint validation failed: %s\n", errbuf);
|
fprintf(stderr, "Constraint validation failed: %s\n", errbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
encoded = aper_encode_to_new_buffer(&asn_DEF_F1AP_F1AP_PDU, 0, pdu, (void **)buffer);
|
encoded = aper_encode_to_new_buffer(&asn_DEF_F1AP_F1AP_PDU, 0, pdu, (void **)buffer);
|
||||||
|
|
||||||
if (encoded < 0) {
|
if (encoded < 0) {
|
||||||
|
|||||||
@@ -472,7 +472,7 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int incoming_bearer
|
|||||||
char ip4[INET_ADDRSTRLEN];
|
char ip4[INET_ADDRSTRLEN];
|
||||||
char ip6[INET6_ADDRSTRLEN];
|
char ip6[INET6_ADDRSTRLEN];
|
||||||
LOG_I(GTPU, "[%ld] Created tunnel for RNTI %x, teid for DL: %x, teid for UL %x to remote IPv4: %s, IPv6 %s\n",
|
LOG_I(GTPU, "[%ld] Created tunnel for RNTI %x, teid for DL: %x, teid for UL %x to remote IPv4: %s, IPv6 %s\n",
|
||||||
instance,
|
instance,
|
||||||
rnti,
|
rnti,
|
||||||
tmp->teid_incoming,
|
tmp->teid_incoming,
|
||||||
tmp->teid_outgoing,
|
tmp->teid_outgoing,
|
||||||
@@ -485,7 +485,7 @@ int ocp_gtpv1u_create_s1u_tunnel(instance_t instance,
|
|||||||
const gtpv1u_enb_create_tunnel_req_t *create_tunnel_req,
|
const gtpv1u_enb_create_tunnel_req_t *create_tunnel_req,
|
||||||
gtpv1u_enb_create_tunnel_resp_t *create_tunnel_resp) {
|
gtpv1u_enb_create_tunnel_resp_t *create_tunnel_resp) {
|
||||||
LOG_D(GTPU, "[%ld] Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n",
|
LOG_D(GTPU, "[%ld] Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n",
|
||||||
instance,
|
instance,
|
||||||
create_tunnel_req->rnti,
|
create_tunnel_req->rnti,
|
||||||
create_tunnel_req->num_tunnels,
|
create_tunnel_req->num_tunnels,
|
||||||
create_tunnel_req->sgw_S1u_teid[0]);
|
create_tunnel_req->sgw_S1u_teid[0]);
|
||||||
@@ -520,7 +520,7 @@ int ocp_gtpv1u_update_s1u_tunnel(
|
|||||||
const rnti_t prior_rnti
|
const rnti_t prior_rnti
|
||||||
) {
|
) {
|
||||||
LOG_D(GTPU, "[%ld] Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %x, eps_bearer_id %x\n",
|
LOG_D(GTPU, "[%ld] Start update tunnels for old RNTI %x, new RNTI %x, num_tunnels %d, sgw_S1u_teid %x, eps_bearer_id %x\n",
|
||||||
instance,
|
instance,
|
||||||
prior_rnti,
|
prior_rnti,
|
||||||
create_tunnel_req->rnti,
|
create_tunnel_req->rnti,
|
||||||
create_tunnel_req->num_tunnels,
|
create_tunnel_req->num_tunnels,
|
||||||
@@ -553,7 +553,7 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance,
|
|||||||
const gtpv1u_gnb_create_tunnel_req_t *const create_tunnel_req,
|
const gtpv1u_gnb_create_tunnel_req_t *const create_tunnel_req,
|
||||||
gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp) {
|
gtpv1u_gnb_create_tunnel_resp_t *const create_tunnel_resp) {
|
||||||
LOG_D(GTPU, "[%ld] Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n",
|
LOG_D(GTPU, "[%ld] Start create tunnels for RNTI %x, num_tunnels %d, sgw_S1u_teid %x\n",
|
||||||
instance,
|
instance,
|
||||||
create_tunnel_req->rnti,
|
create_tunnel_req->rnti,
|
||||||
create_tunnel_req->num_tunnels,
|
create_tunnel_req->num_tunnels,
|
||||||
create_tunnel_req->outgoing_teid[0]);
|
create_tunnel_req->outgoing_teid[0]);
|
||||||
|
|||||||
Reference in New Issue
Block a user