Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
f9bb4150
Commit
f9bb4150
authored
3 years ago
by
Laurent Thomas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
astyle only
parent
b7a91d56
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
333 additions
and
329 deletions
+333
-329
openair2/F1AP/f1ap_common.c
openair2/F1AP/f1ap_common.c
+4
-3
openair2/F1AP/f1ap_cu_interface_management.c
openair2/F1AP/f1ap_cu_interface_management.c
+19
-20
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
+0
-1
openair2/F1AP/f1ap_cu_task.c
openair2/F1AP/f1ap_cu_task.c
+9
-8
openair2/F1AP/f1ap_cu_ue_context_management.c
openair2/F1AP/f1ap_cu_ue_context_management.c
+55
-51
openair2/F1AP/f1ap_du_interface_management.c
openair2/F1AP/f1ap_du_interface_management.c
+4
-2
openair2/F1AP/f1ap_du_rrc_message_transfer.c
openair2/F1AP/f1ap_du_rrc_message_transfer.c
+4
-7
openair2/F1AP/f1ap_du_task.c
openair2/F1AP/f1ap_du_task.c
+14
-15
openair2/F1AP/f1ap_du_ue_context_management.c
openair2/F1AP/f1ap_du_ue_context_management.c
+218
-218
openair2/F1AP/f1ap_encoder.c
openair2/F1AP/f1ap_encoder.c
+2
-0
openair3/ocp-gtpu/gtp_itf.cpp
openair3/ocp-gtpu/gtp_itf.cpp
+4
-4
No files found.
openair2/F1AP/f1ap_common.c
View file @
f9bb4150
...
@@ -100,6 +100,7 @@ int f1ap_add_ue(F1_t isCu,
...
@@ -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,
...
@@ -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
;
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_cu_interface_management.c
View file @
f9bb4150
...
@@ -97,8 +97,6 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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;
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
View file @
f9bb4150
...
@@ -100,7 +100,6 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -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
);
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_cu_task.c
View file @
f9bb4150
...
@@ -42,7 +42,7 @@
...
@@ -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) {
...
@@ -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
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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) {
...
@@ -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
:
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_cu_ue_context_management.c
View file @
f9bb4150
...
@@ -113,7 +113,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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) {
...
@@ -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
)
{
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_du_interface_management.c
View file @
f9bb4150
...
@@ -44,8 +44,10 @@ int to_NRNRB(int nrb) {
...
@@ -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,
...
@@ -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,
...
@@ -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
;
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_du_rrc_message_transfer.c
View file @
f9bb4150
...
@@ -137,7 +137,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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
;
}
}
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_du_task.c
View file @
f9bb4150
...
@@ -85,7 +85,6 @@ void du_task_handle_sctp_association_resp(instance_t instance, sctp_new_associat
...
@@ -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
...
@@ -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) {
...
@@ -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
;
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_du_ue_context_management.c
View file @
f9bb4150
...
@@ -43,15 +43,15 @@
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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
...
@@ -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
...
@@ -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 */
/* measGapConfig */
if
(
0
)
{
asn1cCalloc
(
ie3
->
value
.
choice
.
DUtoCURRCInformation
.
measGapConfig
,
tmp
);
OCTET_STRING_fromBuf
(
tmp
,
"asdsa"
,
strlen
(
"asdsa"
));
}
/* OPTIONAL */
/* OPTIONAL */
/* requestedP_MaxFR1 */
/* measGapConfig */
if
(
0
)
{
if
(
0
)
{
asn1cCalloc
(
ie3
->
value
.
choice
.
DUtoCURRCInformation
.
requestedP_MaxFR1
,
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 */
/* optional */
...
@@ -337,6 +339,7 @@ int DU_send_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, f1ap_ue_context_setup
...
@@ -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
...
@@ -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
...
@@ -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,
...
@@ -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,
...
@@ -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,
...
@@ -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
;
...
...
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_encoder.c
View file @
f9bb4150
...
@@ -50,10 +50,12 @@ int f1ap_encode_pdu(F1AP_F1AP_PDU_t *pdu, uint8_t **buffer, uint32_t *length) {
...
@@ -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
)
{
...
...
This diff is collapsed.
Click to expand it.
openair3/ocp-gtpu/gtp_itf.cpp
View file @
f9bb4150
...
@@ -472,7 +472,7 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int incoming_bearer
...
@@ -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,
...
@@ -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(
...
@@ -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,
...
@@ -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
]);
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment