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
zzha zzha
OpenXG-RAN
Commits
42ea1f82
Commit
42ea1f82
authored
Jun 27, 2021
by
Laurent THOMAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix F1 setup messages memory error
parent
66e31967
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
816 additions
and
1083 deletions
+816
-1083
openair2/F1AP/f1ap_cu_interface_management.c
openair2/F1AP/f1ap_cu_interface_management.c
+184
-261
openair2/F1AP/f1ap_du_interface_management.c
openair2/F1AP/f1ap_du_interface_management.c
+625
-808
openair3/SCTP/sctp_eNB_task.c
openair3/SCTP/sctp_eNB_task.c
+7
-14
No files found.
openair2/F1AP/f1ap_cu_interface_management.c
View file @
42ea1f82
...
...
@@ -39,6 +39,9 @@
extern
f1ap_setup_req_t
*
f1ap_du_data_from_du
;
extern
RAN_CONTEXT_t
RC
;
#define asn1cCalloc(VaR, TyPe, lOcPtr) TyPe *lOcPtr=VaR=(TyPe*) calloc(1,sizeof(TyPe));
#define asn1cSequenceAdd(VaR, TyPe, lOcPtr) TyPe *lOcPtr=(TyPe*) calloc(1,sizeof(TyPe)); ASN_SEQUENCE_ADD(&VaR,lOcPtr);
int
CU_send_RESET
(
instance_t
instance
,
F1AP_Reset_t
*
Reset
)
{
AssertFatal
(
1
==
0
,
"Not implemented yet
\n
"
);
}
...
...
@@ -83,18 +86,13 @@ int CU_send_ERROR_INDICATION(instance_t instance, F1AP_ErrorIndication_t *ErrorI
int
CU_handle_F1_SETUP_REQUEST
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
F1AP_F1AP_PDU_t
*
pdu
)
{
F1AP_F1AP_PDU_t
*
pdu
)
{
LOG_D
(
F1AP
,
"CU_handle_F1_SETUP_REQUEST
\n
"
);
MessageDef
*
message_p
;
F1AP_F1SetupRequest_t
*
container
;
F1AP_F1SetupRequestIEs_t
*
ie
;
int
i
=
0
;
DevAssert
(
pdu
!=
NULL
);
container
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
F1SetupRequest
;
/* F1 Setup Request == Non UE-related procedure -> stream 0 */
...
...
@@ -104,17 +102,14 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
}
message_p
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
F1AP_SETUP_REQ
);
/* assoc_id */
F1AP_SETUP_REQ
(
message_p
).
assoc_id
=
assoc_id
;
/* gNB_DU_id */
// this function exits if the ie is mandatory
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_F1SetupRequestIEs_t
,
ie
,
container
,
F1AP_ProtocolIE_ID_id_gNB_DU_ID
,
true
);
asn_INTEGER2ulong
(
&
ie
->
value
.
choice
.
GNB_DU_ID
,
&
F1AP_SETUP_REQ
(
message_p
).
gNB_DU_id
);
LOG_D
(
F1AP
,
"F1AP_SETUP_REQ(message_p).gNB_DU_id %lu
\n
"
,
F1AP_SETUP_REQ
(
message_p
).
gNB_DU_id
);
/* gNB_DU_name */
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_F1SetupRequestIEs_t
,
ie
,
container
,
F1AP_ProtocolIE_ID_id_gNB_DU_Name
,
true
);
...
...
@@ -124,19 +119,16 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
/* Convert the mme name to a printable string */
F1AP_SETUP_REQ
(
message_p
).
gNB_DU_name
[
ie
->
value
.
choice
.
GNB_DU_Name
.
size
]
=
'\0'
;
LOG_D
(
F1AP
,
"F1AP_SETUP_REQ(message_p).gNB_DU_name %s
\n
"
,
F1AP_SETUP_REQ
(
message_p
).
gNB_DU_name
);
/* GNB_DU_Served_Cells_List */
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_F1SetupRequestIEs_t
,
ie
,
container
,
F1AP_ProtocolIE_ID_id_gNB_DU_Served_Cells_List
,
true
);
F1AP_SETUP_REQ
(
message_p
).
num_cells_available
=
ie
->
value
.
choice
.
GNB_DU_Served_Cells_List
.
list
.
count
;
LOG_D
(
F1AP
,
"F1AP_SETUP_REQ(message_p).num_cells_available %d
\n
"
,
F1AP_SETUP_REQ
(
message_p
).
num_cells_available
);
int
num_cells_available
=
F1AP_SETUP_REQ
(
message_p
).
num_cells_available
;
for
(
i
=
0
;
i
<
num_cells_available
;
i
++
)
{
F1AP_GNB_DU_Served_Cells_Item_t
*
served_cells_item_p
;
served_cells_item_p
=
&
(((
F1AP_GNB_DU_Served_Cells_ItemIEs_t
*
)
ie
->
value
.
choice
.
GNB_DU_Served_Cells_List
.
list
.
array
[
i
])
->
value
.
choice
.
GNB_DU_Served_Cells_Item
);
/* tac */
...
...
@@ -145,12 +137,11 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
LOG_D
(
F1AP
,
"F1AP_SETUP_REQ(message_p).tac[%d] %d
\n
"
,
i
,
F1AP_SETUP_REQ
(
message_p
).
tac
[
i
]);
}
/* - nRCGI */
TBCD_TO_MCC_MNC
(
&
(
served_cells_item_p
->
served_Cell_Information
.
nRCGI
.
pLMN_Identity
),
F1AP_SETUP_REQ
(
message_p
).
mcc
[
i
],
F1AP_SETUP_REQ
(
message_p
).
mnc
[
i
],
F1AP_SETUP_REQ
(
message_p
).
mnc_digit_length
[
i
]);
// NR cellID
BIT_STRING_TO_NR_CELL_IDENTITY
(
&
served_cells_item_p
->
served_Cell_Information
.
nRCGI
.
nRCellIdentity
,
F1AP_SETUP_REQ
(
message_p
).
nr_cellid
[
i
]);
...
...
@@ -168,7 +159,6 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
F1AP_SETUP_REQ
(
message_p
).
nr_pci
[
i
]
=
served_cells_item_p
->
served_Cell_Information
.
nRPCI
;
LOG_D
(
F1AP
,
"F1AP_SETUP_REQ(message_p).nr_pci[%d] %d
\n
"
,
i
,
F1AP_SETUP_REQ
(
message_p
).
nr_pci
[
i
]);
// System Information
/* mib */
F1AP_SETUP_REQ
(
message_p
).
mib
[
i
]
=
calloc
(
served_cells_item_p
->
gNB_DU_System_Information
->
mIB_message
.
size
+
1
,
sizeof
(
char
));
...
...
@@ -179,7 +169,6 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
F1AP_SETUP_REQ
(
message_p
).
mib_length
[
i
]
=
served_cells_item_p
->
gNB_DU_System_Information
->
mIB_message
.
size
;
LOG_D
(
F1AP
,
"F1AP_SETUP_REQ(message_p).mib[%d] %s , len = %d
\n
"
,
i
,
F1AP_SETUP_REQ
(
message_p
).
mib
[
i
],
F1AP_SETUP_REQ
(
message_p
).
mib_length
[
i
]);
/* sib1 */
F1AP_SETUP_REQ
(
message_p
).
sib1
[
i
]
=
calloc
(
served_cells_item_p
->
gNB_DU_System_Information
->
sIB1_message
.
size
+
1
,
sizeof
(
char
));
memcpy
(
F1AP_SETUP_REQ
(
message_p
).
sib1
[
i
],
served_cells_item_p
->
gNB_DU_System_Information
->
sIB1_message
.
buf
,
...
...
@@ -191,52 +180,41 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
i
,
F1AP_SETUP_REQ
(
message_p
).
sib1
[
i
],
F1AP_SETUP_REQ
(
message_p
).
sib1_length
[
i
]);
}
*
f1ap_du_data_from_du
=
F1AP_SETUP_REQ
(
message_p
);
// char *measurement_timing_information[F1AP_MAX_NB_CELLS];
// uint8_t ranac[F1AP_MAX_NB_CELLS];
// int fdd_flag = f1ap_setup_req->fdd_flag;
// union {
// struct {
// uint32_t ul_nr_arfcn;
// uint8_t ul_scs;
// uint8_t ul_nrb;
// uint32_t dl_nr_arfcn;
// uint8_t dl_scs;
// uint8_t dl_nrb;
// uint32_t sul_active;
// uint32_t sul_nr_arfcn;
// uint8_t sul_scs;
// uint8_t sul_nrb;
// uint8_t num_frequency_bands;
// uint16_t nr_band[32];
// uint8_t num_sul_frequency_bands;
// uint16_t nr_sul_band[32];
// } fdd;
// struct {
// uint32_t nr_arfcn;
// uint8_t scs;
// uint8_t nrb;
// uint32_t sul_active;
// uint32_t sul_nr_arfcn;
// uint8_t sul_scs;
// uint8_t sul_nrb;
// uint8_t num_frequency_bands;
// uint16_t nr_band[32];
// uint8_t num_sul_frequency_bands;
// uint16_t nr_sul_band[32];
// } tdd;
// } nr_mode_info[F1AP_MAX_NB_CELLS];
MSC_LOG_TX_MESSAGE
(
MSC_F1AP_CU
,
MSC_RRC_ENB
,
...
...
@@ -254,34 +232,32 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
}
}
else
{
CU_send_F1_SETUP_FAILURE
(
instance
);
if
(
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CU
)
{
itti_free
(
TASK_RRC_GNB
,
message_p
);
}
else
{
itti_free
(
TASK_RRC_ENB
,
message_p
);
}
return
-
1
;
}
return
0
;
}
int
CU_send_F1_SETUP_RESPONSE
(
instance_t
instance
,
f1ap_setup_resp_t
*
f1ap_setup_resp
)
{
module_id_t
enb_mod_idP
;
module_id_t
cu_mod_idP
;
// This should be fixed
enb_mod_idP
=
(
module_id_t
)
0
;
cu_mod_idP
=
(
module_id_t
)
0
;
F1AP_F1AP_PDU_t
pdu
;
F1AP_F1SetupResponse_t
*
out
;
F1AP_F1SetupResponseIEs_t
*
ie
;
uint8_t
*
buffer
;
uint32_t
len
;
int
i
=
0
;
/* Create */
/* 0. Message Type */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
...
...
@@ -291,7 +267,6 @@ int CU_send_F1_SETUP_RESPONSE(instance_t instance,
pdu
.
choice
.
successfulOutcome
->
criticality
=
F1AP_Criticality_reject
;
pdu
.
choice
.
successfulOutcome
->
value
.
present
=
F1AP_SuccessfulOutcome__value_PR_F1SetupResponse
;
out
=
&
pdu
.
choice
.
successfulOutcome
->
value
.
choice
.
F1SetupResponse
;
/* mandatory */
/* c1. Transaction ID (integer value)*/
ie
=
(
F1AP_F1SetupResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupResponseIEs_t
));
...
...
@@ -317,27 +292,24 @@ int CU_send_F1_SETUP_RESPONSE(instance_t instance,
/* c3. cells to be Activated list */
int
num_cells_to_activate
=
f1ap_setup_resp
->
num_cells_to_activate
;
LOG_D
(
F1AP
,
"num_cells_to_activate = %d
\n
"
,
num_cells_to_activate
);
if
(
num_cells_to_activate
>
0
)
{
ie
=
(
F1AP_F1SetupResponseIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupResponseIEs_t
));
ie
->
id
=
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
;
ie
->
criticality
=
F1AP_Criticality_reject
;
ie
->
value
.
present
=
F1AP_F1SetupResponseIEs__value_PR_Cells_to_be_Activated_List
;
for
(
i
=
0
;
i
<
num_cells_to_activate
;
i
++
)
{
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
cells_to_be_activated_list_item_ies
;
cells_to_be_activated_list_item_ies
=
(
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_Cells_to_be_Activated_List_ItemIEs_t
));
cells_to_be_activated_list_item_ies
->
id
=
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item
;
cells_to_be_activated_list_item_ies
->
criticality
=
F1AP_Criticality_reject
;
cells_to_be_activated_list_item_ies
->
value
.
present
=
F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item
;
/* 3.1 cells to be Activated list item */
F1AP_Cells_to_be_Activated_List_Item_t
cells_to_be_activated_list_item
;
memset
((
void
*
)
&
cells_to_be_activated_list_item
,
0
,
sizeof
(
F1AP_Cells_to_be_Activated_List_Item_t
));
/* - nRCGI */
F1AP_NRCGI_t
nRCGI
;
memset
(
&
nRCGI
,
0
,
sizeof
(
F1AP_NRCGI_t
));
...
...
@@ -362,7 +334,6 @@ int CU_send_F1_SETUP_RESPONSE(instance_t instance,
cells_to_be_activated_list_itemExtIEs
->
id
=
F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation
;
cells_to_be_activated_list_itemExtIEs
->
criticality
=
F1AP_Criticality_reject
;
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
present
=
F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_GNB_CUSystemInformation
;
F1AP_GNB_CUSystemInformation_t
*
gNB_CUSystemInformation
=
(
F1AP_GNB_CUSystemInformation_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNB_CUSystemInformation_t
));
//LOG_I(F1AP, "%s() SI %d size %d: ", __func__, i, f1ap_setup_resp->SI_container_length[i][0]);
//for (int n = 0; n < f1ap_setup_resp->SI_container_length[i][0]; n++)
...
...
@@ -370,38 +341,36 @@ int CU_send_F1_SETUP_RESPONSE(instance_t instance,
//printf("\n");
// for (int sIBtype=2;sIBtype<33;sIBtype++) { //21 ? 33 ?
for
(
int
sIBtype
=
2
;
sIBtype
<
21
;
sIBtype
++
)
{
for
(
int
sIBtype
=
2
;
sIBtype
<
21
;
sIBtype
++
)
{
if
(
f1ap_setup_resp
->
cells_to_activate
[
i
].
SI_container
[
sIBtype
]
!=
NULL
)
{
AssertFatal
(
sIBtype
<
6
||
sIBtype
==
9
,
"Illegal SI type %d
\n
"
,
sIBtype
);
F1AP_SibtypetobeupdatedListItem_t
*
sib_item
=
calloc
(
1
,
sizeof
(
*
sib_item
));
memset
((
void
*
)
sib_item
,
0
,
sizeof
(
*
sib_item
));
memset
((
void
*
)
sib_item
,
0
,
sizeof
(
*
sib_item
));
sib_item
->
sIBtype
=
sIBtype
;
OCTET_STRING_fromBuf
(
&
sib_item
->
sIBmessage
,
(
const
char
*
)
f1ap_setup_resp
->
cells_to_activate
[
i
].
SI_container
[
sIBtype
],
(
const
char
*
)
f1ap_setup_resp
->
cells_to_activate
[
i
].
SI_container
[
sIBtype
],
f1ap_setup_resp
->
cells_to_activate
[
i
].
SI_container_length
[
sIBtype
]);
LOG_D
(
F1AP
,
"f1ap_setup_resp->SI_container_length[%d][%d] = %d
\n
"
,
i
,
sIBtype
,
f1ap_setup_resp
->
cells_to_activate
[
i
].
SI_container_length
[
sIBtype
]);
ASN_SEQUENCE_ADD
(
&
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
,
sib_item
);
}
}
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
=
*
gNB_CUSystemInformation
;
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
=
*
gNB_CUSystemInformation
;
F1AP_ProtocolExtensionContainer_154P112_t
p_154P112_t
;
memset
((
void
*
)
&
p_154P112_t
,
0
,
sizeof
(
F1AP_ProtocolExtensionContainer_154P112_t
));
ASN_SEQUENCE_ADD
(
&
p_154P112_t
.
list
,
cells_to_be_activated_list_itemExtIEs
);
cells_to_be_activated_list_item
.
iE_Extensions
=
(
struct
F1AP_ProtocolExtensionContainer
*
)
&
p_154P112_t
;
cells_to_be_activated_list_item
.
iE_Extensions
=
(
struct
F1AP_ProtocolExtensionContainer
*
)
&
p_154P112_t
;
free
(
gNB_CUSystemInformation
);
gNB_CUSystemInformation
=
NULL
;
}
/* ADD */
cells_to_be_activated_list_item_ies
->
value
.
choice
.
Cells_to_be_Activated_List_Item
=
cells_to_be_activated_list_item
;
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
Cells_to_be_Activated_List
.
list
,
cells_to_be_activated_list_item_ies
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
}
...
...
@@ -412,27 +381,21 @@ int CU_send_F1_SETUP_RESPONSE(instance_t instance,
}
cu_f1ap_itti_send_sctp_data_req
(
instance
,
f1ap_du_data_from_du
->
assoc_id
,
buffer
,
len
,
0
);
return
0
;
}
int
CU_send_F1_SETUP_FAILURE
(
instance_t
instance
)
{
LOG_D
(
F1AP
,
"CU_send_F1_SETUP_FAILURE
\n
"
);
module_id_t
enb_mod_idP
;
module_id_t
cu_mod_idP
;
// This should be fixed
enb_mod_idP
=
(
module_id_t
)
0
;
cu_mod_idP
=
(
module_id_t
)
0
;
F1AP_F1AP_PDU_t
pdu
;
F1AP_F1SetupFailure_t
*
out
;
F1AP_F1SetupFailureIEs_t
*
ie
;
uint8_t
*
buffer
;
uint32_t
len
;
/* Create */
/* 0. Message Type */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
...
...
@@ -442,7 +405,6 @@ int CU_send_F1_SETUP_FAILURE(instance_t instance) {
pdu
.
choice
.
unsuccessfulOutcome
->
criticality
=
F1AP_Criticality_reject
;
pdu
.
choice
.
unsuccessfulOutcome
->
value
.
present
=
F1AP_UnsuccessfulOutcome__value_PR_F1SetupFailure
;
out
=
&
pdu
.
choice
.
unsuccessfulOutcome
->
value
.
choice
.
F1SetupFailure
;
/* mandatory */
/* c1. Transaction ID (integer value)*/
ie
=
(
F1AP_F1SetupFailureIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupFailureIEs_t
));
...
...
@@ -451,7 +413,6 @@ int CU_send_F1_SETUP_FAILURE(instance_t instance) {
ie
->
value
.
present
=
F1AP_F1SetupFailureIEs__value_PR_TransactionID
;
ie
->
value
.
choice
.
TransactionID
=
F1AP_get_next_transaction_identifier
(
enb_mod_idP
,
cu_mod_idP
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
/* c2. Cause */
ie
=
(
F1AP_F1SetupFailureIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupFailureIEs_t
));
...
...
@@ -498,7 +459,6 @@ int CU_send_F1_SETUP_FAILURE(instance_t instance) {
}
cu_f1ap_itti_send_sctp_data_req
(
instance
,
f1ap_du_data_from_du
->
assoc_id
,
buffer
,
len
,
0
);
return
0
;
}
...
...
@@ -533,125 +493,85 @@ int CU_send_gNB_DU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance,
//void CU_send_gNB_CU_CONFIGURATION_UPDATE(F1AP_GNBCUConfigurationUpdate_t *GNBCUConfigurationUpdate) {
int
CU_send_gNB_CU_CONFIGURATION_UPDATE
(
instance_t
instance
,
f1ap_gnb_cu_configuration_update_t
*
f1ap_gnb_cu_configuration_update
)
{
F1AP_F1AP_PDU_t
pdu
;
F1AP_GNBCUConfigurationUpdate_t
*
out
;
F1AP_GNBCUConfigurationUpdateIEs_t
*
ie
;
F1AP_F1AP_PDU_t
pdu
=
{
0
};
uint8_t
*
buffer
;
uint32_t
len
;
int
i
=
0
;
/* Create */
/* 0. Message Type */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
pdu
.
present
=
F1AP_F1AP_PDU_PR_initiatingMessage
;
pdu
.
choice
.
initiatingMessage
=
(
F1AP_InitiatingMessage_t
*
)
calloc
(
1
,
sizeof
(
F1AP_InitiatingMessage_t
));
pdu
.
choice
.
initiatingMessage
->
procedureCode
=
F1AP_ProcedureCode_id_gNBCUConfigurationUpdate
;
pdu
.
choice
.
initiatingMessage
->
criticality
=
F1AP_Criticality_reject
;
pdu
.
choice
.
initiatingMessage
->
value
.
present
=
F1AP_InitiatingMessage__value_PR_GNBCUConfigurationUpdate
;
out
=
&
pdu
.
choice
.
initiatingMessage
->
value
.
choice
.
GNBCUConfigurationUpdate
;
asn1cCalloc
(
pdu
.
choice
.
initiatingMessage
,
F1AP_InitiatingMessage_t
,
initMsg
);
initMsg
->
procedureCode
=
F1AP_ProcedureCode_id_gNBCUConfigurationUpdate
;
initMsg
->
criticality
=
F1AP_Criticality_reject
;
initMsg
->
value
.
present
=
F1AP_InitiatingMessage__value_PR_GNBCUConfigurationUpdate
;
F1AP_GNBCUConfigurationUpdate_t
*
cfgUpdate
=
&
pdu
.
choice
.
initiatingMessage
->
value
.
choice
.
GNBCUConfigurationUpdate
;
/* mandatory */
/* c1. Transaction ID (integer value) */
ie
=
(
F1AP_GNBCUConfigurationUpdateIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNBCUConfigurationUpdateIEs_t
));
ie
->
id
=
F1AP_ProtocolIE_ID_id_TransactionID
;
ie
->
criticality
=
F1AP_Criticality_reject
;
ie
->
value
.
present
=
F1AP_GNBCUConfigurationUpdateIEs__value_PR_TransactionID
;
ie
->
value
.
choice
.
TransactionID
=
F1AP_get_next_transaction_identifier
(
instance
,
0
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
asn1cSequenceAdd
(
cfgUpdate
->
protocolIEs
.
list
,
F1AP_GNBCUConfigurationUpdateIEs_t
,
ieC1
);
ieC1
->
id
=
F1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
F1AP_Criticality_reject
;
ieC1
->
value
.
present
=
F1AP_GNBCUConfigurationUpdateIEs__value_PR_TransactionID
;
ieC1
->
value
.
choice
.
TransactionID
=
F1AP_get_next_transaction_identifier
(
instance
,
0
);
// mandatory
// c2. Cells_to_be_Activated_List
if
(
f1ap_gnb_cu_configuration_update
->
num_cells_to_activate
>
0
)
{
ie
=
(
F1AP_GNBCUConfigurationUpdateIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNBCUConfigurationUpdateIEs_t
)
);
ie
->
id
=
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
;
ie
->
criticality
=
F1AP_Criticality_reject
;
ie
->
value
.
present
=
F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Activated_List
;
asn1cSequenceAdd
(
cfgUpdate
->
protocolIEs
.
list
,
F1AP_GNBCUConfigurationUpdateIEs_t
,
ieC3
);
ie
C3
->
id
=
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
;
ie
C3
->
criticality
=
F1AP_Criticality_reject
;
ie
C3
->
value
.
present
=
F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Activated_List
;
for
(
i
=
0
;
i
<
f1ap_gnb_cu_configuration_update
->
num_cells_to_activate
;
i
++
)
{
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
cells_to_be_activated_list_item_ies
;
cells_to_be_activated_list_item_ies
=
(
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_Cells_to_be_Activated_List_ItemIEs_t
));
for
(
int
i
=
0
;
i
<
f1ap_gnb_cu_configuration_update
->
num_cells_to_activate
;
i
++
)
{
asn1cSequenceAdd
(
ieC3
->
value
.
choice
.
Cells_to_be_Activated_List
.
list
,
F1AP_Cells_to_be_Activated_List_ItemIEs_t
,
cells_to_be_activated_list_item_ies
);
cells_to_be_activated_list_item_ies
->
id
=
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item
;
cells_to_be_activated_list_item_ies
->
criticality
=
F1AP_Criticality_reject
;
cells_to_be_activated_list_item_ies
->
value
.
present
=
F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item
;
// 2.1 cells to be Activated list item
F1AP_Cells_to_be_Activated_List_Item_t
cells_to_be_activated_list_item
;
memset
((
void
*
)
&
cells_to_be_activated_list_item
,
0
,
sizeof
(
F1AP_Cells_to_be_Activated_List_Item_t
));
F1AP_Cells_to_be_Activated_List_Item_t
*
cells_to_be_activated_list_item
=&
cells_to_be_activated_list_item_ies
->
value
.
choice
.
Cells_to_be_Activated_List_Item
;
// - nRCGI
F1AP_NRCGI_t
nRCGI
;
memset
(
&
nRCGI
,
0
,
sizeof
(
F1AP_NRCGI_t
));
F1AP_NRCGI_t
*
nRCGI
=&
cells_to_be_activated_list_item
->
nRCGI
;
MCC_MNC_TO_PLMNID
(
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
mcc
,
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
mnc
,
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
mnc_digit_length
,
&
nRCGI
.
pLMN_Identity
);
&
nRCGI
->
pLMN_Identity
);
NR_CELL_ID_TO_BIT_STRING
(
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
nr_cellid
,
&
nRCGI
.
nRCellIdentity
);
cells_to_be_activated_list_item
.
nRCGI
=
nRCGI
;
&
nRCGI
->
nRCellIdentity
);
// optional
// -nRPCI
cells_to_be_activated_list_item
.
nRPCI
=
(
F1AP_NRPCI_t
*
)
calloc
(
1
,
sizeof
(
F1AP_NRPCI_t
));
*
cells_to_be_activated_list_item
.
nRPCI
=
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
nrpci
;
// int 0..1007
asn1cCalloc
(
cells_to_be_activated_list_item
->
nRPCI
,
F1AP_NRPCI_t
,
tmp
);
*
tmp
=
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
nrpci
;
// int 0..1007
// optional
// 3.1.2 gNB-CUSystem Information
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
*
cells_to_be_activated_list_itemExtIEs
;
cells_to_be_activated_list_itemExtIEs
=
(
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
));
F1AP_ProtocolExtensionContainer_154P112_t
*
p_154P112
=
(
F1AP_ProtocolExtensionContainer_154P112_t
*
)
calloc
(
1
,
sizeof
(
*
p_154P112
));
cells_to_be_activated_list_item
->
iE_Extensions
=
(
struct
F1AP_ProtocolExtensionContainer
*
)
p_154P112
;
//F1AP_ProtocolExtensionContainer_154P112_t
asn1cSequenceAdd
(
p_154P112
->
list
,
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
,
cells_to_be_activated_list_itemExtIEs
);
cells_to_be_activated_list_itemExtIEs
->
id
=
F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation
;
cells_to_be_activated_list_itemExtIEs
->
criticality
=
F1AP_Criticality_reject
;
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
present
=
F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_GNB_CUSystemInformation
;
if
(
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
num_SI
>
0
)
{
F1AP_GNB_CUSystemInformation_t
*
gNB_CUSystemInformation
=
(
F1AP_GNB_CUSystemInformation_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNB_CUSystemInformation_t
))
;
F1AP_GNB_CUSystemInformation_t
*
gNB_CUSystemInformation
=
&
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
;
//LOG_I(F1AP, "%s() SI %d size %d: ", __func__, i, f1ap_setup_resp->SI_container_length[i][0]);
//for (int n = 0; n < f1ap_setup_resp->SI_container_length[i][0]; n++)
// printf("%02x ", f1ap_setup_resp->SI_container[i][0][n]);
//printf("\n");
// for (int sIBtype=2;sIBtype<33;sIBtype++) { //21 ? 33 ?
for
(
int
sIBtype
=
2
;
sIBtype
<
21
;
sIBtype
++
)
{
for
(
int
sIBtype
=
2
;
sIBtype
<
21
;
sIBtype
++
)
{
if
(
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
SI_container
[
sIBtype
]
!=
NULL
)
{
AssertFatal
(
sIBtype
<
6
||
sIBtype
==
9
,
"Illegal SI type %d
\n
"
,
sIBtype
);
F1AP_SibtypetobeupdatedListItem_t
*
sib_item
=
calloc
(
1
,
sizeof
(
*
sib_item
));
memset
((
void
*
)
sib_item
,
0
,
sizeof
(
*
sib_item
));
asn1cSequenceAdd
(
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
,
F1AP_SibtypetobeupdatedListItem_t
,
sib_item
);
sib_item
->
sIBtype
=
sIBtype
;
OCTET_STRING_fromBuf
(
&
sib_item
->
sIBmessage
,
(
const
char
*
)
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
SI_container
[
sIBtype
],
(
const
char
*
)
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
SI_container
[
sIBtype
],
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
SI_container_length
[
sIBtype
]);
LOG_D
(
F1AP
,
"f1ap_setup_resp->SI_container_length[%d][%d] = %d
\n
"
,
i
,
sIBtype
,
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
SI_container_length
[
sIBtype
]);
LOG_D
(
F1AP
,
"f1ap_setup_resp->SI_container_length[%d][%d] = %d
\n
"
,
i
,
sIBtype
,
f1ap_gnb_cu_configuration_update
->
cells_to_activate
[
i
].
SI_container_length
[
sIBtype
]);
ASN_SEQUENCE_ADD
(
&
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
,
sib_item
);
}
}
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
=
*
gNB_CUSystemInformation
;
F1AP_ProtocolExtensionContainer_154P112_t
p_154P112_t
;
memset
((
void
*
)
&
p_154P112_t
,
0
,
sizeof
(
F1AP_ProtocolExtensionContainer_154P112_t
));
ASN_SEQUENCE_ADD
(
&
p_154P112_t
.
list
,
cells_to_be_activated_list_itemExtIEs
);
cells_to_be_activated_list_item
.
iE_Extensions
=
(
struct
F1AP_ProtocolExtensionContainer
*
)
&
p_154P112_t
;
free
(
gNB_CUSystemInformation
);
gNB_CUSystemInformation
=
NULL
;
}
// ADD
cells_to_be_activated_list_item_ies
->
value
.
choice
.
Cells_to_be_Activated_List_Item
=
cells_to_be_activated_list_item
;
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
Cells_to_be_Activated_List
.
list
,
cells_to_be_activated_list_item_ies
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
}
/*
...
...
@@ -690,8 +610,7 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
cells_to_be_deactivated_list_item_ies);
}
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
*/
*/
/*
// c4. GNB_CU_TNL_Association_To_Add_List
...
...
@@ -936,15 +855,19 @@ int CU_send_gNB_CU_CONFIGURATION_UPDATE(instance_t instance, f1ap_gnb_cu_configu
ASN_SEQUENCE_ADD(&out->protocolIEs.list, ie);
*/
/* encode */
if
(
f1ap_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
LOG_E
(
F1AP
,
"Failed to encode F1 gNB-CU CONFIGURATION UPDATE
\n
"
);
return
-
1
;
}
printf
(
"F1AP gNB-CU CONFIGURATION UPDATE : "
);
for
(
int
i
=
0
;
i
<
len
;
i
++
)
printf
(
"%02x "
,
buffer
[
i
]);
for
(
int
i
=
0
;
i
<
len
;
i
++
)
printf
(
"%02x "
,
buffer
[
i
]);
ASN_STRUCT_RESET
(
asn_DEF_F1AP_F1AP_PDU
,
&
pdu
);
printf
(
"
\n
"
);
cu_f1ap_itti_send_sctp_data_req
(
instance
,
f1ap_du_data_from_du
->
assoc_id
,
buffer
,
len
,
0
);
return
0
;
...
...
openair2/F1AP/f1ap_du_interface_management.c
View file @
42ea1f82
...
...
@@ -43,7 +43,10 @@ extern RAN_CONTEXT_t RC;
int
nrb_lut
[
29
]
=
{
11
,
18
,
24
,
25
,
31
,
32
,
38
,
51
,
52
,
65
,
66
,
78
,
79
,
93
,
106
,
107
,
121
,
132
,
133
,
135
,
160
,
162
,
189
,
216
,
217
,
245
,
264
,
270
,
273
};
int
to_NRNRB
(
int
nrb
)
{
for
(
int
i
=
0
;
i
<
29
;
i
++
)
if
(
nrb_lut
[
i
]
==
nrb
)
return
i
;
for
(
int
i
=
0
;
i
<
29
;
i
++
)
if
(
nrb_lut
[
i
]
==
nrb
)
return
i
;
AssertFatal
(
1
==
0
,
"nrb %d is not in the list of possible NRNRB
\n
"
,
nrb
);
}
...
...
@@ -90,181 +93,136 @@ int DU_handle_ERROR_INDICATION(instance_t instance,
F1 Setup
*/
#define asn1cCalloc(VaR, TyPe, lOcPtr) TyPe *lOcPtr=VaR=(TyPe*) calloc(1,sizeof(TyPe));
#define asn1cSequenceAdd(VaR, TyPe, lOcPtr) TyPe *lOcPtr=(TyPe*) calloc(1,sizeof(TyPe)); ASN_SEQUENCE_ADD(&VaR,lOcPtr);
// SETUP REQUEST
int
DU_send_F1_SETUP_REQUEST
(
instance_t
instance
)
{
module_id_t
enb_mod_idP
=
0
;
module_id_t
du_mod_idP
=
0
;
F1AP_F1AP_PDU_t
pdu
;
F1AP_F1SetupRequest_t
*
out
;
F1AP_F1SetupRequestIEs_t
*
ie
;
F1AP_F1AP_PDU_t
pdu
=
{
0
};
uint8_t
*
buffer
;
uint32_t
len
;
int
i
=
0
;
/* Create */
/* 0. pdu Type */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
pdu
.
present
=
F1AP_F1AP_PDU_PR_initiatingMessage
;
pdu
.
choice
.
initiatingMessage
=
(
F1AP_InitiatingMessage_t
*
)
calloc
(
1
,
sizeof
(
F1AP_InitiatingMessage_t
));
pdu
.
choice
.
initiatingMessage
->
procedureCode
=
F1AP_ProcedureCode_id_F1Setup
;
pdu
.
choice
.
initiatingMessage
->
criticality
=
F1AP_Criticality_reject
;
pdu
.
choice
.
initiatingMessage
->
value
.
present
=
F1AP_InitiatingMessage__value_PR_F1SetupRequest
;
out
=
&
pdu
.
choice
.
initiatingMessage
->
value
.
choice
.
F1SetupRequest
;
asn1cCalloc
(
pdu
.
choice
.
initiatingMessage
,
F1AP_InitiatingMessage_t
,
initMsg
);
initMsg
->
procedureCode
=
F1AP_ProcedureCode_id_F1Setup
;
initMsg
->
criticality
=
F1AP_Criticality_reject
;
initMsg
->
value
.
present
=
F1AP_InitiatingMessage__value_PR_F1SetupRequest
;
F1AP_F1SetupRequest_t
*
f1Setup
=
&
initMsg
->
value
.
choice
.
F1SetupRequest
;
/* mandatory */
/* c1. Transaction ID (integer value) */
ie
=
(
F1AP_F1SetupRequestIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupRequestIEs_t
));
ie
->
id
=
F1AP_ProtocolIE_ID_id_TransactionID
;
ie
->
criticality
=
F1AP_Criticality_reject
;
ie
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_TransactionID
;
ie
->
value
.
choice
.
TransactionID
=
F1AP_get_next_transaction_identifier
(
enb_mod_idP
,
du_mod_idP
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
asn1cSequenceAdd
(
f1Setup
->
protocolIEs
.
list
,
F1AP_F1SetupRequestIEs_t
,
ieC1
);
ieC1
->
id
=
F1AP_ProtocolIE_ID_id_TransactionID
;
ieC1
->
criticality
=
F1AP_Criticality_reject
;
ieC1
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_TransactionID
;
ieC1
->
value
.
choice
.
TransactionID
=
F1AP_get_next_transaction_identifier
(
enb_mod_idP
,
du_mod_idP
);
/* mandatory */
/* c2. GNB_DU_ID (integer value) */
ie
=
(
F1AP_F1SetupRequestIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupRequestIEs_t
));
ie
->
id
=
F1AP_ProtocolIE_ID_id_gNB_DU_ID
;
ie
->
criticality
=
F1AP_Criticality_reject
;
ie
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_GNB_DU_ID
;
asn_int642INTEGER
(
&
ie
->
value
.
choice
.
GNB_DU_ID
,
f1ap_du_data
->
gNB_DU_id
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
asn1cSequenceAdd
(
f1Setup
->
protocolIEs
.
list
,
F1AP_F1SetupRequestIEs_t
,
ieC2
);
ieC2
->
id
=
F1AP_ProtocolIE_ID_id_gNB_DU_ID
;
ieC2
->
criticality
=
F1AP_Criticality_reject
;
ieC2
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_GNB_DU_ID
;
asn_int642INTEGER
(
&
ieC2
->
value
.
choice
.
GNB_DU_ID
,
f1ap_du_data
->
gNB_DU_id
);
/* optional */
/* c3. GNB_DU_Name */
if
(
f1ap_du_data
->
gNB_DU_name
!=
NULL
)
{
ie
=
(
F1AP_F1SetupRequestIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupRequestIEs_t
)
);
ie
->
id
=
F1AP_ProtocolIE_ID_id_gNB_DU_Name
;
ie
->
criticality
=
F1AP_Criticality_ignore
;
ie
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_GNB_DU_Name
;
OCTET_STRING_fromBuf
(
&
ie
->
value
.
choice
.
GNB_DU_Name
,
f1ap_du_data
->
gNB_DU_name
,
asn1cSequenceAdd
(
f1Setup
->
protocolIEs
.
list
,
F1AP_F1SetupRequestIEs_t
,
ieC3
);
ie
C3
->
id
=
F1AP_ProtocolIE_ID_id_gNB_DU_Name
;
ie
C3
->
criticality
=
F1AP_Criticality_ignore
;
ie
C3
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_GNB_DU_Name
;
OCTET_STRING_fromBuf
(
&
ie
C3
->
value
.
choice
.
GNB_DU_Name
,
f1ap_du_data
->
gNB_DU_name
,
strlen
(
f1ap_du_data
->
gNB_DU_name
));
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
}
/* mandatory */
/* c4. served cells list */
ie
=
(
F1AP_F1SetupRequestIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupRequestIEs_t
));
ie
->
id
=
F1AP_ProtocolIE_ID_id_gNB_DU_Served_Cells_List
;
ie
->
criticality
=
F1AP_Criticality_reject
;
ie
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_GNB_DU_Served_Cells_List
;
asn1cSequenceAdd
(
f1Setup
->
protocolIEs
.
list
,
F1AP_F1SetupRequestIEs_t
,
ieCells
);
ieCells
->
id
=
F1AP_ProtocolIE_ID_id_gNB_DU_Served_Cells_List
;
ieCells
->
criticality
=
F1AP_Criticality_reject
;
ieCells
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_GNB_DU_Served_Cells_List
;
int
num_cells_available
=
f1ap_du_data
->
num_cells_available
;
LOG_D
(
F1AP
,
"num_cells_available = %d
\n
"
,
num_cells_available
);
for
(
i
=
0
;
i
<
num_cells_available
;
i
++
)
{
for
(
int
i
=
0
;
i
<
num_cells_available
;
i
++
)
{
/* mandatory */
/* 4.1 served cells item */
F1AP_GNB_DU_Served_Cells_ItemIEs_t
*
gnb_du_served_cell_list_item_ies
;
gnb_du_served_cell_list_item_ies
=
(
F1AP_GNB_DU_Served_Cells_ItemIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNB_DU_Served_Cells_ItemIEs_t
));
gnb_du_served_cell_list_item_ies
->
id
=
F1AP_ProtocolIE_ID_id_GNB_DU_Served_Cells_Item
;
gnb_du_served_cell_list_item_ies
->
criticality
=
F1AP_Criticality_reject
;
gnb_du_served_cell_list_item_ies
->
value
.
present
=
F1AP_GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item
;
F1AP_GNB_DU_Served_Cells_Item_t
gnb_du_served_cells_item
;
memset
((
void
*
)
&
gnb_du_served_cells_item
,
0
,
sizeof
(
F1AP_GNB_DU_Served_Cells_Item_t
));
asn1cSequenceAdd
(
ieCells
->
value
.
choice
.
GNB_DU_Served_Cells_List
.
list
,
F1AP_GNB_DU_Served_Cells_ItemIEs_t
,
duServedCell
);
duServedCell
->
id
=
F1AP_ProtocolIE_ID_id_GNB_DU_Served_Cells_Item
;
duServedCell
->
criticality
=
F1AP_Criticality_reject
;
duServedCell
->
value
.
present
=
F1AP_GNB_DU_Served_Cells_ItemIEs__value_PR_GNB_DU_Served_Cells_Item
;
F1AP_GNB_DU_Served_Cells_Item_t
*
gnb_du_served_cells_item
=&
duServedCell
->
value
.
choice
.
GNB_DU_Served_Cells_Item
;
/* 4.1.1 served cell Information */
F1AP_Served_Cell_Information_t
served_cell_information
;
memset
((
void
*
)
&
served_cell_information
,
0
,
sizeof
(
F1AP_Served_Cell_Information_t
));
F1AP_Served_Cell_Information_t
*
served_cell_information
=
&
gnb_du_served_cells_item
->
served_Cell_Information
;
F1AP_NRCGI_t
*
nRCGI
=
&
served_cell_information
->
nRCGI
;
/* - nRCGI */
F1AP_NRCGI_t
nRCGI
;
memset
(
&
nRCGI
,
0
,
sizeof
(
F1AP_NRCGI_t
));
MCC_MNC_TO_PLMNID
(
f1ap_du_data
->
mcc
[
i
],
f1ap_du_data
->
mnc
[
i
],
f1ap_du_data
->
mnc_digit_length
[
i
],
&
nRCGI
.
pLMN_Identity
);
MCC_MNC_TO_PLMNID
(
f1ap_du_data
->
mcc
[
i
],
f1ap_du_data
->
mnc
[
i
],
f1ap_du_data
->
mnc_digit_length
[
i
],
&
nRCGI
->
pLMN_Identity
);
LOG_D
(
F1AP
,
"plmn: (%d,%d)
\n
"
,
f1ap_du_data
->
mcc
[
i
],
f1ap_du_data
->
mnc
[
i
]);
//MCC_MNC_TO_PLMNID(208, 95, 2, &nRCGI.pLMN_Identity);
NR_CELL_ID_TO_BIT_STRING
(
f1ap_du_data
->
nr_cellid
[
i
],
&
nRCGI
.
nRCellIdentity
);
NR_CELL_ID_TO_BIT_STRING
(
f1ap_du_data
->
nr_cellid
[
i
],
&
nRCGI
->
nRCellIdentity
);
LOG_D
(
F1AP
,
"nRCellIdentity (%llx): %x.%x.%x.%x.%x
\n
"
,
(
long
long
unsigned
int
)
f1ap_du_data
->
nr_cellid
[
i
],
nRCGI
.
nRCellIdentity
.
buf
[
0
],
nRCGI
.
nRCellIdentity
.
buf
[
1
],
nRCGI
.
nRCellIdentity
.
buf
[
2
],
nRCGI
.
nRCellIdentity
.
buf
[
3
],
nRCGI
.
nRCellIdentity
.
buf
[
4
]);
served_cell_information
.
nRCGI
=
nRCGI
;
nRCGI
->
nRCellIdentity
.
buf
[
0
],
nRCGI
->
nRCellIdentity
.
buf
[
1
],
nRCGI
->
nRCellIdentity
.
buf
[
2
],
nRCGI
->
nRCellIdentity
.
buf
[
3
],
nRCGI
->
nRCellIdentity
.
buf
[
4
]);
/* - nRPCI */
served_cell_information
.
nRPCI
=
f1ap_du_data
->
nr_pci
[
i
];
// int 0..1007
served_cell_information
->
nRPCI
=
f1ap_du_data
->
nr_pci
[
i
];
// int 0..1007
/* - fiveGS_TAC */
uint8_t
fiveGS_TAC
[
3
];
served_cell_information
.
fiveGS_TAC
=
calloc
(
1
,
sizeof
(
*
served_cell_information
.
fiveGS_TAC
));
fiveGS_TAC
[
0
]
=
((
uint8_t
*
)
&
f1ap_du_data
->
tac
[
i
])[
2
];
fiveGS_TAC
[
1
]
=
((
uint8_t
*
)
&
f1ap_du_data
->
tac
[
i
])[
1
];
fiveGS_TAC
[
2
]
=
((
uint8_t
*
)
&
f1ap_du_data
->
tac
[
i
])[
0
];
OCTET_STRING_fromBuf
(
served_cell_information
.
fiveGS_TAC
,
(
const
char
*
)
fiveGS_TAC
,
3
);
uint32_t
tac
=
htonl
(
f1ap_du_data
->
tac
[
i
]);
asn1cCalloc
(
served_cell_information
->
fiveGS_TAC
,
F1AP_FiveGS_TAC_t
,
netOrder
);
OCTET_STRING_fromBuf
(
netOrder
,
((
char
*
)
&
tac
)
+
1
,
3
);
/* - Configured_EPS_TAC */
if
(
0
){
served_cell_information
.
configured_EPS_TAC
=
(
F1AP_Configured_EPS_TAC_t
*
)
calloc
(
1
,
sizeof
(
F1AP_Configured_EPS_TAC_t
));
OCTET_STRING_fromBuf
(
served_cell_information
.
configured_EPS_TAC
,
"2"
,
2
);
if
(
0
)
{
served_cell_information
->
configured_EPS_TAC
=
(
F1AP_Configured_EPS_TAC_t
*
)
calloc
(
1
,
sizeof
(
F1AP_Configured_EPS_TAC_t
));
OCTET_STRING_fromBuf
(
served_cell_information
->
configured_EPS_TAC
,
"2"
,
2
);
}
/* servedPLMN information */
F1AP_ServedPLMNs_Item_t
*
servedPLMN_item
=
calloc
(
1
,
sizeof
(
*
servedPLMN_item
));
memset
(
servedPLMN_item
,
0
,
sizeof
(
*
servedPLMN_item
));
MCC_MNC_TO_PLMNID
(
f1ap_du_data
->
mcc
[
i
],
f1ap_du_data
->
mnc
[
i
],
f1ap_du_data
->
mnc_digit_length
[
i
],
&
servedPLMN_item
->
pLMN_Identity
);
ASN_SEQUENCE_ADD
(
&
served_cell_information
.
servedPLMNs
.
list
,
servedPLMN_item
);
asn1cSequenceAdd
(
served_cell_information
->
servedPLMNs
.
list
,
F1AP_ServedPLMNs_Item_t
,
servedPLMN_item
);
MCC_MNC_TO_PLMNID
(
f1ap_du_data
->
mcc
[
i
],
f1ap_du_data
->
mnc
[
i
],
f1ap_du_data
->
mnc_digit_length
[
i
],
&
servedPLMN_item
->
pLMN_Identity
);
// // /* - CHOICE NR-MODE-Info */
F1AP_NR_Mode_Info_t
nR_Mode_Info
;
F1AP_NR_Mode_Info_t
*
nR_Mode_Info
=
&
served_cell_information
->
nR_Mode_Info
;
//f1ap_du_data->fdd_flag = 1;
if
(
f1ap_du_data
->
fdd_flag
)
{
// FDD
nR_Mode_Info
.
present
=
F1AP_NR_Mode_Info_PR_fDD
;
F1AP_FDD_Info_t
*
fDD_Info
=
(
F1AP_FDD_Info_t
*
)
calloc
(
1
,
sizeof
(
F1AP_FDD_Info_t
));
nR_Mode_Info
->
present
=
F1AP_NR_Mode_Info_PR_fDD
;
asn1cCalloc
(
nR_Mode_Info
->
choice
.
fDD
,
F1AP_FDD_Info_t
,
fDD_Info
);
/* FDD.1 UL NRFreqInfo */
/* FDD.1.1 UL NRFreqInfo ARFCN */
fDD_Info
->
uL_NRFreqInfo
.
nRARFCN
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
ul_nr_arfcn
;
// Integer
/* FDD.1.2 F1AP_SUL_Information */
if
(
0
)
{
// Optional
F1AP_SUL_Information_t
*
fdd_sul_info
=
(
F1AP_SUL_Information_t
*
)
calloc
(
1
,
sizeof
(
F1AP_SUL_Information_t
)
);
asn1cCalloc
(
fDD_Info
->
uL_NRFreqInfo
.
sul_Information
,
F1AP_SUL_Information_t
,
fdd_sul_info
);
fdd_sul_info
->
sUL_NRARFCN
=
0
;
fdd_sul_info
->
sUL_transmission_Bandwidth
.
nRSCS
=
0
;
fdd_sul_info
->
sUL_transmission_Bandwidth
.
nRNRB
=
0
;
fDD_Info
->
uL_NRFreqInfo
.
sul_Information
=
fdd_sul_info
;
}
/* FDD.1.3 freqBandListNr */
int
fdd_ul_num_available_freq_Bands
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
ul_num_frequency_bands
;
LOG_D
(
F1AP
,
"fdd_ul_num_available_freq_Bands = %d
\n
"
,
fdd_ul_num_available_freq_Bands
);
int
fdd_ul_j
;
for
(
fdd_ul_j
=
0
;
fdd_ul_j
<
fdd_ul_num_available_freq_Bands
;
fdd_ul_j
++
)
{
F1AP_FreqBandNrItem_t
nr_freqBandNrItem
;
memset
((
void
*
)
&
nr_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
)
);
for
(
int
fdd_ul_j
=
0
;
fdd_ul_j
<
fdd_ul_num_available_freq_Bands
;
fdd_ul_j
++
)
{
asn1cSequenceAdd
(
fDD_Info
->
uL_NRFreqInfo
.
freqBandListNr
.
list
,
F1AP_FreqBandNrItem_t
,
nr_freqBandNrItem
);
/* FDD.1.3.1 freqBandIndicatorNr*/
nr_freqBandNrItem
.
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
ul_nr_band
[
fdd_ul_j
];
//
nr_freqBandNrItem
->
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
ul_nr_band
[
fdd_ul_j
];
//
/* FDD.1.3.2 supportedSULBandList*/
int
num_available_supported_SULBands
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
ul_num_sul_frequency_bands
;
LOG_D
(
F1AP
,
"num_available_supported_SULBands = %d
\n
"
,
num_available_supported_SULBands
);
int
fdd_ul_k
;
for
(
fdd_ul_k
=
0
;
fdd_ul_k
<
num_available_supported_SULBands
;
fdd_ul_k
++
)
{
F1AP_SupportedSULFreqBandItem_t
nr_supportedSULFreqBandItem
;
memset
((
void
*
)
&
nr_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
for
(
int
fdd_ul_k
=
0
;
fdd_ul_k
<
num_available_supported_SULBands
;
fdd_ul_k
++
)
{
asn1cSequenceAdd
(
nr_freqBandNrItem
->
supportedSULBandList
.
list
,
F1AP_SupportedSULFreqBandItem_t
,
nr_supportedSULFreqBandItem
);
/* FDD.1.3.2.1 freqBandIndicatorNr */
nr_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
ul_nr_sul_band
[
fdd_ul_k
];
//
ASN_SEQUENCE_ADD
(
&
nr_freqBandNrItem
.
supportedSULBandList
.
list
,
&
nr_supportedSULFreqBandItem
);
nr_supportedSULFreqBandItem
->
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
ul_nr_sul_band
[
fdd_ul_k
];
//
}
// for FDD : UL supported_SULBands
ASN_SEQUENCE_ADD
(
&
fDD_Info
->
uL_NRFreqInfo
.
freqBandListNr
.
list
,
&
nr_freqBandNrItem
);
}
// for FDD : UL freq_Bands
/* FDD.2 DL NRFreqInfo */
...
...
@@ -273,40 +231,29 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
/* FDD.2.2 F1AP_SUL_Information */
if
(
0
)
{
// Optional
F1AP_SUL_Information_t
*
fdd_sul_info
=
(
F1AP_SUL_Information_t
*
)
calloc
(
1
,
sizeof
(
F1AP_SUL_Information_t
))
;
F1AP_SUL_Information_t
*
fdd_sul_info
=
fDD_Info
->
dL_NRFreqInfo
.
sul_Information
;
fdd_sul_info
->
sUL_NRARFCN
=
0
;
fdd_sul_info
->
sUL_transmission_Bandwidth
.
nRSCS
=
0
;
fdd_sul_info
->
sUL_transmission_Bandwidth
.
nRNRB
=
0
;
fDD_Info
->
dL_NRFreqInfo
.
sul_Information
=
fdd_sul_info
;
}
/* FDD.2.3 freqBandListNr */
int
fdd_dl_num_available_freq_Bands
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_num_frequency_bands
;
LOG_D
(
F1AP
,
"fdd_dl_num_available_freq_Bands = %d
\n
"
,
fdd_dl_num_available_freq_Bands
);
int
fdd_dl_j
;
for
(
fdd_dl_j
=
0
;
fdd_dl_j
<
fdd_dl_num_available_freq_Bands
;
fdd_dl_j
++
)
{
F1AP_FreqBandNrItem_t
nr_freqBandNrItem
;
memset
((
void
*
)
&
nr_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
)
);
for
(
int
fdd_dl_j
=
0
;
fdd_dl_j
<
fdd_dl_num_available_freq_Bands
;
fdd_dl_j
++
)
{
asn1cSequenceAdd
(
fDD_Info
->
dL_NRFreqInfo
.
freqBandListNr
.
list
,
F1AP_FreqBandNrItem_t
,
nr_freqBandNrItem
);
/* FDD.2.3.1 freqBandIndicatorNr*/
nr_freqBandNrItem
.
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_nr_band
[
fdd_dl_j
];
//
nr_freqBandNrItem
->
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_nr_band
[
fdd_dl_j
];
//
/* FDD.2.3.2 supportedSULBandList*/
int
num_available_supported_SULBands
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_num_sul_frequency_bands
;
LOG_D
(
F1AP
,
"num_available_supported_SULBands = %d
\n
"
,
num_available_supported_SULBands
);
int
fdd_dl_k
;
for
(
fdd_dl_k
=
0
;
fdd_dl_k
<
num_available_supported_SULBands
;
fdd_dl_k
++
)
{
F1AP_SupportedSULFreqBandItem_t
nr_supportedSULFreqBandItem
;
memset
((
void
*
)
&
nr_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
for
(
int
fdd_dl_k
=
0
;
fdd_dl_k
<
num_available_supported_SULBands
;
fdd_dl_k
++
)
{
asn1cSequenceAdd
(
nr_freqBandNrItem
->
supportedSULBandList
.
list
,
F1AP_SupportedSULFreqBandItem_t
,
nr_supportedSULFreqBandItem
);
/* FDD.2.3.2.1 freqBandIndicatorNr */
nr_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_nr_sul_band
[
fdd_dl_k
];
//
ASN_SEQUENCE_ADD
(
&
nr_freqBandNrItem
.
supportedSULBandList
.
list
,
&
nr_supportedSULFreqBandItem
);
nr_supportedSULFreqBandItem
->
freqBandIndicatorNr
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_nr_sul_band
[
fdd_dl_k
];
//
}
// for FDD : DL supported_SULBands
ASN_SEQUENCE_ADD
(
&
fDD_Info
->
dL_NRFreqInfo
.
freqBandListNr
.
list
,
&
nr_freqBandNrItem
);
}
// for FDD : DL freq_Bands
/* FDD.3 UL Transmission Bandwidth */
...
...
@@ -315,104 +262,71 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
/* FDD.4 DL Transmission Bandwidth */
fDD_Info
->
dL_Transmission_Bandwidth
.
nRSCS
=
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_scs
;
fDD_Info
->
dL_Transmission_Bandwidth
.
nRNRB
=
to_NRNRB
(
f1ap_du_data
->
nr_mode_info
[
i
].
fdd
.
dl_nrb
);
nR_Mode_Info
.
choice
.
fDD
=
fDD_Info
;
}
else
{
// TDD
nR_Mode_Info
.
present
=
F1AP_NR_Mode_Info_PR_tDD
;
F1AP_TDD_Info_t
*
tDD_Info
=
(
F1AP_TDD_Info_t
*
)
calloc
(
1
,
sizeof
(
F1AP_TDD_Info_t
));
nR_Mode_Info
->
present
=
F1AP_NR_Mode_Info_PR_tDD
;
asn1cCalloc
(
nR_Mode_Info
->
choice
.
tDD
,
F1AP_TDD_Info_t
,
tDD_Info
);
/* TDD.1 nRFreqInfo */
/* TDD.1.1 nRFreqInfo ARFCN */
tDD_Info
->
nRFreqInfo
.
nRARFCN
=
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
nr_arfcn
;
// Integer
/* TDD.1.2 F1AP_SUL_Information */
if
(
0
)
{
// Optional
F1AP_SUL_Information_t
*
tdd_sul_info
=
(
F1AP_SUL_Information_t
*
)
calloc
(
1
,
sizeof
(
F1AP_SUL_Information_t
))
;
F1AP_SUL_Information_t
*
tdd_sul_info
=
tDD_Info
->
nRFreqInfo
.
sul_Information
;
tdd_sul_info
->
sUL_NRARFCN
=
0
;
tdd_sul_info
->
sUL_transmission_Bandwidth
.
nRSCS
=
0
;
tdd_sul_info
->
sUL_transmission_Bandwidth
.
nRNRB
=
0
;
tDD_Info
->
nRFreqInfo
.
sul_Information
=
tdd_sul_info
;
}
/* TDD.1.3 freqBandListNr */
int
tdd_num_available_freq_Bands
=
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
num_frequency_bands
;
LOG_D
(
F1AP
,
"tdd_num_available_freq_Bands = %d
\n
"
,
tdd_num_available_freq_Bands
);
int
j
;
for
(
j
=
0
;
j
<
tdd_num_available_freq_Bands
;
j
++
)
{
F1AP_FreqBandNrItem_t
nr_freqBandNrItem
;
memset
((
void
*
)
&
nr_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
)
);
for
(
int
j
=
0
;
j
<
tdd_num_available_freq_Bands
;
j
++
)
{
asn1cSequenceAdd
(
tDD_Info
->
nRFreqInfo
.
freqBandListNr
.
list
,
F1AP_FreqBandNrItem_t
,
nr_freqBandNrItem
);
/* TDD.1.3.1 freqBandIndicatorNr*/
nr_freqBandNrItem
.
freqBandIndicatorNr
=
*
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
nr_band
;
//
nr_freqBandNrItem
->
freqBandIndicatorNr
=
*
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
nr_band
;
//
/* TDD.1.3.2 supportedSULBandList*/
int
num_available_supported_SULBands
=
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
num_sul_frequency_bands
;
LOG_D
(
F1AP
,
"num_available_supported_SULBands = %d
\n
"
,
num_available_supported_SULBands
);
int
k
;
for
(
k
=
0
;
k
<
num_available_supported_SULBands
;
k
++
)
{
F1AP_SupportedSULFreqBandItem_t
nr_supportedSULFreqBandItem
;
memset
((
void
*
)
&
nr_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
for
(
int
k
=
0
;
k
<
num_available_supported_SULBands
;
k
++
)
{
asn1cSequenceAdd
(
nr_freqBandNrItem
->
supportedSULBandList
.
list
,
F1AP_SupportedSULFreqBandItem_t
,
nr_supportedSULFreqBandItem
);
/* TDD.1.3.2.1 freqBandIndicatorNr */
nr_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
*
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
nr_sul_band
;
//
ASN_SEQUENCE_ADD
(
&
nr_freqBandNrItem
.
supportedSULBandList
.
list
,
&
nr_supportedSULFreqBandItem
);
nr_supportedSULFreqBandItem
->
freqBandIndicatorNr
=
*
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
nr_sul_band
;
//
}
// for TDD : supported_SULBands
ASN_SEQUENCE_ADD
(
&
tDD_Info
->
nRFreqInfo
.
freqBandListNr
.
list
,
&
nr_freqBandNrItem
);
}
// for TDD : freq_Bands
/* TDD.2 transmission_Bandwidth */
tDD_Info
->
transmission_Bandwidth
.
nRSCS
=
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
scs
;
tDD_Info
->
transmission_Bandwidth
.
nRNRB
=
to_NRNRB
(
f1ap_du_data
->
nr_mode_info
[
i
].
tdd
.
nrb
);
nR_Mode_Info
.
choice
.
tDD
=
tDD_Info
;
}
// if nR_Mode_Info
served_cell_information
.
nR_Mode_Info
=
nR_Mode_Info
;
/* - measurementTimingConfiguration */
char
*
measurementTimingConfiguration
=
f1ap_du_data
->
measurement_timing_information
[
i
];
// sept. 2018
OCTET_STRING_fromBuf
(
&
served_cell_information
.
measurementTimingConfiguration
,
OCTET_STRING_fromBuf
(
&
served_cell_information
->
measurementTimingConfiguration
,
measurementTimingConfiguration
,
strlen
(
measurementTimingConfiguration
));
gnb_du_served_cells_item
.
served_Cell_Information
=
served_cell_information
;
//
asn1cCalloc
(
gnb_du_served_cells_item
->
gNB_DU_System_Information
,
F1AP_GNB_DU_System_Information_t
,
gNB_DU_System_Information
);
/* 4.1.2 gNB-DU System Information */
F1AP_GNB_DU_System_Information_t
*
gNB_DU_System_Information
=
(
F1AP_GNB_DU_System_Information_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNB_DU_System_Information_t
));
OCTET_STRING_fromBuf
(
&
gNB_DU_System_Information
->
mIB_message
,
// sept. 2018
(
const
char
*
)
f1ap_du_data
->
mib
[
i
],
//f1ap_du_data->mib,
(
const
char
*
)
f1ap_du_data
->
mib
[
i
],
//f1ap_du_data->mib,
f1ap_du_data
->
mib_length
[
i
]);
OCTET_STRING_fromBuf
(
&
gNB_DU_System_Information
->
sIB1_message
,
// sept. 2018
(
const
char
*
)
f1ap_du_data
->
sib1
[
i
],
(
const
char
*
)
f1ap_du_data
->
sib1
[
i
],
f1ap_du_data
->
sib1_length
[
i
]);
gnb_du_served_cells_item
.
gNB_DU_System_Information
=
gNB_DU_System_Information
;
//
/* ADD */
gnb_du_served_cell_list_item_ies
->
value
.
choice
.
GNB_DU_Served_Cells_Item
=
gnb_du_served_cells_item
;
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
GNB_DU_Served_Cells_List
.
list
,
gnb_du_served_cell_list_item_ies
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
/* c5. RRC VERSION */
ie
=
(
F1AP_F1SetupRequestIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupRequestIEs_t
));
ie
->
id
=
F1AP_ProtocolIE_ID_id_GNB_DU_RRC_Version
;
ie
->
criticality
=
F1AP_Criticality_reject
;
ie
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_RRC_Version
;
ie
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
buf
=
calloc
(
1
,
sizeof
(
char
));
ie
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
buf
[
0
]
=
0xe0
;
ie
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
size
=
1
;
ie
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
bits_unused
=
5
;
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
asn1cSequenceAdd
(
f1Setup
->
protocolIEs
.
list
,
F1AP_F1SetupRequestIEs_t
,
ie2
);
ie2
->
id
=
F1AP_ProtocolIE_ID_id_GNB_DU_RRC_Version
;
ie2
->
criticality
=
F1AP_Criticality_reject
;
ie2
->
value
.
present
=
F1AP_F1SetupRequestIEs__value_PR_RRC_Version
;
ie2
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
buf
=
calloc
(
1
,
sizeof
(
char
));
ie2
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
buf
[
0
]
=
0xe0
;
ie2
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
size
=
1
;
ie2
->
value
.
choice
.
RRC_Version
.
latest_RRC_Version
.
bits_unused
=
5
;
/* encode */
if
(
f1ap_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
...
...
@@ -420,28 +334,16 @@ int DU_send_F1_SETUP_REQUEST(instance_t instance) {
return
-
1
;
}
MSC_LOG_TX_MESSAGE
(
MSC_F1AP_DU
,
MSC_F1AP_CU
,
(
const
char
*
)
buffer
,
len
,
MSC_AS_TIME_FMT
" F1_SETUP_REQUEST initiatingMessage gNB_DU_name %s"
,
0
,
0
,
//MSC_AS_TIME_ARGS(ctxt_pP),
f1ap_du_data
->
gNB_DU_name
);
ASN_STRUCT_RESET
(
asn_DEF_F1AP_F1AP_PDU
,
&
pdu
);
du_f1ap_itti_send_sctp_data_req
(
instance
,
f1ap_du_data
->
assoc_id
,
buffer
,
len
,
0
);
return
0
;
}
int
DU_handle_F1_SETUP_RESPONSE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
F1AP_F1AP_PDU_t
*
pdu
)
{
F1AP_F1AP_PDU_t
*
pdu
)
{
LOG_D
(
F1AP
,
"DU_handle_F1_SETUP_RESPONSE
\n
"
);
AssertFatal
(
pdu
->
present
==
F1AP_F1AP_PDU_PR_successfulOutcome
,
"pdu->present != F1AP_F1AP_PDU_PR_successfulOutcome
\n
"
);
AssertFatal
(
pdu
->
choice
.
successfulOutcome
->
procedureCode
==
F1AP_ProcedureCode_id_F1Setup
,
...
...
@@ -450,21 +352,18 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
"pdu->choice.successfulOutcome->criticality != F1AP_Criticality_reject
\n
"
);
AssertFatal
(
pdu
->
choice
.
successfulOutcome
->
value
.
present
==
F1AP_SuccessfulOutcome__value_PR_F1SetupResponse
,
"pdu->choice.successfulOutcome->value.present != F1AP_SuccessfulOutcome__value_PR_F1SetupResponse
\n
"
);
F1AP_F1SetupResponse_t
*
in
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
F1SetupResponse
;
F1AP_F1SetupResponseIEs_t
*
ie
;
int
TransactionId
=
-
1
;
int
num_cells_to_activate
=
0
;
F1AP_Cells_to_be_Activated_List_Item_t
*
cell
;
MessageDef
*
msg_p
=
itti_alloc_new_message
(
TASK_DU_F1
,
0
,
F1AP_SETUP_RESP
);
LOG_D
(
F1AP
,
"F1AP: F1Setup-Resp: protocolIEs.list.count %d
\n
"
,
in
->
protocolIEs
.
list
.
count
);
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
ie
=
in
->
protocolIEs
.
list
.
array
[
i
];
switch
(
ie
->
id
)
{
case
F1AP_ProtocolIE_ID_id_TransactionID
:
AssertFatal
(
ie
->
criticality
==
F1AP_Criticality_reject
,
...
...
@@ -475,6 +374,7 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
LOG_D
(
F1AP
,
"F1AP: F1Setup-Resp: TransactionId %d
\n
"
,
TransactionId
);
break
;
case
F1AP_ProtocolIE_ID_id_gNB_CU_Name
:
AssertFatal
(
ie
->
criticality
==
F1AP_Criticality_ignore
,
"ie->criticality != F1AP_Criticality_ignore
\n
"
);
...
...
@@ -486,32 +386,30 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
LOG_D
(
F1AP
,
"F1AP: F1Setup-Resp: gNB_CU_name %s
\n
"
,
F1AP_SETUP_RESP
(
msg_p
).
gNB_CU_name
);
break
;
case
F1AP_ProtocolIE_ID_id_GNB_CU_RRC_Version
:
LOG_D
(
F1AP
,
"F1AP: Received GNB-CU-RRC-Version, ignoring
\n
"
);
break
;
case
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
:
{
case
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
:
{
AssertFatal
(
ie
->
criticality
==
F1AP_Criticality_reject
,
"ie->criticality != F1AP_Criticality_reject
\n
"
);
AssertFatal
(
ie
->
value
.
present
==
F1AP_F1SetupResponseIEs__value_PR_Cells_to_be_Activated_List
,
"ie->value.present != F1AP_F1SetupResponseIEs__value_PR_Cells_to_be_Activated_List
\n
"
);
num_cells_to_activate
=
ie
->
value
.
choice
.
Cells_to_be_Activated_List
.
list
.
count
;
LOG_D
(
F1AP
,
"F1AP: Activating %d cells
\n
"
,
num_cells_to_activate
);
for
(
int
i
=
0
;
i
<
num_cells_to_activate
;
i
++
)
{
for
(
int
i
=
0
;
i
<
num_cells_to_activate
;
i
++
)
{
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
cells_to_be_activated_list_item_ies
=
(
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
)
ie
->
value
.
choice
.
Cells_to_be_Activated_List
.
list
.
array
[
i
];
AssertFatal
(
cells_to_be_activated_list_item_ies
->
id
==
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item
,
"cells_to_be_activated_list_item_ies->id != F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item"
);
AssertFatal
(
cells_to_be_activated_list_item_ies
->
criticality
==
F1AP_Criticality_reject
,
"cells_to_be_activated_list_item_ies->criticality == F1AP_Criticality_reject"
);
AssertFatal
(
cells_to_be_activated_list_item_ies
->
value
.
present
==
F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item
,
"cells_to_be_activated_list_item_ies->value.present == F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item"
);
cell
=
&
cells_to_be_activated_list_item_ies
->
value
.
choice
.
Cells_to_be_Activated_List_Item
;
TBCD_TO_MCC_MNC
(
&
cell
->
nRCGI
.
pLMN_Identity
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mcc
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mnc
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mnc_digit_length
);
TBCD_TO_MCC_MNC
(
&
cell
->
nRCGI
.
pLMN_Identity
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mcc
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mnc
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mnc_digit_length
);
LOG_D
(
F1AP
,
"nr_cellId : %x %x %x %x %x
\n
"
,
cell
->
nRCGI
.
nRCellIdentity
.
buf
[
0
],
cell
->
nRCGI
.
nRCellIdentity
.
buf
[
1
],
...
...
@@ -521,10 +419,13 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
BIT_STRING_TO_NR_CELL_IDENTITY
(
&
cell
->
nRCGI
.
nRCellIdentity
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
nr_cellid
);
F1AP_ProtocolExtensionContainer_154P112_t
*
ext
=
(
F1AP_ProtocolExtensionContainer_154P112_t
*
)
cell
->
iE_Extensions
;
if
(
ext
==
NULL
)
continue
;
for
(
int
cnt
=
0
;
cnt
<
ext
->
list
.
count
;
cnt
++
)
{
if
(
ext
==
NULL
)
continue
;
for
(
int
cnt
=
0
;
cnt
<
ext
->
list
.
count
;
cnt
++
)
{
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
*
cells_to_be_activated_list_itemExtIEs
=
(
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
*
)
ext
->
list
.
array
[
cnt
];
switch
(
cells_to_be_activated_list_itemExtIEs
->
id
)
{
/*
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_NOTHING:
...
...
@@ -534,45 +435,52 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_IAB_Info_IAB_donor_CU,
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailableSNPN_ID_List
*/
case
F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation
:
{
case
F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation
:
{
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
nrpci
=
(
cell
->
nRPCI
!=
NULL
)
?
*
cell
->
nRPCI
:
0
;
F1AP_GNB_CUSystemInformation_t
*
gNB_CUSystemInformation
=
(
F1AP_GNB_CUSystemInformation_t
*
)
&
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
;
F1AP_GNB_CUSystemInformation_t
*
gNB_CUSystemInformation
=
(
F1AP_GNB_CUSystemInformation_t
*
)
&
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
;
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
num_SI
=
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
count
;
AssertFatal
(
ext
->
list
.
count
==
1
,
"At least one SI message should be there, and only 1 for now!
\n
"
);
LOG_D
(
F1AP
,
"F1AP: Cell %d MCC %d MNC %d NRCellid %lx num_si %d
\n
"
,
i
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mcc
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
mnc
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
nr_cellid
,
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
num_SI
);
for
(
int
si
=
0
;
si
<
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
count
;
si
++
)
{
for
(
int
si
=
0
;
si
<
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
count
;
si
++
)
{
F1AP_SibtypetobeupdatedListItem_t
*
sib_item
=
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
array
[
si
];
size_t
size
=
sib_item
->
sIBmessage
.
size
;
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
SI_container_length
[
si
]
=
size
;
LOG_D
(
F1AP
,
"F1AP: SI_container_length[%d][%d] %ld bytes
\n
"
,
i
,
(
int
)
sib_item
->
sIBtype
,
size
);
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
SI_container
[
si
]
=
malloc
(
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
SI_container_length
[
si
]);
memcpy
((
void
*
)
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
SI_container
[
si
],
(
void
*
)
sib_item
->
sIBmessage
.
buf
,
memcpy
((
void
*
)
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
SI_container
[
si
],
(
void
*
)
sib_item
->
sIBmessage
.
buf
,
size
);
}
break
;
}
case
F1AP_ProtocolIE_ID_id_AvailablePLMNList
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
case
F1AP_ProtocolIE_ID_id_ExtendedAvailablePLMN_List
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
case
F1AP_ProtocolIE_ID_id_IAB_Info_IAB_donor_CU
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
case
F1AP_ProtocolIE_ID_id_AvailableSNPN_ID_List
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
default:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id %d unknown
\n
"
,(
int
)
cells_to_be_activated_list_itemExtIEs
->
id
);
break
;
}
}
// for (cnt=...
}
// for (cells_to_activate...
break
;
}
// case F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
...
...
@@ -581,12 +489,14 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance,
break
;
}
// switch ie
}
// for IE
AssertFatal
(
TransactionId
!=-
1
,
"TransactionId was not sent
\n
"
);
LOG_D
(
F1AP
,
"F1AP: num_cells_to_activate %d
\n
"
,
num_cells_to_activate
);
F1AP_SETUP_RESP
(
msg_p
).
num_cells_to_activate
=
num_cells_to_activate
;
// tmp
// F1AP_SETUP_RESP (msg_p).num_SI[0] = 1;
for
(
int
i
=
0
;
i
<
num_cells_to_activate
;
i
++
)
for
(
int
i
=
0
;
i
<
num_cells_to_activate
;
i
++
)
AssertFatal
(
F1AP_SETUP_RESP
(
msg_p
).
cells_to_activate
[
i
].
num_SI
>
0
,
"System Information %d is missing"
,
i
);
MSC_LOG_RX_MESSAGE
(
...
...
@@ -617,16 +527,12 @@ int DU_handle_F1_SETUP_FAILURE(instance_t instance,
uint32_t
stream
,
F1AP_F1AP_PDU_t
*
pdu
)
{
LOG_E
(
F1AP
,
"DU_handle_F1_SETUP_FAILURE
\n
"
);
F1AP_F1SetupFailure_t
*
out
;
F1AP_F1SetupFailureIEs_t
*
ie
;
out
=
&
pdu
->
choice
.
unsuccessfulOutcome
->
value
.
choice
.
F1SetupFailure
;
/* Transaction ID */
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_F1SetupFailureIEs_t
,
ie
,
out
,
F1AP_ProtocolIE_ID_id_TransactionID
,
true
);
/* Cause */
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_F1SetupFailureIEs_t
,
ie
,
out
,
F1AP_ProtocolIE_ID_id_Cause
,
true
);
...
...
@@ -652,12 +558,10 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
F1AP_F1AP_PDU_t
pdu
;
F1AP_GNBDUConfigurationUpdate_t
*
out
;
F1AP_GNBDUConfigurationUpdateIEs_t
*
ie
;
uint8_t
*
buffer
;
uint32_t
len
;
int
i
=
0
;
int
j
=
0
;
/* Create */
/* 0. Message Type */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
...
...
@@ -667,7 +571,6 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
pdu
.
choice
.
initiatingMessage
->
criticality
=
F1AP_Criticality_reject
;
pdu
.
choice
.
initiatingMessage
->
value
.
present
=
F1AP_InitiatingMessage__value_PR_GNBDUConfigurationUpdate
;
out
=
&
pdu
.
choice
.
initiatingMessage
->
value
.
choice
.
GNBDUConfigurationUpdate
;
/* mandatory */
/* c1. Transaction ID (integer value) */
ie
=
(
F1AP_GNBDUConfigurationUpdateIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNBDUConfigurationUpdateIEs_t
));
...
...
@@ -676,8 +579,6 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
ie
->
value
.
present
=
F1AP_GNBDUConfigurationUpdateIEs__value_PR_TransactionID
;
ie
->
value
.
choice
.
TransactionID
=
F1AP_get_next_transaction_identifier
(
instance
,
du_mod_idP
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
/* c2. Served_Cells_To_Add */
ie
=
(
F1AP_GNBDUConfigurationUpdateIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNBDUConfigurationUpdateIEs_t
));
...
...
@@ -694,13 +595,10 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
served_cells_to_add_item_ies
->
id
=
F1AP_ProtocolIE_ID_id_Served_Cells_To_Add_Item
;
served_cells_to_add_item_ies
->
criticality
=
F1AP_Criticality_reject
;
served_cells_to_add_item_ies
->
value
.
present
=
F1AP_Served_Cells_To_Add_ItemIEs__value_PR_Served_Cells_To_Add_Item
;
F1AP_Served_Cells_To_Add_Item_t
served_cells_to_add_item
;
memset
((
void
*
)
&
served_cells_to_add_item
,
0
,
sizeof
(
F1AP_Served_Cells_To_Add_Item_t
));
/* 2.1.1 serverd cell Information */
F1AP_Served_Cell_Information_t
served_cell_information
;
memset
((
void
*
)
&
served_cell_information
,
0
,
sizeof
(
F1AP_Served_Cell_Information_t
));
/* - nRCGI */
F1AP_NRCGI_t
nRCGI
;
...
...
@@ -714,21 +612,15 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
nRCGI
.
nRCellIdentity
.
buf
[
4
]);
NR_CELL_ID_TO_BIT_STRING
(
f1ap_setup_req
->
nr_cellid
[
i
],
&
nRCGI
.
nRCellIdentity
);
served_cell_information
.
nRCGI
=
nRCGI
;
/* - nRPCI */
served_cell_information
.
nRPCI
=
f1ap_setup_req
->
nr_pci
[
i
];
// int 0..1007
/* - fiveGS_TAC */
uint8_t
fiveGS_TAC
[
3
];
fiveGS_TAC
[
0
]
=
((
uint8_t
*
)
&
f1ap_setup_req
->
tac
[
i
])[
2
];
fiveGS_TAC
[
1
]
=
((
uint8_t
*
)
&
f1ap_setup_req
->
tac
[
i
])[
1
];
fiveGS_TAC
[
2
]
=
((
uint8_t
*
)
&
f1ap_setup_req
->
tac
[
i
])[
0
];
OCTET_STRING_fromBuf
(
served_cell_information
.
fiveGS_TAC
,
(
const
char
*
)
fiveGS_TAC
,
3
);
uint32_t
tac
=
htonl
(
f1ap_du_data
->
tac
[
i
]);
served_cell_information
.
fiveGS_TAC
=
(
F1AP_FiveGS_TAC_t
*
)
calloc
(
1
,
sizeof
(
F1AP_FiveGS_TAC_t
*
));
OCTET_STRING_fromBuf
(
served_cell_information
.
fiveGS_TAC
,
((
char
*
)
&
tac
)
+
1
,
3
);
/* - Configured_EPS_TAC */
if
(
1
)
{
if
(
1
)
{
served_cell_information
.
configured_EPS_TAC
=
(
F1AP_Configured_EPS_TAC_t
*
)
calloc
(
1
,
sizeof
(
F1AP_Configured_EPS_TAC_t
));
OCTET_STRING_fromBuf
(
served_cell_information
.
configured_EPS_TAC
,
"2"
,
...
...
@@ -739,8 +631,6 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
memset
(
servedPLMN_item
,
0
,
sizeof
(
*
servedPLMN_item
));
MCC_MNC_TO_PLMNID
(
f1ap_du_data
->
mcc
[
i
],
f1ap_du_data
->
mnc
[
i
],
f1ap_du_data
->
mnc_digit_length
[
i
],
&
servedPLMN_item
->
pLMN_Identity
);
ASN_SEQUENCE_ADD
(
&
served_cell_information
.
servedPLMNs
.
list
,
servedPLMN_item
);
// // /* - CHOICE NR-MODE-Info */
F1AP_NR_Mode_Info_t
nR_Mode_Info
;
...
...
@@ -750,43 +640,33 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
F1AP_FDD_Info_t
*
fDD_Info
=
(
F1AP_FDD_Info_t
*
)
calloc
(
1
,
sizeof
(
F1AP_FDD_Info_t
));
/* >>> UL NRFreqInfo */
fDD_Info
->
uL_NRFreqInfo
.
nRARFCN
=
999L
;
F1AP_FreqBandNrItem_t
ul_freqBandNrItem
;
memset
((
void
*
)
&
ul_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
));
ul_freqBandNrItem
.
freqBandIndicatorNr
=
888L
;
F1AP_SupportedSULFreqBandItem_t
ul_supportedSULFreqBandItem
;
memset
((
void
*
)
&
ul_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
ul_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
777L
;
ASN_SEQUENCE_ADD
(
&
ul_freqBandNrItem
.
supportedSULBandList
.
list
,
&
ul_supportedSULFreqBandItem
);
ASN_SEQUENCE_ADD
(
&
fDD_Info
->
uL_NRFreqInfo
.
freqBandListNr
.
list
,
&
ul_freqBandNrItem
);
/* >>> DL NRFreqInfo */
fDD_Info
->
dL_NRFreqInfo
.
nRARFCN
=
666L
;
F1AP_FreqBandNrItem_t
dl_freqBandNrItem
;
memset
((
void
*
)
&
dl_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
));
dl_freqBandNrItem
.
freqBandIndicatorNr
=
555L
;
F1AP_SupportedSULFreqBandItem_t
dl_supportedSULFreqBandItem
;
memset
((
void
*
)
&
dl_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
dl_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
444L
;
ASN_SEQUENCE_ADD
(
&
dl_freqBandNrItem
.
supportedSULBandList
.
list
,
&
dl_supportedSULFreqBandItem
);
ASN_SEQUENCE_ADD
(
&
fDD_Info
->
dL_NRFreqInfo
.
freqBandListNr
.
list
,
&
dl_freqBandNrItem
);
/* >>> UL Transmission Bandwidth */
fDD_Info
->
uL_Transmission_Bandwidth
.
nRSCS
=
F1AP_NRSCS_scs15
;
fDD_Info
->
uL_Transmission_Bandwidth
.
nRNRB
=
F1AP_NRNRB_nrb11
;
/* >>> DL Transmission Bandwidth */
fDD_Info
->
dL_Transmission_Bandwidth
.
nRSCS
=
F1AP_NRSCS_scs15
;
fDD_Info
->
dL_Transmission_Bandwidth
.
nRNRB
=
F1AP_NRNRB_nrb11
;
nR_Mode_Info
.
choice
.
fDD
=
fDD_Info
;
}
else
{
// TDD
nR_Mode_Info
.
present
=
F1AP_NR_Mode_Info_PR_tDD
;
/* > TDD >> TDD Info */
F1AP_TDD_Info_t
*
tDD_Info
=
(
F1AP_TDD_Info_t
*
)
calloc
(
1
,
sizeof
(
F1AP_TDD_Info_t
));
/* >>> ARFCN */
...
...
@@ -794,52 +674,39 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
F1AP_FreqBandNrItem_t
nr_freqBandNrItem
;
memset
((
void
*
)
&
nr_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
));
nr_freqBandNrItem
.
freqBandIndicatorNr
=
555L
;
F1AP_SupportedSULFreqBandItem_t
nr_supportedSULFreqBandItem
;
memset
((
void
*
)
&
nr_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
nr_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
444L
;
ASN_SEQUENCE_ADD
(
&
nr_freqBandNrItem
.
supportedSULBandList
.
list
,
&
nr_supportedSULFreqBandItem
);
ASN_SEQUENCE_ADD
(
&
tDD_Info
->
nRFreqInfo
.
freqBandListNr
.
list
,
&
nr_freqBandNrItem
);
tDD_Info
->
transmission_Bandwidth
.
nRSCS
=
F1AP_NRSCS_scs15
;
tDD_Info
->
transmission_Bandwidth
.
nRNRB
=
F1AP_NRNRB_nrb11
;
nR_Mode_Info
.
choice
.
tDD
=
tDD_Info
;
}
served_cell_information
.
nR_Mode_Info
=
nR_Mode_Info
;
/* - measurementTimingConfiguration */
char
*
measurementTimingConfiguration
=
"0"
;
// sept. 2018
OCTET_STRING_fromBuf
(
&
served_cell_information
.
measurementTimingConfiguration
,
measurementTimingConfiguration
,
strlen
(
measurementTimingConfiguration
));
served_cells_to_add_item
.
served_Cell_Information
=
served_cell_information
;
//
/* 2.1.2 gNB-DU System Information */
F1AP_GNB_DU_System_Information_t
*
gNB_DU_System_Information
=
(
F1AP_GNB_DU_System_Information_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNB_DU_System_Information_t
));
OCTET_STRING_fromBuf
(
&
gNB_DU_System_Information
->
mIB_message
,
// sept. 2018
"1"
,
sizeof
(
"1"
));
OCTET_STRING_fromBuf
(
&
gNB_DU_System_Information
->
sIB1_message
,
// sept. 2018
"1"
,
sizeof
(
"1"
));
served_cells_to_add_item
.
gNB_DU_System_Information
=
gNB_DU_System_Information
;
//
/* ADD */
served_cells_to_add_item_ies
->
value
.
choice
.
Served_Cells_To_Add_Item
=
served_cells_to_add_item
;
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
Served_Cells_To_Add_List
.
list
,
served_cells_to_add_item_ies
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
/* c3. Served_Cells_To_Modify */
ie
=
(
F1AP_GNBDUConfigurationUpdateIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNBDUConfigurationUpdateIEs_t
));
...
...
@@ -856,10 +723,8 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
served_cells_to_modify_item_ies
->
id
=
F1AP_ProtocolIE_ID_id_Served_Cells_To_Modify_Item
;
served_cells_to_modify_item_ies
->
criticality
=
F1AP_Criticality_reject
;
served_cells_to_modify_item_ies
->
value
.
present
=
F1AP_Served_Cells_To_Modify_ItemIEs__value_PR_Served_Cells_To_Modify_Item
;
F1AP_Served_Cells_To_Modify_Item_t
served_cells_to_modify_item
;
memset
((
void
*
)
&
served_cells_to_modify_item
,
0
,
sizeof
(
F1AP_Served_Cells_To_Modify_Item_t
));
/* 3.1 oldNRCGI */
F1AP_NRCGI_t
oldNRCGI
;
memset
(
&
oldNRCGI
,
0
,
sizeof
(
F1AP_NRCGI_t
));
...
...
@@ -867,12 +732,9 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
&
oldNRCGI
.
pLMN_Identity
);
NR_CELL_ID_TO_BIT_STRING
(
f1ap_setup_req
->
nr_cellid
[
i
],
&
oldNRCGI
.
nRCellIdentity
);
served_cells_to_modify_item
.
oldNRCGI
=
oldNRCGI
;
/* 3.2.1 serverd cell Information */
F1AP_Served_Cell_Information_t
served_cell_information
;
memset
((
void
*
)
&
served_cell_information
,
0
,
sizeof
(
F1AP_Served_Cell_Information_t
));
/* - nRCGI */
F1AP_NRCGI_t
nRCGI
;
memset
(
&
nRCGI
,
0
,
sizeof
(
F1AP_NRCGI_t
));
...
...
@@ -880,10 +742,8 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
&
nRCGI
.
pLMN_Identity
);
NR_CELL_ID_TO_BIT_STRING
(
f1ap_setup_req
->
nr_cellid
[
i
],
&
nRCGI
.
nRCellIdentity
);
served_cell_information
.
nRCGI
=
nRCGI
;
/* - nRPCI */
served_cell_information
.
nRPCI
=
f1ap_setup_req
->
nr_pci
[
i
];
// int 0..1007
/* - fiveGS_TAC */
served_cell_information
.
fiveGS_TAC
=
calloc
(
1
,
sizeof
(
*
served_cell_information
.
fiveGS_TAC
));
OCTET_STRING_fromBuf
(
served_cell_information
.
fiveGS_TAC
,
...
...
@@ -891,7 +751,7 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
3
);
/* - Configured_EPS_TAC */
if
(
1
)
{
if
(
1
)
{
served_cell_information
.
configured_EPS_TAC
=
(
F1AP_Configured_EPS_TAC_t
*
)
calloc
(
1
,
sizeof
(
F1AP_Configured_EPS_TAC_t
));
OCTET_STRING_fromBuf
(
served_cell_information
.
configured_EPS_TAC
,
"2"
,
...
...
@@ -902,9 +762,6 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
memset
(
servedPLMN_item
,
0
,
sizeof
(
*
servedPLMN_item
));
MCC_MNC_TO_PLMNID
(
f1ap_du_data
->
mcc
[
i
],
f1ap_du_data
->
mnc
[
i
],
f1ap_du_data
->
mnc_digit_length
[
i
],
&
servedPLMN_item
->
pLMN_Identity
);
ASN_SEQUENCE_ADD
(
&
served_cell_information
.
servedPLMNs
.
list
,
servedPLMN_item
);
// // /* - CHOICE NR-MODE-Info */
F1AP_NR_Mode_Info_t
nR_Mode_Info
;
...
...
@@ -914,43 +771,33 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
F1AP_FDD_Info_t
*
fDD_Info
=
(
F1AP_FDD_Info_t
*
)
calloc
(
1
,
sizeof
(
F1AP_FDD_Info_t
));
/* >>> UL NRFreqInfo */
fDD_Info
->
uL_NRFreqInfo
.
nRARFCN
=
999L
;
F1AP_FreqBandNrItem_t
ul_freqBandNrItem
;
memset
((
void
*
)
&
ul_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
));
ul_freqBandNrItem
.
freqBandIndicatorNr
=
888L
;
F1AP_SupportedSULFreqBandItem_t
ul_supportedSULFreqBandItem
;
memset
((
void
*
)
&
ul_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
ul_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
777L
;
ASN_SEQUENCE_ADD
(
&
ul_freqBandNrItem
.
supportedSULBandList
.
list
,
&
ul_supportedSULFreqBandItem
);
ASN_SEQUENCE_ADD
(
&
fDD_Info
->
uL_NRFreqInfo
.
freqBandListNr
.
list
,
&
ul_freqBandNrItem
);
/* >>> DL NRFreqInfo */
fDD_Info
->
dL_NRFreqInfo
.
nRARFCN
=
666L
;
F1AP_FreqBandNrItem_t
dl_freqBandNrItem
;
memset
((
void
*
)
&
dl_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
));
dl_freqBandNrItem
.
freqBandIndicatorNr
=
555L
;
F1AP_SupportedSULFreqBandItem_t
dl_supportedSULFreqBandItem
;
memset
((
void
*
)
&
dl_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
dl_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
444L
;
ASN_SEQUENCE_ADD
(
&
dl_freqBandNrItem
.
supportedSULBandList
.
list
,
&
dl_supportedSULFreqBandItem
);
ASN_SEQUENCE_ADD
(
&
fDD_Info
->
dL_NRFreqInfo
.
freqBandListNr
.
list
,
&
dl_freqBandNrItem
);
/* >>> UL Transmission Bandwidth */
fDD_Info
->
uL_Transmission_Bandwidth
.
nRSCS
=
F1AP_NRSCS_scs15
;
fDD_Info
->
uL_Transmission_Bandwidth
.
nRNRB
=
F1AP_NRNRB_nrb11
;
/* >>> DL Transmission Bandwidth */
fDD_Info
->
dL_Transmission_Bandwidth
.
nRSCS
=
F1AP_NRSCS_scs15
;
fDD_Info
->
dL_Transmission_Bandwidth
.
nRNRB
=
F1AP_NRNRB_nrb11
;
nR_Mode_Info
.
choice
.
fDD
=
fDD_Info
;
}
else
{
// TDD
nR_Mode_Info
.
present
=
F1AP_NR_Mode_Info_PR_tDD
;
/* > TDD >> TDD Info */
F1AP_TDD_Info_t
*
tDD_Info
=
(
F1AP_TDD_Info_t
*
)
calloc
(
1
,
sizeof
(
F1AP_TDD_Info_t
));
/* >>> ARFCN */
...
...
@@ -958,52 +805,39 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
F1AP_FreqBandNrItem_t
nr_freqBandNrItem
;
memset
((
void
*
)
&
nr_freqBandNrItem
,
0
,
sizeof
(
F1AP_FreqBandNrItem_t
));
nr_freqBandNrItem
.
freqBandIndicatorNr
=
555L
;
F1AP_SupportedSULFreqBandItem_t
nr_supportedSULFreqBandItem
;
memset
((
void
*
)
&
nr_supportedSULFreqBandItem
,
0
,
sizeof
(
F1AP_SupportedSULFreqBandItem_t
));
nr_supportedSULFreqBandItem
.
freqBandIndicatorNr
=
444L
;
ASN_SEQUENCE_ADD
(
&
nr_freqBandNrItem
.
supportedSULBandList
.
list
,
&
nr_supportedSULFreqBandItem
);
ASN_SEQUENCE_ADD
(
&
tDD_Info
->
nRFreqInfo
.
freqBandListNr
.
list
,
&
nr_freqBandNrItem
);
tDD_Info
->
transmission_Bandwidth
.
nRSCS
=
F1AP_NRSCS_scs15
;
tDD_Info
->
transmission_Bandwidth
.
nRNRB
=
F1AP_NRNRB_nrb11
;
nR_Mode_Info
.
choice
.
tDD
=
tDD_Info
;
}
served_cell_information
.
nR_Mode_Info
=
nR_Mode_Info
;
/* - measurementTimingConfiguration */
char
*
measurementTimingConfiguration
=
"0"
;
// sept. 2018
OCTET_STRING_fromBuf
(
&
served_cell_information
.
measurementTimingConfiguration
,
measurementTimingConfiguration
,
strlen
(
measurementTimingConfiguration
));
served_cells_to_modify_item
.
served_Cell_Information
=
served_cell_information
;
//
/* 3.2.2 gNB-DU System Information */
F1AP_GNB_DU_System_Information_t
*
gNB_DU_System_Information
=
(
F1AP_GNB_DU_System_Information_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNB_DU_System_Information_t
));
OCTET_STRING_fromBuf
(
&
gNB_DU_System_Information
->
mIB_message
,
// sept. 2018
"1"
,
sizeof
(
"1"
));
OCTET_STRING_fromBuf
(
&
gNB_DU_System_Information
->
sIB1_message
,
// sept. 2018
"1"
,
sizeof
(
"1"
));
served_cells_to_modify_item
.
gNB_DU_System_Information
=
gNB_DU_System_Information
;
//
/* ADD */
served_cells_to_modify_item_ies
->
value
.
choice
.
Served_Cells_To_Modify_Item
=
served_cells_to_modify_item
;
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
Served_Cells_To_Modify_List
.
list
,
served_cells_to_modify_item_ies
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
/* c4. Served_Cells_To_Delete */
ie
=
(
F1AP_GNBDUConfigurationUpdateIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_GNBDUConfigurationUpdateIEs_t
));
...
...
@@ -1020,10 +854,8 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
served_cells_to_delete_item_ies
->
id
=
F1AP_ProtocolIE_ID_id_Served_Cells_To_Delete_Item
;
served_cells_to_delete_item_ies
->
criticality
=
F1AP_Criticality_reject
;
served_cells_to_delete_item_ies
->
value
.
present
=
F1AP_Served_Cells_To_Delete_ItemIEs__value_PR_Served_Cells_To_Delete_Item
;
F1AP_Served_Cells_To_Delete_Item_t
served_cells_to_delete_item
;
memset
((
void
*
)
&
served_cells_to_delete_item
,
0
,
sizeof
(
F1AP_Served_Cells_To_Delete_Item_t
));
/* 3.1 oldNRCGI */
F1AP_NRCGI_t
oldNRCGI
;
memset
(
&
oldNRCGI
,
0
,
sizeof
(
F1AP_NRCGI_t
));
...
...
@@ -1031,16 +863,13 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
&
oldNRCGI
.
pLMN_Identity
);
NR_CELL_ID_TO_BIT_STRING
(
f1ap_setup_req
->
nr_cellid
[
i
],
&
oldNRCGI
.
nRCellIdentity
);
served_cells_to_delete_item
.
oldNRCGI
=
oldNRCGI
;
/* ADD */
served_cells_to_delete_item_ies
->
value
.
choice
.
Served_Cells_To_Delete_Item
=
served_cells_to_delete_item
;
ASN_SEQUENCE_ADD
(
&
ie
->
value
.
choice
.
Served_Cells_To_Delete_List
.
list
,
served_cells_to_delete_item_ies
);
}
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
ASN_SEQUENCE_ADD
(
&
out
->
protocolIEs
.
list
,
ie
);
if
(
f1ap_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
LOG_E
(
F1AP
,
"Failed to encode F1 gNB-DU CONFIGURATION UPDATE
\n
"
);
...
...
@@ -1050,8 +879,6 @@ int DU_send_gNB_DU_CONFIGURATION_UPDATE(instance_t instance,
return
0
;
}
int
DU_handle_gNB_DU_CONFIGURATION_FAILURE
(
instance_t
instance
,
uint32_t
assoc_id
,
uint32_t
stream
,
...
...
@@ -1071,9 +898,7 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
uint32_t
assoc_id
,
uint32_t
stream
,
F1AP_F1AP_PDU_t
*
pdu
)
{
LOG_D
(
F1AP
,
"DU_handle_gNB_CU_CONFIGURATION_UPDATE
\n
"
);
AssertFatal
(
pdu
->
present
==
F1AP_F1AP_PDU_PR_initiatingMessage
,
"pdu->present != F1AP_F1AP_PDU_PR_initiatingMessage
\n
"
);
AssertFatal
(
pdu
->
choice
.
initiatingMessage
->
procedureCode
==
F1AP_ProcedureCode_id_gNBCUConfigurationUpdate
,
...
...
@@ -1082,21 +907,18 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
"pdu->choice.initiatingMessage->criticality != F1AP_Criticality_reject
\n
"
);
AssertFatal
(
pdu
->
choice
.
initiatingMessage
->
value
.
present
==
F1AP_InitiatingMessage__value_PR_GNBCUConfigurationUpdate
,
"pdu->choice.initiatingMessage->value.present != F1AP_InitiatingMessage__value_PR_GNBCUConfigurationUpdate
\n
"
);
F1AP_GNBCUConfigurationUpdate_t
*
in
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
GNBCUConfigurationUpdate
;
F1AP_GNBCUConfigurationUpdateIEs_t
*
ie
;
int
TransactionId
=
-
1
;
int
num_cells_to_activate
=
0
;
F1AP_Cells_to_be_Activated_List_Item_t
*
cell
;
MessageDef
*
msg_p
=
itti_alloc_new_message
(
TASK_DU_F1
,
0
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
);
LOG_D
(
F1AP
,
"F1AP: gNB_CU_Configuration_Update: protocolIEs.list.count %d
\n
"
,
in
->
protocolIEs
.
list
.
count
);
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
for
(
int
i
=
0
;
i
<
in
->
protocolIEs
.
list
.
count
;
i
++
)
{
ie
=
in
->
protocolIEs
.
list
.
array
[
i
];
switch
(
ie
->
id
)
{
case
F1AP_ProtocolIE_ID_id_TransactionID
:
AssertFatal
(
ie
->
criticality
==
F1AP_Criticality_reject
,
...
...
@@ -1107,29 +929,26 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
LOG_D
(
F1AP
,
"F1AP: GNB-CU-ConfigurationUpdate: TransactionId %d
\n
"
,
TransactionId
);
break
;
case
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
:
{
case
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
:
{
AssertFatal
(
ie
->
criticality
==
F1AP_Criticality_reject
,
"ie->criticality != F1AP_Criticality_reject
\n
"
);
AssertFatal
(
ie
->
value
.
present
==
F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Activated_List
,
"ie->value.present != F1AP_GNBCUConfigurationUpdateIEs__value_PR_Cells_to_be_Activated_List
\n
"
);
num_cells_to_activate
=
ie
->
value
.
choice
.
Cells_to_be_Activated_List
.
list
.
count
;
LOG_D
(
F1AP
,
"F1AP: Activating %d cells
\n
"
,
num_cells_to_activate
);
for
(
int
i
=
0
;
i
<
num_cells_to_activate
;
i
++
)
{
for
(
int
i
=
0
;
i
<
num_cells_to_activate
;
i
++
)
{
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
cells_to_be_activated_list_item_ies
=
(
F1AP_Cells_to_be_Activated_List_ItemIEs_t
*
)
ie
->
value
.
choice
.
Cells_to_be_Activated_List
.
list
.
array
[
i
];
AssertFatal
(
cells_to_be_activated_list_item_ies
->
id
==
F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item
,
"cells_to_be_activated_list_item_ies->id != F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List_Item"
);
AssertFatal
(
cells_to_be_activated_list_item_ies
->
criticality
==
F1AP_Criticality_reject
,
"cells_to_be_activated_list_item_ies->criticality == F1AP_Criticality_reject"
);
AssertFatal
(
cells_to_be_activated_list_item_ies
->
value
.
present
==
F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item
,
"cells_to_be_activated_list_item_ies->value.present == F1AP_Cells_to_be_Activated_List_ItemIEs__value_PR_Cells_to_be_Activated_List_Item"
);
cell
=
&
cells_to_be_activated_list_item_ies
->
value
.
choice
.
Cells_to_be_Activated_List_Item
;
TBCD_TO_MCC_MNC
(
&
cell
->
nRCGI
.
pLMN_Identity
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mcc
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mnc
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mnc_digit_length
);
TBCD_TO_MCC_MNC
(
&
cell
->
nRCGI
.
pLMN_Identity
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mcc
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mnc
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mnc_digit_length
);
LOG_D
(
F1AP
,
"nr_cellId : %x %x %x %x %x
\n
"
,
cell
->
nRCGI
.
nRCellIdentity
.
buf
[
0
],
cell
->
nRCGI
.
nRCellIdentity
.
buf
[
1
],
...
...
@@ -1140,10 +959,12 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
nr_cellid
);
F1AP_ProtocolExtensionContainer_154P112_t
*
ext
=
(
F1AP_ProtocolExtensionContainer_154P112_t
*
)
cell
->
iE_Extensions
;
if
(
ext
==
NULL
)
continue
;
if
(
ext
==
NULL
)
continue
;
for
(
int
cnt
=
0
;
cnt
<
ext
->
list
.
count
;
cnt
++
)
{
for
(
int
cnt
=
0
;
cnt
<
ext
->
list
.
count
;
cnt
++
)
{
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
*
cells_to_be_activated_list_itemExtIEs
=
(
F1AP_Cells_to_be_Activated_List_ItemExtIEs_t
*
)
ext
->
list
.
array
[
cnt
];
switch
(
cells_to_be_activated_list_itemExtIEs
->
id
)
{
/*
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_NOTHING:
...
...
@@ -1153,45 +974,52 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_IAB_Info_IAB_donor_CU,
case F1AP_Cells_to_be_Activated_List_ItemExtIEs__extensionValue_PR_AvailableSNPN_ID_List
*/
case
F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation
:
{
case
F1AP_ProtocolIE_ID_id_gNB_CUSystemInformation
:
{
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
nrpci
=
(
cell
->
nRPCI
!=
NULL
)
?
*
cell
->
nRPCI
:
0
;
F1AP_GNB_CUSystemInformation_t
*
gNB_CUSystemInformation
=
(
F1AP_GNB_CUSystemInformation_t
*
)
&
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
;
F1AP_GNB_CUSystemInformation_t
*
gNB_CUSystemInformation
=
(
F1AP_GNB_CUSystemInformation_t
*
)
&
cells_to_be_activated_list_itemExtIEs
->
extensionValue
.
choice
.
GNB_CUSystemInformation
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
num_SI
=
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
count
;
AssertFatal
(
ext
->
list
.
count
==
1
,
"At least one SI message should be there, and only 1 for now!
\n
"
);
LOG_D
(
F1AP
,
"F1AP: Cell %d MCC %d MNC %d NRCellid %lx num_si %d
\n
"
,
i
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mcc
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
mnc
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
nr_cellid
,
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
num_SI
);
for
(
int
si
=
0
;
si
<
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
count
;
si
++
)
{
for
(
int
si
=
0
;
si
<
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
count
;
si
++
)
{
F1AP_SibtypetobeupdatedListItem_t
*
sib_item
=
gNB_CUSystemInformation
->
sibtypetobeupdatedlist
.
list
.
array
[
si
];
size_t
size
=
sib_item
->
sIBmessage
.
size
;
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
SI_container_length
[
si
]
=
size
;
LOG_D
(
F1AP
,
"F1AP: SI_container_length[%d][%d] %ld bytes
\n
"
,
i
,
(
int
)
sib_item
->
sIBtype
,
size
);
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
SI_container
[
si
]
=
malloc
(
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
SI_container_length
[
si
]);
memcpy
((
void
*
)
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
SI_container
[
si
],
(
void
*
)
sib_item
->
sIBmessage
.
buf
,
memcpy
((
void
*
)
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
cells_to_activate
[
i
].
SI_container
[
si
],
(
void
*
)
sib_item
->
sIBmessage
.
buf
,
size
);
}
break
;
}
case
F1AP_ProtocolIE_ID_id_AvailablePLMNList
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
case
F1AP_ProtocolIE_ID_id_ExtendedAvailablePLMN_List
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
case
F1AP_ProtocolIE_ID_id_IAB_Info_IAB_donor_CU
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
case
F1AP_ProtocolIE_ID_id_AvailableSNPN_ID_List
:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id_AvailablePLMNList not supported yet
\n
"
);
break
;
default:
AssertFatal
(
1
==
0
,
"F1AP_ProtocolIE_ID_id %d unknown
\n
"
,(
int
)
cells_to_be_activated_list_itemExtIEs
->
id
);
break
;
}
}
// for (cnt=...
}
// for (cells_to_activate...
break
;
}
// case F1AP_ProtocolIE_ID_id_Cells_to_be_Activated_List
...
...
@@ -1200,10 +1028,10 @@ int DU_handle_gNB_CU_CONFIGURATION_UPDATE(instance_t instance,
break
;
}
// switch ie
}
// for IE
AssertFatal
(
TransactionId
!=-
1
,
"TransactionId was not sent
\n
"
);
LOG_D
(
F1AP
,
"F1AP: num_cells_to_activate %d
\n
"
,
num_cells_to_activate
);
F1AP_GNB_CU_CONFIGURATION_UPDATE
(
msg_p
).
num_cells_to_activate
=
num_cells_to_activate
;
MSC_LOG_RX_MESSAGE
(
MSC_F1AP_DU
,
MSC_F1AP_CU
,
...
...
@@ -1234,28 +1062,21 @@ int DU_send_gNB_CU_CONFIGURATION_UPDATE_FAILURE(instance_t instance,
int
DU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE
(
instance_t
instance
,
f1ap_gnb_cu_configuration_update_acknowledge_t
*
GNBCUConfigurationUpdateAcknowledge
)
{
AssertFatal
(
GNBCUConfigurationUpdateAcknowledge
->
num_cells_failed_to_be_activated
==
0
,
"%d cells failed to activate
\n
"
,
GNBCUConfigurationUpdateAcknowledge
->
num_cells_failed_to_be_activated
);
AssertFatal
(
GNBCUConfigurationUpdateAcknowledge
->
noofTNLAssociations_to_setup
==
0
,
"%d TNLAssociations to setup, handle this ...
\n
"
,
GNBCUConfigurationUpdateAcknowledge
->
noofTNLAssociations_to_setup
);
AssertFatal
(
GNBCUConfigurationUpdateAcknowledge
->
noofTNLAssociations_failed
==
0
,
"%d TNLAssociations failed
\n
"
,
GNBCUConfigurationUpdateAcknowledge
->
noofTNLAssociations_failed
);
AssertFatal
(
GNBCUConfigurationUpdateAcknowledge
->
noofDedicatedSIDeliveryNeededUEs
==
0
,
"%d DedicatedSIDeliveryNeededUEs
\n
"
,
GNBCUConfigurationUpdateAcknowledge
->
noofDedicatedSIDeliveryNeededUEs
);
F1AP_F1AP_PDU_t
pdu
;
uint8_t
*
buffer
;
uint32_t
len
;
/* Create */
/* 0. pdu Type */
memset
(
&
pdu
,
0
,
sizeof
(
pdu
));
...
...
@@ -1265,7 +1086,6 @@ int DU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance,
pdu
.
choice
.
successfulOutcome
->
criticality
=
F1AP_Criticality_reject
;
pdu
.
choice
.
successfulOutcome
->
value
.
present
=
F1AP_SuccessfulOutcome__value_PR_GNBCUConfigurationUpdateAcknowledge
;
F1AP_GNBCUConfigurationUpdateAcknowledge_t
*
out
=
&
pdu
.
choice
.
successfulOutcome
->
value
.
choice
.
GNBCUConfigurationUpdateAcknowledge
;
/* mandatory */
/* c1. Transaction ID (integer value)*/
F1AP_GNBCUConfigurationUpdateAcknowledgeIEs_t
*
ie
=
(
F1AP_GNBCUConfigurationUpdateAcknowledgeIEs_t
*
)
calloc
(
1
,
sizeof
(
F1AP_F1SetupResponseIEs_t
));
...
...
@@ -1282,9 +1102,6 @@ int DU_send_gNB_CU_CONFIGURATION_UPDATE_ACKNOWLEDGE(instance_t instance,
}
du_f1ap_itti_send_sctp_data_req
(
instance
,
f1ap_du_data
->
assoc_id
,
buffer
,
len
,
0
);
return
0
;
}
...
...
openair3/SCTP/sctp_eNB_task.c
View file @
42ea1f82
...
...
@@ -925,21 +925,14 @@ void
sctp_eNB_read_from_socket
(
struct
sctp_cnx_list_elm_s
*
sctp_cnx
)
{
int
flags
=
0
,
n
;
socklen_t
from_len
;
struct
sctp_sndrcvinfo
sinfo
;
struct
sockaddr_in
addr
;
uint8_t
buffer
[
SCTP_RECV_BUFFER_SIZE
];
DevAssert
(
sctp_cnx
!=
NULL
);
memset
((
void
*
)
&
addr
,
0
,
sizeof
(
struct
sockaddr_in
))
;
from_len
=
(
socklen_t
)
sizeof
(
struct
sockaddr_in
)
;
memset
((
void
*
)
&
sinfo
,
0
,
sizeof
(
struct
sctp_sndrcvinfo
))
;
int
flags
=
0
;
struct
sctp_sndrcvinfo
sinfo
=
{
0
}
;
uint8_t
buffer
[
SCTP_RECV_BUFFER_SIZE
]
;
n
=
sctp_recvmsg
(
sctp_cnx
->
sd
,
(
void
*
)
buffer
,
SCTP_RECV_BUFFER_SIZE
,
(
struct
sockaddr
*
)
&
addr
,
&
from_len
,
int
n
=
sctp_recvmsg
(
sctp_cnx
->
sd
,
(
void
*
)
buffer
,
SCTP_RECV_BUFFER_SIZE
,
NULL
,
NULL
,
&
sinfo
,
&
flags
);
if
(
n
<
0
)
{
...
...
@@ -1049,8 +1042,8 @@ sctp_eNB_read_from_socket(
sctp_cnx
->
ppid
);
}
SCTP_DEBUG
(
"[%d][%d] Msg of length %d received
from port %u
, on stream %d, PPID %d
\n
"
,
sinfo
.
sinfo_assoc_id
,
sctp_cnx
->
sd
,
n
,
ntohs
(
addr
.
sin_port
),
SCTP_DEBUG
(
"[%d][%d] Msg of length %d received, on stream %d, PPID %d
\n
"
,
sinfo
.
sinfo_assoc_id
,
sctp_cnx
->
sd
,
n
,
sinfo
.
sinfo_stream
,
ntohl
(
sinfo
.
sinfo_ppid
));
sctp_itti_send_new_message_ind
(
sctp_cnx
->
task_id
,
...
...
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