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
spbro
OpenXG-RAN
Commits
9dc22822
Commit
9dc22822
authored
Feb 20, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove 4G F1
parent
ffecf830
Changes
41
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
1851 additions
and
3859 deletions
+1851
-3859
CMakeLists.txt
CMakeLists.txt
+5
-6
doc/Doxyfile
doc/Doxyfile
+0
-1
executables/create_tasks.c
executables/create_tasks.c
+1
-16
executables/create_tasks_mbms.c
executables/create_tasks_mbms.c
+0
-14
executables/lte-softmodem.c
executables/lte-softmodem.c
+68
-63
executables/main-ocp.c
executables/main-ocp.c
+14
-25
openair2/COMMON/m2ap_messages_types.h
openair2/COMMON/m2ap_messages_types.h
+1
-11
openair2/ENB_APP/enb_app.c
openair2/ENB_APP/enb_app.c
+21
-91
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+1143
-1374
openair2/ENB_APP/enb_config.h
openair2/ENB_APP/enb_config.h
+2
-5
openair2/F1AP/dummy_enb.c
openair2/F1AP/dummy_enb.c
+0
-55
openair2/F1AP/f1ap_cu_interface_management.c
openair2/F1AP/f1ap_cu_interface_management.c
+3
-201
openair2/F1AP/f1ap_cu_task.c
openair2/F1AP/f1ap_cu_task.c
+1
-6
openair2/F1AP/f1ap_cu_ue_context_management.c
openair2/F1AP/f1ap_cu_ue_context_management.c
+7
-42
openair2/F1AP/f1ap_du_rrc_message_transfer.c
openair2/F1AP/f1ap_du_rrc_message_transfer.c
+18
-490
openair2/F1AP/f1ap_du_task.c
openair2/F1AP/f1ap_du_task.c
+1
-8
openair2/F1AP/f1ap_du_ue_context_management.c
openair2/F1AP/f1ap_du_ue_context_management.c
+29
-318
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+9
-27
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
+59
-138
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
+0
-4
openair2/LAYER2/rlc_v2/rlc_oai_api.c
openair2/LAYER2/rlc_v2/rlc_oai_api.c
+0
-31
openair2/M2AP/m2ap_MCE.c
openair2/M2AP/m2ap_MCE.c
+1
-3
openair2/M2AP/m2ap_MCE_interface_management.c
openair2/M2AP/m2ap_MCE_interface_management.c
+5
-5
openair2/M2AP/m2ap_eNB_generate_messages.c
openair2/M2AP/m2ap_eNB_generate_messages.c
+1
-1
openair2/M2AP/m2ap_eNB_interface_management.c
openair2/M2AP/m2ap_eNB_interface_management.c
+12
-12
openair2/MCE_APP/mce_app.c
openair2/MCE_APP/mce_app.c
+19
-37
openair2/MCE_APP/mce_config.h
openair2/MCE_APP/mce_config.h
+0
-1
openair2/RRC/LTE/L2_interface.c
openair2/RRC/LTE/L2_interface.c
+0
-23
openair2/RRC/LTE/L2_interface_common.c
openair2/RRC/LTE/L2_interface_common.c
+0
-6
openair2/RRC/LTE/rrc_defs.h
openair2/RRC/LTE/rrc_defs.h
+0
-1
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+375
-722
openair2/RRC/LTE/rrc_eNB_M2AP.c
openair2/RRC/LTE/rrc_eNB_M2AP.c
+40
-54
openair2/RRC/LTE/rrc_eNB_S1AP.c
openair2/RRC/LTE/rrc_eNB_S1AP.c
+0
-33
openair2/RRC/NR/L2_nr_interface.c
openair2/RRC/NR/L2_nr_interface.c
+1
-3
openair3/COMMON/messages_types.h
openair3/COMMON/messages_types.h
+0
-1
openair3/M3AP/m3ap_MCE_generate_messsages.c
openair3/M3AP/m3ap_MCE_generate_messsages.c
+1
-1
openair3/M3AP/m3ap_MCE_interface_management.c
openair3/M3AP/m3ap_MCE_interface_management.c
+7
-7
openair3/M3AP/m3ap_MME.c
openair3/M3AP/m3ap_MME.c
+1
-3
openair3/M3AP/m3ap_MME_interface_management.c
openair3/M3AP/m3ap_MME_interface_management.c
+5
-5
openair3/MME_APP/mme_app.c
openair3/MME_APP/mme_app.c
+1
-14
openair3/MME_APP/mme_config.h
openair3/MME_APP/mme_config.h
+0
-1
No files found.
CMakeLists.txt
View file @
9dc22822
...
...
@@ -1581,7 +1581,7 @@ add_library(L2
${
ENB_APP_SRC
}
${
MCE_APP_SRC
}
)
target_link_libraries
(
L2 PRIVATE
f1ap
x2ap s1ap lte_rrc m2ap
)
target_link_libraries
(
L2 PRIVATE x2ap s1ap lte_rrc m2ap
)
target_link_libraries
(
L2 PRIVATE asn1_nr_rrc asn1_lte_rrc
)
add_library
(
MAC_NR
${
MAC_NR_SRC
}
)
...
...
@@ -2193,7 +2193,6 @@ add_executable(lte-softmodem
${
OPENAIR_DIR
}
/radio/COMMON/record_player.c
${
OPENAIR2_DIR
}
/RRC/NAS/nas_config.c
${
OPENAIR2_DIR
}
/RRC/NAS/rb_config.c
${
OPENAIR2_DIR
}
/F1AP/dummy_enb.c
${
OPENAIR1_DIR
}
/SIMULATION/ETH_TRANSPORT/netlink_init.c
${
OPENAIR1_DIR
}
/SIMULATION/ETH_TRANSPORT/multicast_link.c
${
OPENAIR1_DIR
}
/SIMULATION/ETH_TRANSPORT/socket.c
...
...
@@ -2209,7 +2208,7 @@ add_dependencies(lte-softmodem oai_iqplayer)
target_link_libraries
(
lte-softmodem PRIVATE
-Wl,--start-group
lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U
f1ap
SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
PHY_COMMON PHY PHY_RU L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB MISC_NFAPI_LTE_LIB
${
RAL_LIB
}
${
NAS_UE_LIB
}
ITTI SIMU
-Wl,--end-group z dl
)
...
...
@@ -2248,7 +2247,7 @@ add_dependencies(ocp-enb oai_iqplayer coding params_libconfig rfsimulator)
target_link_libraries
(
ocp-enb
-Wl,--start-group
lte_rrc nr_rrc s1ap
f1ap
m2ap x2ap m3ap GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
lte_rrc nr_rrc s1ap m2ap x2ap m3ap GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT MME_APP SCHED_LIB SCHED_RU_LIB
PHY_COMMON PHY PHY_RU L2 L2_LTE NFAPI_COMMON_LIB NFAPI_LIB MISC_NFAPI_LTE_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB SIMU
${
RAL_LIB
}
${
NAS_UE_LIB
}
ITTI
-Wl,--end-group z dl
)
...
...
@@ -2277,7 +2276,7 @@ target_link_libraries(oairu PRIVATE asn1_nr_rrc asn1_lte_rrc)
# force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries
(
lte-softmodem PRIVATE
asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap
asn1_f1ap
)
asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap
)
# lte-uesoftmodem is UE implementation
...
...
@@ -2322,7 +2321,7 @@ target_link_libraries(lte-uesoftmodem PRIVATE asn1_nr_rrc asn1_lte_rrc)
# force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries
(
lte-uesoftmodem PRIVATE
asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap
asn1_f1ap
)
asn1_lte_rrc asn1_s1ap asn1_m2ap asn1_m3ap asn1_x2ap
)
# nr-softmodem
###################################################
...
...
doc/Doxyfile
View file @
9dc22822
...
...
@@ -1003,7 +1003,6 @@ INPUT = \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_task.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_interface_management.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_du_ue_context_management.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/dummy_enb.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_rrc_message_transfer.h \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_warning_message_transmission.c \
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/F1AP/f1ap_cu_task.h \
...
...
executables/create_tasks.c
View file @
9dc22822
...
...
@@ -34,8 +34,6 @@
#include "lteRALenb.h"
#endif
#include "RRC/LTE/rrc_defs.h"
# include "f1ap_cu_task.h"
# include "f1ap_du_task.h"
# include "enb_app.h"
# include "openair2/LAYER2/MAC/mac_proto.h"
#include <executables/split_headers.h>
...
...
@@ -45,7 +43,6 @@ extern RAN_CONTEXT_t RC;
int
create_tasks
(
uint32_t
enb_nb
)
{
LOG_D
(
ENB_APP
,
"%s(enb_nb:%d
\n
"
,
__FUNCTION__
,
enb_nb
);
ngran_node_t
type
=
RC
.
rrc
[
0
]
->
node_type
;
int
rc
;
if
(
enb_nb
==
0
)
return
0
;
...
...
@@ -60,7 +57,7 @@ int create_tasks(uint32_t enb_nb) {
AssertFatal
(
rc
>=
0
,
"Create task for SCTP failed
\n
"
);
}
if
(
EPC_MODE_ENABLED
&&
!
NODE_IS_DU
(
type
)
&&
!
(
split73
==
SPLIT73_DU
)
)
{
if
(
EPC_MODE_ENABLED
&&
!
(
split73
==
SPLIT73_DU
)
)
{
rc
=
itti_create_task
(
TASK_S1AP
,
s1ap_eNB_task
,
NULL
);
AssertFatal
(
rc
>=
0
,
"Create task for S1AP failed
\n
"
);
rc
=
itti_create_task
(
TASK_GTPV1_U
,
gtpv1uTask
,
NULL
);
...
...
@@ -74,17 +71,5 @@ int create_tasks(uint32_t enb_nb) {
LOG_I
(
X2AP
,
"X2AP is disabled.
\n
"
);
}
if
(
NODE_IS_CU
(
type
))
{
rc
=
itti_create_task
(
TASK_CU_F1
,
F1AP_CU_task
,
NULL
);
AssertFatal
(
rc
>=
0
,
"Create task for CU F1AP failed
\n
"
);
}
if
(
NODE_IS_DU
(
type
))
{
rc
=
itti_create_task
(
TASK_DU_F1
,
F1AP_DU_task
,
NULL
);
AssertFatal
(
rc
>=
0
,
"Create task for DU F1AP failed
\n
"
);
rc
=
itti_create_task
(
TASK_GTPV1_U
,
gtpv1uTask
,
NULL
);
AssertFatal
(
rc
>=
0
,
"Create task for GTPV1U failed
\n
"
);
}
return
0
;
}
executables/create_tasks_mbms.c
View file @
9dc22822
...
...
@@ -38,8 +38,6 @@
#include "lteRALenb.h"
#endif
#include "RRC/LTE/rrc_defs.h"
# include "f1ap_cu_task.h"
# include "f1ap_du_task.h"
# include "enb_app.h"
# include "mce_app.h"
# include "mme_app.h"
...
...
@@ -49,7 +47,6 @@
int
create_tasks_mbms
(
uint32_t
enb_nb
)
{
// LOG_D(ENB_APP, "%s(enb_nb:%d\n", __FUNCTION__, enb_nb);
// ngran_node_t type = RC.rrc[0]->node_type;
AssertFatal
(
!
get_softmodem_params
()
->
nsa
,
"In NSA mode
\n
"
);
int
rc
;
...
...
@@ -80,17 +77,6 @@ int create_tasks_mbms(uint32_t enb_nb) {
rc
=
itti_create_task
(
TASK_GTPV1_U
,
gtpv1uTask
,
NULL
);
AssertFatal
(
rc
>=
0
,
"Create task for GTPV1U failed
\n
"
);
}
///
// if (NODE_IS_CU(type)) {
// rc = itti_create_task(TASK_CU_F1, F1AP_CU_task, NULL);
// AssertFatal(rc >= 0, "Create task for CU F1AP failed\n");
// }
//
// if (NODE_IS_DU(type)) {
// rc = itti_create_task(TASK_DU_F1, F1AP_DU_task, NULL);
// AssertFatal(rc >= 0, "Create task for DU F1AP failed\n");
// }
//
if
(
is_m3ap_MCE_enabled
())
{
rc
=
itti_create_task
(
TASK_M3AP_MCE
,
m3ap_MCE_task
,
NULL
);
...
...
executables/lte-softmodem.c
View file @
9dc22822
...
...
@@ -170,6 +170,24 @@ double cpuf;
int
oaisim_flag
=
0
;
/* hardcoded into gtp_itf.cpp */
bool
sdap_data_req
(
protocol_ctxt_t
*
ctxt_p
,
const
ue_id_t
ue_id
,
const
srb_flag_t
srb_flag
,
const
rb_id_t
rb_id
,
const
mui_t
mui
,
const
confirm_t
confirm
,
const
sdu_size_t
sdu_buffer_size
,
unsigned
char
*
const
sdu_buffer
,
const
pdcp_transmission_mode_t
pt_mode
,
const
uint32_t
*
sourceL2Id
,
const
uint32_t
*
destinationL2Id
,
const
uint8_t
qfi
,
const
bool
rqi
,
const
int
pdusession_id
)
{
abort
();
}
/* forward declarations */
void
set_default_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
[
MAX_NUM_CCs
]);
...
...
@@ -383,8 +401,8 @@ void terminate_task(module_id_t mod_id, task_id_t from, task_id_t to) {
extern
void
free_transport
(
PHY_VARS_eNB
*
);
extern
void
phy_free_RU
(
RU_t
*
);
static
void
init_pdcp
(
void
)
{
if
(
!
NODE_IS_DU
(
RC
.
rrc
[
0
]
->
node_type
))
{
static
void
init_pdcp
(
void
)
{
pdcp_layer_init
();
uint32_t
pdcp_initmask
=
(
IS_SOFTMODEM_NOS1
)
?
(
PDCP_USE_NETLINK_BIT
|
LINK_ENB_PDCP_TO_IP_DRIVER_BIT
)
:
LINK_ENB_PDCP_TO_GTPV1U_BIT
;
...
...
@@ -396,13 +414,8 @@ static void init_pdcp(void) {
pdcp_module_init
(
pdcp_initmask
,
0
);
if
(
NODE_IS_CU
(
RC
.
rrc
[
0
]
->
node_type
))
{
pdcp_set_rlc_data_req_func
(
cu_send_to_du
);
}
else
{
pdcp_set_rlc_data_req_func
(
rlc_data_req
);
pdcp_set_pdcp_data_ind_func
(
pdcp_data_ind
);
}
}
}
static
void
wait_nfapi_init
(
char
*
thread_name
)
{
...
...
@@ -420,7 +433,6 @@ int main ( int argc, char **argv )
{
int
CC_id
=
0
;
int
ru_id
;
int
node_type
=
ngran_eNB
;
start_background_system
();
...
...
@@ -469,8 +481,7 @@ int main ( int argc, char **argv )
}
if
(
RC
.
nb_inst
>
0
)
{
/* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks
* for monolithic/F1 modes */
/* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks */
init_pdcp
();
if
(
create_tasks
(
1
)
<
0
)
{
...
...
@@ -484,10 +495,9 @@ int main ( int argc, char **argv )
itti_send_msg_to_task
(
TASK_RRC_ENB
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
),
msg_p
);
rrc_enb_process_itti_msg
(
NULL
);
}
node_type
=
RC
.
rrc
[
0
]
->
node_type
;
}
if
(
RC
.
nb_inst
>
0
&&
NODE_IS_CU
(
node_type
)
)
{
if
(
RC
.
nb_inst
>
0
)
{
protocol_ctxt_t
ctxt
;
ctxt
.
module_id
=
0
;
ctxt
.
instance
=
0
;
...
...
@@ -498,8 +508,6 @@ int main ( int argc, char **argv )
pdcp_run
(
&
ctxt
);
}
/* start threads if only L1 or not a CU */
if
(
RC
.
nb_inst
==
0
||
!
NODE_IS_CU
(
node_type
)
||
NFAPI_MODE
==
NFAPI_MODE_PNF
||
NFAPI_MODE
==
NFAPI_MODE_VNF
)
{
// init UE_PF_PO and mutex lock
pthread_mutex_init
(
&
ue_pf_po_mutex
,
NULL
);
memset
(
&
UE_PF_PO
[
0
][
0
],
0
,
sizeof
(
UE_PF_PO_t
)
*
MAX_MOBILES_PER_ENB
*
MAX_NUM_CCs
);
...
...
@@ -545,9 +553,6 @@ int main ( int argc, char **argv )
L1proctx
->
threadPool
=
L1proc
->
threadPool
;
}
}
printf
(
"wait_eNBs()
\n
"
);
wait_eNBs
();
printf
(
"About to Init RU threads RC.nb_RU:%d
\n
"
,
RC
.
nb_RU
);
...
...
@@ -627,7 +632,7 @@ int main ( int argc, char **argv )
// stop threads
#if 0 //Disable clean up because this tends to crash (and unnecessary)
if (RC.nb_inst == 0
|| !NODE_IS_CU(node_type)
) {
if (RC.nb_inst == 0) {
if(IS_SOFTMODEM_DOSCOPE)
end_forms();
...
...
executables/main-ocp.c
View file @
9dc22822
...
...
@@ -1027,7 +1027,6 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
}
void
init_pdcp
(
void
)
{
if
(
!
NODE_IS_DU
(
RC
.
rrc
[
0
]
->
node_type
))
{
pdcp_layer_init
();
uint32_t
pdcp_initmask
=
(
IS_SOFTMODEM_NOS1
)
?
(
PDCP_USE_NETLINK_BIT
|
LINK_ENB_PDCP_TO_IP_DRIVER_BIT
)
:
LINK_ENB_PDCP_TO_GTPV1U_BIT
;
...
...
@@ -1040,15 +1039,9 @@ void init_pdcp(void) {
if
(
split73
!=
SPLIT73_DU
)
pdcp_module_init
(
pdcp_initmask
,
0
);
if
(
NODE_IS_CU
(
RC
.
rrc
[
0
]
->
node_type
))
{
//pdcp_set_rlc_data_req_func(proto_agent_send_rlc_data_req);
}
else
{
pdcp_set_rlc_data_req_func
(
rlc_data_req
);
pdcp_set_pdcp_data_ind_func
(
pdcp_data_ind
);
}
}
else
{
//pdcp_set_pdcp_data_ind_func(proto_agent_send_pdcp_data_ind);
}
}
static
void
wait_nfapi_init
(
char
*
thread_name
)
{
...
...
@@ -1074,7 +1067,6 @@ int main ( int argc, char **argv ) {
//mtrace();
int
i
;
int
CC_id
=
0
;
int
node_type
=
ngran_eNB
;
sf_ahead
=
4
;
// Bell Labs
AssertFatal
(
load_configmodule
(
argc
,
argv
,
0
),
"[SOFTMODEM] Error, configuration module init failed
\n
"
);
logInit
();
...
...
@@ -1137,8 +1129,7 @@ int main ( int argc, char **argv ) {
if
(
RC
.
nb_inst
>
0
)
{
/* Start the agent. If it is turned off in the configuration, it won't start */
/* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks
* for monolithic/F1 modes */
/* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks */
init_pdcp
();
AssertFatal
(
create_tasks
(
1
)
==
0
,
"cannot create ITTI tasks
\n
"
);
...
...
@@ -1147,11 +1138,9 @@ int main ( int argc, char **argv ) {
RRC_CONFIGURATION_REQ
(
msg_p
)
=
RC
.
rrc
[
enb_id
]
->
configuration
;
itti_send_msg_to_task
(
TASK_RRC_ENB
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
),
msg_p
);
}
node_type
=
RC
.
rrc
[
0
]
->
node_type
;
}
if
(
RC
.
nb_inst
>
0
&&
NODE_IS_CU
(
node_type
)
)
{
if
(
RC
.
nb_inst
>
0
)
{
protocol_ctxt_t
ctxt
;
ctxt
.
module_id
=
0
;
ctxt
.
instance
=
0
;
...
...
@@ -1163,7 +1152,7 @@ int main ( int argc, char **argv ) {
}
/* start threads if only L1 or not a CU */
if
(
RC
.
nb_inst
==
0
||
!
NODE_IS_CU
(
node_type
)
||
NFAPI_MODE
==
NFAPI_MODE_PNF
||
NFAPI_MODE
==
NFAPI_MODE_VNF
)
{
if
(
RC
.
nb_inst
==
0
||
NFAPI_MODE
==
NFAPI_MODE_PNF
||
NFAPI_MODE
==
NFAPI_MODE_VNF
)
{
// init UE_PF_PO and mutex lock
pthread_mutex_init
(
&
ue_pf_po_mutex
,
NULL
);
memset
(
&
UE_PF_PO
[
0
][
0
],
0
,
sizeof
(
UE_PF_PO_t
)
*
MAX_MOBILES_PER_ENB
*
MAX_NUM_CCs
);
...
...
@@ -1265,7 +1254,7 @@ int main ( int argc, char **argv ) {
LOG_I
(
ENB_APP
,
"oai_exit=%d
\n
"
,
oai_exit
);
// stop threads
if
(
RC
.
nb_inst
==
0
||
!
NODE_IS_CU
(
node_type
)
)
{
if
(
RC
.
nb_inst
==
0
)
{
if
(
IS_SOFTMODEM_DOSCOPE
)
end_forms
();
...
...
openair2/COMMON/m2ap_messages_types.h
View file @
9dc22822
...
...
@@ -269,24 +269,14 @@ typedef struct m2ap_setup_resp_s {
uint8_t
num_mcch_config_per_mbsfn
;
// /// string holding gNB_CU_name
// char *gNB_CU_name;
// /// number of DU cells to activate
// uint16_t num_cells_to_activate; //0< num_cells_to_activate <= 512;
// /// mcc of DU cells
// //uint16_t mcc[M2AP_MAX_NB_CELLS];
uint16_t
mcc
;
//[M2AP_MAX_NB_CELLS];
/// mnc of DU cells
//uint16_t mnc[M2AP_MAX_NB_CELLS];
uint16_t
mnc
;
//[M2AP_MAX_NB_CELLS];
/// mnc digit length of DU cells
//uint8_t mnc_digit_length[M2AP_MAX_NB_CELLS];
uint8_t
mnc_digit_length
;
//[M2AP_MAX_NB_CELLS];
// NR Global Cell Id
// uint64_t nr_cellid[M2AP_MAX_NB_CELLS];
// /// NRPCI
// uint16_t nrpci[M2AP_MAX_NB_CELLS];
// /// num SI messages
per DU cell
// /// num SI messages
// uint8_t num_SI[M2AP_MAX_NB_CELLS];
// /// SI message containers (up to 21 messages per cell)
// uint8_t *SI_container[M2AP_MAX_NB_CELLS][21];
...
...
openair2/ENB_APP/enb_app.c
View file @
9dc22822
...
...
@@ -85,7 +85,8 @@ extern RAN_CONTEXT_t RC;
//}
//*****end M2AP ****/
static
uint32_t
eNB_app_register_m2
(
uint32_t
enb_id_start
,
uint32_t
enb_id_end
)
{
static
uint32_t
eNB_app_register_m2
(
uint32_t
enb_id_start
,
uint32_t
enb_id_end
)
{
uint32_t
enb_id
;
MessageDef
*
msg_p
;
uint32_t
register_enb_m2_pending
=
0
;
...
...
@@ -142,39 +143,28 @@ static uint32_t eNB_app_handle_m2ap_mbms_session_update_req(instance_t instance)
/*------------------------------------------------------------------------------*/
static
uint32_t
eNB_app_register
(
ngran_node_t
node_type
,
uint32_t
enb_id_start
,
uint32_t
enb_id_end
)
{
static
uint32_t
eNB_app_register
(
uint32_t
enb_id_start
,
uint32_t
enb_id_end
)
{
uint32_t
enb_id
;
MessageDef
*
msg_p
;
uint32_t
register_enb_pending
=
0
;
for
(
enb_id
=
enb_id_start
;
(
enb_id
<
enb_id_end
)
;
enb_id
++
)
{
{
if
(
NODE_IS_DU
(
node_type
))
{
// F1AP registration
// configure F1AP here for F1C
LOG_I
(
ENB_APP
,
"ngran_eNB_DU: Allocating ITTI message for F1AP_SETUP_REQ
\n
"
);
msg_p
=
itti_alloc_new_message
(
TASK_ENB_APP
,
0
,
F1AP_SETUP_REQ
);
RCconfig_DU_F1
(
msg_p
,
enb_id
);
LOG_I
(
ENB_APP
,
"[eNB %d] eNB_app_register via F1AP for instance %d
\n
"
,
enb_id
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
));
itti_send_msg_to_task
(
TASK_DU_F1
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
),
msg_p
);
// configure GTPu here for F1U
}
else
{
// S1AP registration
// S1AP registration
/* note: there is an implicit relationship between the data structure and the message name */
msg_p
=
itti_alloc_new_message
(
TASK_ENB_APP
,
0
,
S1AP_REGISTER_ENB_REQ
);
msg_p
=
itti_alloc_new_message
(
TASK_ENB_APP
,
0
,
S1AP_REGISTER_ENB_REQ
);
RCconfig_S1
(
msg_p
,
enb_id
);
if
(
enb_id
==
0
)
RCconfig_gtpu
();
if
(
enb_id
==
0
)
RCconfig_gtpu
();
LOG_I
(
ENB_APP
,
"default drx %d
\n
"
,
((
S1AP_REGISTER_ENB_REQ
(
msg_p
)).
default_drx
));
LOG_I
(
ENB_APP
,
"default drx %d
\n
"
,
((
S1AP_REGISTER_ENB_REQ
(
msg_p
)).
default_drx
));
LOG_I
(
ENB_APP
,
"[eNB %d] eNB_app_register via S1AP for instance %d
\n
"
,
enb_id
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
));
itti_send_msg_to_task
(
TASK_S1AP
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
),
msg_p
);
}
LOG_I
(
ENB_APP
,
"[eNB %d] eNB_app_register via S1AP for instance %d
\n
"
,
enb_id
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
));
itti_send_msg_to_task
(
TASK_S1AP
,
ENB_MODULE_ID_TO_INSTANCE
(
enb_id
),
msg_p
);
register_enb_pending
++
;
}
}
return
register_enb_pending
;
}
...
...
@@ -220,19 +210,18 @@ void *eNB_app_task(void *args_p) {
itti_mark_task_ready
(
TASK_ENB_APP
);
/* Try to register each eNB */
// This assumes that node_type of all RRC instances is the same
if
(
EPC_MODE_ENABLED
)
{
register_enb_pending
=
eNB_app_register
(
RC
.
rrc
[
0
]
->
node_type
,
enb_id_start
,
enb_id_end
);
register_enb_pending
=
eNB_app_register
(
enb_id_start
,
enb_id_end
);
}
/* Try to register each eNB with each other */
if
(
is_x2ap_enabled
()
&&
!
NODE_IS_DU
(
RC
.
rrc
[
0
]
->
node_type
)
)
{
if
(
is_x2ap_enabled
())
{
x2_register_enb_pending
=
eNB_app_register_x2
(
enb_id_start
,
enb_id_end
);
}
/* Try to register each eNB with MCE each other */
if
(
is_m2ap_eNB_enabled
()
/*&& !NODE_IS_DU(RC.rrc[0]->node_type)*/
)
{
//eNB_app_register_MBMS_STA(
RC.rrc[0]->node_type,
enb_id_start, enb_id_end);
if
(
is_m2ap_eNB_enabled
())
{
//eNB_app_register_MBMS_STA(enb_id_start, enb_id_end);
m2_register_enb_pending
=
eNB_app_register_m2
(
enb_id_start
,
enb_id_end
);
//if (timer_setup (5, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT,
...
...
@@ -259,7 +248,6 @@ void *eNB_app_task(void *args_p) {
break
;
case
S1AP_REGISTER_ENB_CNF
:
AssertFatal
(
!
NODE_IS_DU
(
RC
.
rrc
[
0
]
->
node_type
),
"Should not have received S1AP_REGISTER_ENB_CNF
\n
"
);
if
(
EPC_MODE_ENABLED
)
{
LOG_I
(
ENB_APP
,
"[eNB %ld] Received %s: associated MME %d
\n
"
,
instance
,
ITTI_MSG_NAME
(
msg_p
),
S1AP_REGISTER_ENB_CNF
(
msg_p
).
nb_mme
);
...
...
@@ -288,7 +276,7 @@ void *eNB_app_task(void *args_p) {
sleep
(
ENB_REGISTER_RETRY_DELAY
);
/* Restart the registration process */
registered_enb
=
0
;
register_enb_pending
=
eNB_app_register
(
RC
.
rrc
[
0
]
->
node_type
,
enb_id_start
,
enb_id_end
);
register_enb_pending
=
eNB_app_register
(
enb_id_start
,
enb_id_end
);
}
}
}
...
...
@@ -296,50 +284,6 @@ void *eNB_app_task(void *args_p) {
break
;
case
F1AP_SETUP_RESP
:
AssertFatal
(
NODE_IS_DU
(
RC
.
rrc
[
0
]
->
node_type
),
"Should not have received F1AP_REGISTER_ENB_CNF in CU/eNB
\n
"
);
LOG_I
(
ENB_APP
,
"Received %s: associated ngran_eNB_CU %s with %d cells to activate
\n
"
,
ITTI_MSG_NAME
(
msg_p
),
F1AP_SETUP_RESP
(
msg_p
).
gNB_CU_name
,
F1AP_SETUP_RESP
(
msg_p
).
num_cells_to_activate
);
handle_f1ap_setup_resp
(
&
F1AP_SETUP_RESP
(
msg_p
));
DevAssert
(
register_enb_pending
>
0
);
register_enb_pending
--
;
/* Check if at least eNB is registered with one MME */
if
(
F1AP_SETUP_RESP
(
msg_p
).
num_cells_to_activate
>
0
)
{
registered_enb
++
;
}
/* Check if all register eNB requests have been processed */
if
(
register_enb_pending
==
0
)
{
if
(
registered_enb
==
enb_nb
)
{
/* If all eNB cells are registered, start L2L1 task */
MessageDef
*
msg_init_p
;
msg_init_p
=
itti_alloc_new_message
(
TASK_ENB_APP
,
0
,
INITIALIZE_MESSAGE
);
itti_send_msg_to_task
(
TASK_L2L1
,
INSTANCE_DEFAULT
,
msg_init_p
);
}
else
{
LOG_W
(
ENB_APP
,
" %d eNB not associated with a MME, retrying registration in %d seconds ...
\n
"
,
enb_nb
-
registered_enb
,
ENB_REGISTER_RETRY_DELAY
);
/* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */
if
(
timer_setup
(
ENB_REGISTER_RETRY_DELAY
,
0
,
TASK_ENB_APP
,
INSTANCE_DEFAULT
,
TIMER_ONE_SHOT
,
NULL
,
&
enb_register_retry_timer_id
)
<
0
)
{
LOG_E
(
ENB_APP
,
" Can not start eNB register retry timer, use
\"
sleep
\"
instead!
\n
"
);
sleep
(
ENB_REGISTER_RETRY_DELAY
);
/* Restart the registration process */
registered_enb
=
0
;
register_enb_pending
=
eNB_app_register
(
RC
.
rrc
[
0
]
->
node_type
,
enb_id_start
,
enb_id_end
);
//, enb_properties_p);
}
}
}
break
;
case
S1AP_DEREGISTERED_ENB_IND
:
if
(
EPC_MODE_ENABLED
)
{
LOG_W
(
ENB_APP
,
"[eNB %ld] Received %s: associated MME %d
\n
"
,
instance
,
ITTI_MSG_NAME
(
msg_p
),
...
...
@@ -356,7 +300,7 @@ void *eNB_app_task(void *args_p) {
if
(
TIMER_HAS_EXPIRED
(
msg_p
).
timer_id
==
enb_register_retry_timer_id
)
{
/* Restart the registration process */
registered_enb
=
0
;
register_enb_pending
=
eNB_app_register
(
RC
.
rrc
[
0
]
->
node_type
,
enb_id_start
,
enb_id_end
);
register_enb_pending
=
eNB_app_register
(
enb_id_start
,
enb_id_end
);
}
if
(
TIMER_HAS_EXPIRED
(
msg_p
).
timer_id
==
x2_enb_register_retry_timer_id
)
{
...
...
@@ -459,20 +403,6 @@ void *eNB_app_task(void *args_p) {
case
M2AP_SETUP_RESP
:
LOG_I
(
ENB_APP
,
"M2AP_SETUP_RESP RESPONSE received
\n
"
);
// AssertFatal(NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received F1AP_REGISTER_ENB_CNF in CU/eNB\n");
// LOG_I(ENB_APP, "Received %s: associated ngran_eNB_CU %s with %d cells to activate\n", ITTI_MSG_NAME (msg_p),
// F1AP_SETUP_RESP(msg_p).gNB_CU_name,F1AP_SETUP_RESP(msg_p).num_cells_to_activate);
//
// handle_f1ap_setup_resp(&F1AP_SETUP_RESP(msg_p));
// DevAssert(register_enb_pending > 0);
// register_enb_pending--;
// /* Check if at least eNB is registered with one MME */
// if (F1AP_SETUP_RESP(msg_p).num_cells_to_activate > 0) {
// registered_enb++;
// }
// /* Check if all register eNB requests have been processed */
// if (register_enb_pending == 0) {
...
...
@@ -495,7 +425,7 @@ void *eNB_app_task(void *args_p) {
// sleep(ENB_REGISTER_RETRY_DELAY);
// /* Restart the registration process */
// registered_enb = 0;
// register_enb_pending = eNB_app_register
(RC.rrc[0]->node_type,
enb_id_start, enb_id_end);//, enb_properties_p);
// register_enb_pending = eNB_app_register
(
enb_id_start, enb_id_end);//, enb_properties_p);
// }
// }
// }
...
...
openair2/ENB_APP/enb_config.c
View file @
9dc22822
This diff is collapsed.
Click to expand it.
openair2/ENB_APP/enb_config.h
View file @
9dc22822
...
...
@@ -101,7 +101,7 @@ typedef struct ru_config_s {
}
ru_config_t
;
extern
void
RCconfig_L1
(
void
);
extern
void
RCconfig_macrlc
(
int
macrlc_has_f1
[
MAX_MAC_INST
]
);
extern
void
RCconfig_macrlc
(
void
);
extern
void
UE_config_stub_pnf
(
void
);
extern
int
RCconfig_gtpu
(
void
);
extern
void
RCConfig
(
void
);
...
...
@@ -109,7 +109,7 @@ extern void RCConfig(void);
void
enb_config_display
(
void
);
void
ru_config_display
(
void
);
int
RCconfig_RRC
(
uint32_t
i
,
eNB_RRC_INST
*
rrc
,
int
macrlc_has_f1
);
int
RCconfig_RRC
(
uint32_t
i
,
eNB_RRC_INST
*
rrc
);
int
RCconfig_S1
(
MessageDef
*
msg_p
,
uint32_t
i
);
void
read_config_and_init
(
void
);
...
...
@@ -119,8 +119,5 @@ int RCconfig_M2(MessageDef *msg_p, uint32_t i);
void
fill_SL_configuration
(
RrcConfigurationReq
*
RRCcfg
,
ccparams_sidelink_t
*
SLconfig
,
int
cell_idx
,
int
cc_idx
,
char
*
config_fname
);
void
fill_eMTC_configuration
(
RrcConfigurationReq
*
RRCcfg
,
ccparams_eMTC_t
*
eMTCconfig
,
int
cell_idx
,
int
cc_idx
,
char
*
config_fname
,
char
*
brparamspath
);
int
RCconfig_DU_F1
(
MessageDef
*
msg_p
,
uint32_t
i
);
void
handle_f1ap_setup_resp
(
f1ap_setup_resp_t
*
resp
);
#endif
/* ENB_CONFIG_H_ */
/** @} */
openair2/F1AP/dummy_enb.c
deleted
100644 → 0
View file @
ffecf830
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "COMMON/platform_types.h"
#include "common/ran_context.h"
#include "common/utils/LOG/log.h"
#include "NR_BCCH-BCH-Message.h"
#include "NR_ServingCellConfigCommon.h"
#include "NR_MIB.h"
bool
sdap_data_req
(
protocol_ctxt_t
*
ctxt_p
,
const
ue_id_t
ue_id
,
const
srb_flag_t
srb_flag
,
const
rb_id_t
rb_id
,
const
mui_t
mui
,
const
confirm_t
confirm
,
const
sdu_size_t
sdu_buffer_size
,
unsigned
char
*
const
sdu_buffer
,
const
pdcp_transmission_mode_t
pt_mode
,
const
uint32_t
*
sourceL2Id
,
const
uint32_t
*
destinationL2Id
,
const
uint8_t
qfi
,
const
bool
rqi
,
const
int
pdusession_id
)
{
abort
();
}
int
dl_rrc_message
(
module_id_t
module_id
,
const
f1ap_dl_rrc_message_t
*
dl_rrc
)
{
abort
();
}
int
rrc_gNB_generate_pcch_msg
(
uint32_t
tmsi
,
uint8_t
paging_drx
,
instance_t
instance
,
uint8_t
CC_id
)
{
abort
();
}
openair2/F1AP/f1ap_cu_interface_management.c
View file @
9dc22822
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_cu_task.c
View file @
9dc22822
...
...
@@ -123,12 +123,7 @@ void *F1AP_CU_task(void *arg) {
eth_params_t
*
IPaddrs
;
// Hardcoded instance id!
if
(
RC
.
nrrrc
&&
(
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CU
||
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CUCP
)
)
IPaddrs
=&
RC
.
nrrrc
[
0
]
->
eth_params_s
;
else
IPaddrs
=&
RC
.
rrc
[
0
]
->
eth_params_s
;
IPaddrs
=
&
RC
.
nrrrc
[
0
]
->
eth_params_s
;
cu_task_send_sctp_init_req
(
0
,
IPaddrs
->
my_addr
);
...
...
openair2/F1AP/f1ap_cu_ue_context_management.c
View file @
9dc22822
...
...
@@ -39,7 +39,6 @@
#include "rrc_extern.h"
#include "rrc_eNB_UE_context.h"
#include "openair2/RRC/NR/rrc_gNB_UE_context.h"
#include "rrc_eNB_S1AP.h"
#include "rrc_eNB_GTPV1U.h"
#include "openair2/RRC/NR/rrc_gNB_NGAP.h"
...
...
@@ -959,9 +958,7 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
protocol_ctxt_t
ctxt
;
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
instance
,
ENB_FLAG_YES
,
rnti
,
0
,
0
,
instance
);
if
(
f1ap_req
(
true
,
instance
)
->
cell_type
==
CELL_MACRO_GNB
)
{
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
rrc_gNB_get_ue_context
(
RC
.
nrrrc
[
instance
],
rnti
);
struct
rrc_gNB_ue_context_s
*
ue_context_p
=
rrc_gNB_get_ue_context
(
RC
.
nrrrc
[
instance
],
rnti
);
if
(
ue_context_p
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
NGAP_UE_CONTEXT_RELEASE_COMPLETE
);
...
...
@@ -972,38 +969,6 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance,
LOG_E
(
F1AP
,
"could not find ue_context of UE RNTI %x
\n
"
,
rnti
);
}
}
else
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
instance
],
rnti
);
if
(
ue_context_p
)
{
/* The following is normally done in the function rrc_rx_tx() */
rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_CPLT
(
instance
,
ue_context_p
->
ue_context
.
eNB_ue_s1ap_id
);
rrc_eNB_send_GTPV1U_ENB_DELETE_TUNNEL_REQ
(
instance
,
ue_context_p
);
// erase data of GTP tunnels in UE context
for
(
int
e_rab
=
0
;
e_rab
<
ue_context_p
->
ue_context
.
nb_of_e_rabs
;
e_rab
++
)
{
ue_context_p
->
ue_context
.
enb_gtp_teid
[
e_rab
]
=
0
;
memset
(
&
ue_context_p
->
ue_context
.
enb_gtp_addrs
[
e_rab
],
0
,
sizeof
(
ue_context_p
->
ue_context
.
enb_gtp_addrs
[
e_rab
]));
ue_context_p
->
ue_context
.
enb_gtp_ebi
[
e_rab
]
=
0
;
}
struct
rrc_ue_s1ap_ids_s
*
rrc_ue_s1ap_ids
=
rrc_eNB_S1AP_get_ue_ids
(
RC
.
rrc
[
instance
],
0
,
ue_context_p
->
ue_context
.
eNB_ue_s1ap_id
);
if
(
rrc_ue_s1ap_ids
)
rrc_eNB_S1AP_remove_ue_ids
(
RC
.
rrc
[
instance
],
rrc_ue_s1ap_ids
);
/* trigger UE release in RRC */
rrc_eNB_remove_ue_context
(
&
ctxt
,
RC
.
rrc
[
instance
],
ue_context_p
);
}
else
{
LOG_E
(
F1AP
,
"could not find ue_context of UE RNTI %x
\n
"
,
rnti
);
}
}
pdcp_remove_UE
(
&
ctxt
);
LOG_I
(
F1AP
,
"Received UE CONTEXT RELEASE COMPLETE: Removing CU UE entry for RNTI %x
\n
"
,
rnti
);
...
...
openair2/F1AP/f1ap_du_rrc_message_transfer.c
View file @
9dc22822
This diff is collapsed.
Click to expand it.
openair2/F1AP/f1ap_du_task.c
View file @
9dc22822
...
...
@@ -150,14 +150,7 @@ void *F1AP_DU_task(void *arg) {
}
break
;
case
F1AP_UL_RRC_MESSAGE
:
// to rrc
if
(
RC
.
nrrrc
&&
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_DU
)
{
DU_send_UL_NR_RRC_MESSAGE_TRANSFER
(
myInstance
,
&
F1AP_UL_RRC_MESSAGE
(
msg
));
}
else
{
DU_send_UL_RRC_MESSAGE_TRANSFER
(
myInstance
,
&
F1AP_UL_RRC_MESSAGE
(
msg
));
}
DU_send_UL_NR_RRC_MESSAGE_TRANSFER
(
myInstance
,
&
F1AP_UL_RRC_MESSAGE
(
msg
));
break
;
case
F1AP_UE_CONTEXT_SETUP_RESP
:
...
...
openair2/F1AP/f1ap_du_ue_context_management.c
View file @
9dc22822
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
9dc22822
...
...
@@ -469,25 +469,9 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id,
// check threshold
if
(
UE_info
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
>
4000
)
{
// note: probably ul_failure_timer should be less than UE radio link failure time(see T310/N310/N311)
if
(
NODE_IS_DU
(
RC
.
rrc
[
module_idP
]
->
node_type
))
{
MessageDef
*
m
=
itti_alloc_new_message
(
TASK_PHY_ENB
,
0
,
F1AP_UE_CONTEXT_RELEASE_REQ
);
F1AP_UE_CONTEXT_RELEASE_REQ
(
m
).
rnti
=
rnti
;
F1AP_UE_CONTEXT_RELEASE_REQ
(
m
).
cause
=
F1AP_CAUSE_RADIO_NETWORK
;
F1AP_UE_CONTEXT_RELEASE_REQ
(
m
).
cause_value
=
1
;
// 1 = F1AP_CauseRadioNetwork_rl_failure
F1AP_UE_CONTEXT_RELEASE_REQ
(
m
).
rrc_container
=
NULL
;
F1AP_UE_CONTEXT_RELEASE_REQ
(
m
).
rrc_container_length
=
0
;
itti_send_msg_to_task
(
TASK_DU_F1
,
module_idP
,
m
);
}
else
{
// inform RRC of failure and clear timer
LOG_I
(
MAC
,
"UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC
\n
"
,
UE_id
,
rnti
);
mac_eNB_rrc_ul_failure
(
module_idP
,
CC_id
,
frameP
,
subframeP
,
rnti
);
}
LOG_I
(
MAC
,
"UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC
\n
"
,
UE_id
,
rnti
);
mac_eNB_rrc_ul_failure
(
module_idP
,
CC_id
,
frameP
,
subframeP
,
rnti
);
UE_info
->
UE_sched_ctrl
[
UE_id
].
ul_failure_timer
=
0
;
UE_info
->
UE_sched_ctrl
[
UE_id
].
ul_out_of_sync
=
1
;
...
...
@@ -974,14 +958,12 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
}
// end for loop on UE_id
#if (!defined(PRE_SCD_THREAD))
if
(
!
NODE_IS_DU
(
RC
.
rrc
[
module_idP
]
->
node_type
))
{
void
rlc_tick
(
int
,
int
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
module_idP
,
ENB_FLAG_YES
,
NOT_A_RNTI
,
frameP
,
subframeP
,
module_idP
);
rlc_tick
(
frameP
,
subframeP
);
pdcp_run
(
&
ctxt
);
pdcp_mbms_run
(
&
ctxt
);
rrc_rx_tx
(
&
ctxt
,
CC_id
);
}
#endif
int
do_fembms_si
=
0
;
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp.c
View file @
9dc22822
...
...
@@ -138,35 +138,6 @@ extern int oai_exit;
pthread_t
pdcp_stats_thread_desc
;
bool
cu_f1u_data_req
(
protocol_ctxt_t
*
ctxt_pP
,
const
srb_flag_t
srb_flagP
,
const
rb_id_t
rb_id
,
const
mui_t
muiP
,
const
confirm_t
confirmP
,
const
sdu_size_t
sdu_buffer_size
,
unsigned
char
*
const
sdu_buffer
,
const
pdcp_transmission_mode_t
mode
,
const
uint32_t
*
const
sourceL2Id
,
const
uint32_t
*
const
destinationL2Id
)
{
mem_block_t
*
memblock
=
get_free_mem_block
(
sdu_buffer_size
,
__func__
);
if
(
memblock
==
NULL
)
{
LOG_E
(
RLC
,
"%s:%d:%s: ERROR: get_free_mem_block failed
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
}
memcpy
(
memblock
->
data
,
sdu_buffer
,
sdu_buffer_size
);
// weird rb id management in 4G, not fully understand (looks bad design)
// overcomplex: if i understand, on the interface DRB start at 4 because there can be SRB 0..3
// but it would be much simpler to use absolute numbering
// instead of this "srb flag" associated to these +/-4
int
ret
=
pdcp_data_ind
(
ctxt_pP
,
srb_flagP
,
false
,
rb_id
-
4
,
sdu_buffer_size
,
memblock
,
NULL
,
NULL
);
if
(
!
ret
)
{
LOG_E
(
RLC
,
"%s:%d:%s: ERROR: pdcp_data_ind failed
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
/* what to do in case of failure? for the moment: nothing */
}
return
ret
;
}
void
*
pdcp_stats_thread
(
void
*
param
)
{
FILE
*
fd
;
...
...
@@ -204,31 +175,6 @@ uint64_t get_pdcp_optmask(void) {
return
pdcp_params
.
optmask
;
}
rlc_op_status_t
cu_send_to_du
(
const
protocol_ctxt_t
*
const
ctxt
,
const
srb_flag_t
srb_flag
,
const
MBMS_flag_t
MBMS_flag
,
const
rb_id_t
rb_id
,
const
mui_t
mui
,
confirm_t
confirm
,
sdu_size_t
size
,
mem_block_t
*
sdu
,
const
uint32_t
*
const
sourceID
,
const
uint32_t
*
const
destID
)
{
MessageDef
*
message_p
=
itti_alloc_new_message_sized
(
TASK_PDCP_ENB
,
0
,
GTPV1U_TUNNEL_DATA_REQ
,
sizeof
(
gtpv1u_tunnel_data_req_t
)
+
size
+
GTPU_HEADER_OVERHEAD_MAX
);
AssertFatal
(
message_p
!=
NULL
,
"OUT OF MEMORY"
);
gtpv1u_tunnel_data_req_t
*
req
=&
GTPV1U_TUNNEL_DATA_REQ
(
message_p
);
req
->
buffer
=
(
uint8_t
*
)(
req
+
1
);
memcpy
(
req
->
buffer
+
GTPU_HEADER_OVERHEAD_MAX
,
sdu
->
data
,
size
);
req
->
length
=
size
;
req
->
offset
=
GTPU_HEADER_OVERHEAD_MAX
;
req
->
ue_id
=
ctxt
->
rntiMaybeUEid
;
req
->
bearer_id
=
rb_id
+
4
;
LOG_D
(
PDCP
,
"%s() (drb %ld) sending message to gtp size %d
\n
"
,
__func__
,
rb_id
,
size
);
extern
instance_t
CUuniqInstance
;
itti_send_msg_to_task
(
TASK_GTPV1_U
,
CUuniqInstance
,
message_p
);
return
true
;
}
//-----------------------------------------------------------------------------
/*
* If PDCP_UNIT_TEST is set here then data flow between PDCP and RLC is broken
...
...
@@ -326,7 +272,7 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
LOG_UI
(
PDCP
,
"Before rlc_data_req 1, srb_flagP: %d, rb_idP: %ld
\n
"
,
srb_flagP
,
rb_idP
);
}
rlc_status
=
pdcp_params
.
send_rlc_data_req_func
(
ctxt_pP
,
srb_flagP
,
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
)
?
MBMS_FLAG_NO
:
MBMS_FLAG_YES
,
rb_idP
,
muiP
,
rlc_status
=
pdcp_params
.
send_rlc_data_req_func
(
ctxt_pP
,
srb_flagP
,
MBMS_FLAG_YES
,
rb_idP
,
muiP
,
confirmP
,
sdu_buffer_sizeP
,
pdcp_pdu_p
,
NULL
,
NULL
);
}
else
{
rlc_status
=
RLC_OP_STATUS_OUT_OF_RESSOURCES
;
...
...
@@ -488,12 +434,8 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
"[MSG] PDCP DL %s PDU on rb_id %ld
\n
"
,(
srb_flagP
)
?
"CONTROL"
:
"DATA"
,
rb_idP
);
if
((
pdcp_pdu_p
!=
NULL
)
&&
(
srb_flagP
==
0
)
&&
(
ctxt_pP
->
enb_flag
==
1
))
{
LOG_D
(
PDCP
,
"pdcp data req on drb %ld, size %d, rnti %lx
, node_type %d
\n
"
,
rb_idP
,
pdcp_pdu_size
,
ctxt_pP
->
rntiMaybeUEid
,
RC
.
rrc
?
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
:
-
1
);
LOG_D
(
PDCP
,
"pdcp data req on drb %ld, size %d, rnti %lx
\n
"
,
rb_idP
,
pdcp_pdu_size
,
ctxt_pP
->
rntiMaybeUEid
);
if
(
ctxt_pP
->
enb_flag
==
ENB_FLAG_YES
&&
NODE_IS_DU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
LOG_E
(
PDCP
,
"Can't be DU, bad node type %d
\n
"
,
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
);
ret
=
false
;
}
else
{
rlc_status
=
pdcp_params
.
send_rlc_data_req_func
(
ctxt_pP
,
srb_flagP
,
MBMS_FLAG_NO
,
rb_idP
,
muiP
,
confirmP
,
pdcp_pdu_size
,
pdcp_pdu_p
,
sourceL2Id
,
destinationL2Id
);
...
...
@@ -520,27 +462,7 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
LOG_W
(
PDCP
,
"RLC returned an unknown status code after PDCP placed the order to send some data (Status Code:%d)
\n
"
,
rlc_status
);
break
;
}
// switch case
}
/* end if node_type is not DU */
}
else
{
// SRB
if
(
ctxt_pP
->
enb_flag
==
ENB_FLAG_YES
&&
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
// DL transfer
MessageDef
*
message_p
;
// Note: the acyual task must be TASK_PDCP_ENB, but this task is not created
message_p
=
itti_alloc_new_message
(
TASK_PDCP_ENB
,
0
,
F1AP_DL_RRC_MESSAGE
);
F1AP_DL_RRC_MESSAGE
(
message_p
).
rrc_container
=
&
pdcp_pdu_p
->
data
[
0
]
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
rrc_container_length
=
pdcp_pdu_size
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
gNB_CU_ue_id
=
0
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
gNB_DU_ue_id
=
0
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
old_gNB_DU_ue_id
=
0xFFFFFFFF
;
// unknown
F1AP_DL_RRC_MESSAGE
(
message_p
).
rnti
=
ctxt_pP
->
rntiMaybeUEid
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
srb_id
=
rb_idP
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
execute_duplication
=
1
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
RAT_frequency_priority_information
.
en_dc
=
0
;
itti_send_msg_to_task
(
TASK_CU_F1
,
ctxt_pP
->
module_id
,
message_p
);
//CU_send_DL_RRC_MESSAGE_TRANSFER(ctxt_pP->module_id, message_p);
LOG_I
(
PDCP
,
"Send F1AP_DL_RRC_MESSAGE with ITTI
\n
"
);
ret
=
true
;
}
else
{
rlc_status
=
rlc_data_req
(
ctxt_pP
,
srb_flagP
,
MBMS_FLAG_NO
...
...
@@ -581,7 +503,6 @@ bool pdcp_data_req(protocol_ctxt_t *ctxt_pP,
}
// switch case
}
}
}
if
(
ctxt_pP
->
enb_flag
==
ENB_FLAG_YES
)
{
stop_meas
(
&
eNB_pdcp_stats
[
ctxt_pP
->
module_id
].
data_req
);
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
View file @
9dc22822
...
...
@@ -420,10 +420,6 @@ pdcp_data_ind_func_t get_pdcp_data_ind_func(void);
//-----------------------------------------------------------------------------
int
pdcp_fifo_flush_mbms_sdus
(
const
protocol_ctxt_t
*
const
ctxt_pP
);
int
pdcp_fifo_read_input_mbms_sdus_fromtun
(
const
protocol_ctxt_t
*
const
ctxt_pP
);
rlc_op_status_t
cu_send_to_du
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
srb_flag_t
srb_flagP
,
const
MBMS_flag_t
MBMS_flagP
,
const
rb_id_t
rb_idP
,
const
mui_t
muiP
,
confirm_t
confirmP
,
sdu_size_t
sdu_sizeP
,
mem_block_t
*
sdu_pP
,
const
uint32_t
*
const
,
const
uint32_t
*
const
);
/*
* Following two types are utilized between NAS driver and PDCP
...
...
openair2/LAYER2/rlc_v2/rlc_oai_api.c
View file @
9dc22822
...
...
@@ -412,37 +412,6 @@ rb_found:
T
(
T_ENB_RLC_UL
,
T_INT
(
0
/*ctxt_pP->module_id*/
),
T_INT
(
ue
->
rnti
),
T_INT
(
rb_id
),
T_INT
(
size
));
const
ngran_node_t
type
=
RC
.
rrc
[
0
/*ctxt_pP->module_id*/
]
->
node_type
;
AssertFatal
(
!
NODE_IS_CU
(
type
),
"Can't be CU, bad node type %d
\n
"
,
type
);
if
(
NODE_IS_DU
(
type
))
{
if
(
is_srb
==
1
)
{
MessageDef
*
msg
=
itti_alloc_new_message_sized
(
TASK_RLC_ENB
,
0
,
F1AP_UL_RRC_MESSAGE
,
sizeof
(
*
msg
)
+
size
);
F1AP_UL_RRC_MESSAGE
(
msg
).
rrc_container
=
(
uint8_t
*
)(
msg
+
1
);
memcpy
(
F1AP_UL_RRC_MESSAGE
(
msg
).
rrc_container
,
buf
,
size
);
F1AP_UL_RRC_MESSAGE
(
msg
).
rnti
=
ue
->
rnti
;
F1AP_UL_RRC_MESSAGE
(
msg
).
srb_id
=
rb_id
;
F1AP_UL_RRC_MESSAGE
(
msg
).
rrc_container_length
=
size
;
itti_send_msg_to_task
(
TASK_DU_F1
,
ENB_MODULE_ID_TO_INSTANCE
(
0
/*ctxt_pP->module_id*/
),
msg
);
return
;
}
else
{
// Fixme: very dirty workaround of incomplete F1-U implementation
instance_t
DUuniqInstance
=
0
;
MessageDef
*
msg
=
itti_alloc_new_message_sized
(
TASK_RLC_ENB
,
0
,
GTPV1U_TUNNEL_DATA_REQ
,
sizeof
(
gtpv1u_tunnel_data_req_t
)
+
size
);
gtpv1u_tunnel_data_req_t
*
req
=&
GTPV1U_TUNNEL_DATA_REQ
(
msg
);
req
->
buffer
=
(
uint8_t
*
)(
req
+
1
);
memcpy
(
req
->
buffer
,
buf
,
size
);
req
->
length
=
size
;
req
->
offset
=
0
;
req
->
ue_id
=
ue
->
rnti
;
req
->
bearer_id
=
rb_id
+
4
;
LOG_D
(
RLC
,
"Received uplink user-plane traffic at RLC-DU to be sent to the CU, size %d
\n
"
,
size
);
itti_send_msg_to_task
(
TASK_GTPV1_U
,
DUuniqInstance
,
msg
);
return
;
}
}
}
memblock
=
get_free_mem_block
(
size
,
__func__
);
...
...
openair2/M2AP/m2ap_MCE.c
View file @
9dc22822
...
...
@@ -111,9 +111,7 @@ void m2ap_MCE_handle_sctp_association_resp(instance_t instance, sctp_new_associa
sctp_new_association_resp
->
ulp_cnx_id
);
if
(
sctp_new_association_resp
->
sctp_state
==
SCTP_STATE_SHUTDOWN
)
//proto_agent_stop(instance);
//f1ap_handle_setup_message(instance, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
return
;
// exit -1 for debugging
return
;
}
// go to an init func
...
...
openair2/M2AP/m2ap_MCE_interface_management.c
View file @
9dc22822
...
...
@@ -75,7 +75,7 @@ int MCE_send_MBMS_SESSION_START_REQUEST(instance_t instance/*, uint32_t assoc_id
ie
->
id
=
M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStartRequest_Ies__value_PR_MCE_MBMS_M2AP_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -140,7 +140,7 @@ int MCE_send_MBMS_SESSION_START_REQUEST(instance_t instance/*, uint32_t assoc_id
// ie->id = M2AP_ProtocolIE_ID_id_TNL_Information_1;
// ie->criticality = M2AP_Criticality_reject;
// ie->value.present = M2AP_SessionStartRequest_Ies__value_PR_TNL_Information_1;
// //asn_int642INTEGER(&ie->value.choice.MBMS_Session_ID,
f1ap_du_data->MBMS_Session_ID); //?
// //asn_int642INTEGER(&ie->value.choice.MBMS_Session_ID,
0);
// asn1cSeqAdd(&out->protocolIEs.list, ie);
}
...
...
@@ -258,7 +258,7 @@ int MCE_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m2ap_session_stop_re
ie
->
id
=
M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStopRequest_Ies__value_PR_MCE_MBMS_M2AP_ID
;
ie
->
value
.
choice
.
MCE_MBMS_M2AP_ID
=
0
;
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/
//?
ie
->
value
.
choice
.
MCE_MBMS_M2AP_ID
=
0
;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -267,7 +267,7 @@ int MCE_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m2ap_session_stop_re
ie
->
id
=
M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStopRequest_Ies__value_PR_ENB_MBMS_M2AP_ID
;
ie
->
value
.
choice
.
ENB_MBMS_M2AP_ID
=
0
;
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/
//?
ie
->
value
.
choice
.
ENB_MBMS_M2AP_ID
=
0
;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -1437,7 +1437,7 @@ int MCE_handle_MBMS_SESSION_COUNTING_FAILURE(instance_t instance, module_id_t d
ie
->
id
=
M2AP_ProtocolIE_ID_id_MBSFN_Area_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_MbmsServiceCountingRequest_Ies__value_PR_MBSFN_Area_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
openair2/M2AP/m2ap_eNB_generate_messages.c
View file @
9dc22822
...
...
@@ -92,7 +92,7 @@
// //ie->id = M2AP_ProtocolIE_ID_id_gNB_eNB_ID;
// //ie->criticality = M2AP_Criticality_reject;
// //ie->value.present = M2AP_M2SetupRequestIEs__value_PR_GNB_eNB_ID;
// //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID,
f1ap_du_data->gNB_eNB_id
);
// //asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID,
0
);
// //asn1cSeqAdd(&out->protocolIEs.list, ie);
//
// /* optional */
...
...
openair2/M2AP/m2ap_eNB_interface_management.c
View file @
9dc22822
...
...
@@ -234,7 +234,7 @@ int eNB_send_MBMS_SCHEDULING_INFORMATION_RESPONSE(instance_t instance, m2ap_mbms
// ie->id = M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID;
// ie->criticality = M2AP_Criticality_reject;
// ie->value.present = M2AP_MbmsSchedulingInformationResponse_Ies__value_PR_MCE_MBMS_M2AP_ID;
// //ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
// //ie->value.choice.MCE_MBMS_M2AP_ID =
0;
// asn1cSeqAdd(&out->protocolIEs.list, ie);
//
// /* mandatory */
...
...
@@ -243,7 +243,7 @@ int eNB_send_MBMS_SCHEDULING_INFORMATION_RESPONSE(instance_t instance, m2ap_mbms
// ie->id = M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID;
// ie->criticality = M2AP_Criticality_reject;
// ie->value.present = M2AP_MbmsSchedulingInformationResponse_Ies__value_PR_ENB_MBMS_M2AP_ID;
// //ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
// //ie->value.choice.MCE_MBMS_M2AP_ID =
0;
// asn1cSeqAdd(&out->protocolIEs.list, ie);
//
...
...
@@ -329,7 +329,7 @@ int eNB_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m2ap_session_start
ie
->
id
=
M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStartResponse_Ies__value_PR_MCE_MBMS_M2AP_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -338,7 +338,7 @@ int eNB_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m2ap_session_start
ie
->
id
=
M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStartResponse_Ies__value_PR_ENB_MBMS_M2AP_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -395,7 +395,7 @@ int eNB_send_MBMS_SESSION_START_FAILURE(instance_t instance, m2ap_session_start_
ie
->
id
=
M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStartFailure_Ies__value_PR_MCE_MBMS_M2AP_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -493,7 +493,7 @@ int eNB_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m2ap_session_stop_r
ie
->
id
=
M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStopResponse_Ies__value_PR_MCE_MBMS_M2AP_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -502,7 +502,7 @@ int eNB_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m2ap_session_stop_r
ie
->
id
=
M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_SessionStopResponse_Ies__value_PR_ENB_MBMS_M2AP_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -579,7 +579,7 @@ int eNB_send_M2_SETUP_REQUEST(m2ap_eNB_instance_t *instance_p, m2ap_eNB_data_t*
//ie->id = M2AP_ProtocolIE_ID_id_gNB_eNB_ID;
//ie->criticality = M2AP_Criticality_reject;
//ie->value.present = M2AP_M2SetupRequestIEs__value_PR_GNB_eNB_ID;
//asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID,
f1ap_du_data->gNB_eNB_id
);
//asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID,
0
);
//asn1cSeqAdd(&out->protocolIEs.list, ie);
/* optional */
...
...
@@ -1290,7 +1290,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_REPORT(instance_t instance, m2ap_mbms_service
ie
->
id
=
M2AP_ProtocolIE_ID_id_MBSFN_Area_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_MbmsServiceCountingResultsReport_Ies__value_PR_MBSFN_Area_ID
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -1299,7 +1299,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_REPORT(instance_t instance, m2ap_mbms_service
ie
->
id
=
M2AP_ProtocolIE_ID_id_MBMS_Counting_Result_List
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_MbmsServiceCountingResultsReport_Ies__value_PR_MBMS_Counting_Result_List
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
M2AP_MBMS_Counting_Result_List_t
*
m2ap_mbms_counting_result_list
=
&
ie
->
value
.
choice
.
MBMS_Counting_Result_List
;
M2AP_MBMS_Counting_Result_Item_t
*
m2ap_mbms_counting_result_item
=
(
M2AP_MBMS_Counting_Result_Item_t
*
)
calloc
(
1
,
sizeof
(
M2AP_MBMS_Counting_Result_Item_t
));
...
...
@@ -1356,7 +1356,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_RESP(instance_t instance, m2ap_mbms_service_c
ie
->
id
=
M2AP_ProtocolIE_ID_id_MCE_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_MbmsServiceCountingResponse_Ies__value_PR_CriticalityDiagnostics
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
if
(
m2ap_encode_pdu
(
&
pdu
,
&
buffer
,
&
len
)
<
0
)
{
...
...
@@ -1395,7 +1395,7 @@ int eNB_send_MBMS_SERVICE_COUNTING_FAILURE(instance_t instance, m2ap_mbms_servic
ie
->
id
=
M2AP_ProtocolIE_ID_id_ENB_MBMS_M2AP_ID
;
ie
->
criticality
=
M2AP_Criticality_reject
;
ie
->
value
.
present
=
M2AP_MbmsServiceCountingFailure_Ies__value_PR_CriticalityDiagnostics
;
//ie->value.choice.MCE_MBMS_M2AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M2AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
openair2/MCE_APP/mce_app.c
View file @
9dc22822
...
...
@@ -67,7 +67,7 @@ static m2ap_setup_req_t * m2ap_setup_req_local = NULL;
/*------------------------------------------------------------------------------*/
static
uint32_t
MCE_app_register
(
ngran_node_t
node_type
,
uint32_t
mce_id_start
,
uint32_t
mce_id_end
)
{
static
uint32_t
MCE_app_register
(
uint32_t
mce_id_start
,
uint32_t
mce_id_end
)
{
uint32_t
mce_id
;
MessageDef
*
msg_p
;
uint32_t
register_mce_pending
=
0
;
...
...
@@ -87,17 +87,7 @@ static uint32_t MCE_app_register(ngran_node_t node_type,uint32_t mce_id_start, u
LOG_I
(
ENB_APP
,
"[MCE %d] MCE_app_register via M3AP for instance %d
\n
"
,
mce_id
,
ENB_MODULE_ID_TO_INSTANCE
(
mce_id
));
itti_send_msg_to_task
(
TASK_M3AP
,
ENB_MODULE_ID_TO_INSTANCE
(
mce_id
),
msg_p
);
//if (NODE_IS_DU(node_type)) { // F1AP registration
// // configure F1AP here for F1C
// LOG_I(ENB_APP,"ngran_eNB_DU: Allocating ITTI message for F1AP_SETUP_REQ\n");
// msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, F1AP_SETUP_REQ);
// RCconfig_DU_F1(msg_p, enb_id);
// LOG_I(ENB_APP,"[eNB %d] eNB_app_register via F1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id));
// itti_send_msg_to_task (TASK_DU_F1, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
// // configure GTPu here for F1U
//}
//else { // S1AP registration
//{ // S1AP registration
// /* note: there is an implicit relationship between the data structure and the message name */
// msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, S1AP_REGISTER_ENB_REQ);
// RCconfig_S1(msg_p, enb_id);
...
...
@@ -340,38 +330,36 @@ void *MCE_app_task(void *args_p) {
itti_mark_task_ready
(
TASK_MCE_APP
);
/* Try to register each MCE */
// This assumes that node_type of all RRC instances is the same
if
(
EPC_MODE_ENABLED
&&
RC
.
rrc
==
NULL
)
LOG_E
(
RRC
,
"inconsistent global variables
\n
"
);
if
(
EPC_MODE_ENABLED
&&
RC
.
rrc
)
{
register_mce_pending
=
MCE_app_register
(
RC
.
rrc
[
0
]
->
node_type
,
mce_id_start
,
mce_id_end
);
register_mce_pending
=
MCE_app_register
(
mce_id_start
,
mce_id_end
);
}
/* Try to register each MCE with each other */
// if (is_x2ap_enabled()
&& !NODE_IS_DU(RC.rrc[0]->node_type)
) {
// if (is_x2ap_enabled()) {
// x2_register_enb_pending = MCE_app_register_x2 (enb_id_start, enb_id_end);
// }
// MCE_app_send_MME_APP2(0);
if
(
is_m2ap_MCE_enabled
()
/*&& !NODE_IS_DU(RC.rrc[0]->node_type)*/
)
{
if
(
is_m2ap_MCE_enabled
())
{
RCconfig_MCE
();
if
(
!
m2ap_mbms_scheduling_information_local
)
m2ap_mbms_scheduling_information_local
=
(
m2ap_mbms_scheduling_information_t
*
)
calloc
(
1
,
sizeof
(
m2ap_mbms_scheduling_information_t
));
if
(
m2ap_mbms_scheduling_information_local
)
RCconfig_m2_scheduling
(
m2ap_mbms_scheduling_information_local
,
0
);
if
(
!
m2ap_mbms_scheduling_information_local
)
m2ap_mbms_scheduling_information_local
=
(
m2ap_mbms_scheduling_information_t
*
)
calloc
(
1
,
sizeof
(
m2ap_mbms_scheduling_information_t
));
if
(
m2ap_mbms_scheduling_information_local
)
RCconfig_m2_scheduling
(
m2ap_mbms_scheduling_information_local
,
0
);
if
(
!
m2ap_setup_resp_local
)
m2ap_setup_resp_local
=
(
m2ap_setup_resp_t
*
)
calloc
(
1
,
sizeof
(
m2ap_setup_resp_t
));
if
(
m2ap_setup_resp_local
)
RCconfig_m2_mcch
(
m2ap_setup_resp_local
,
0
);
if
(
!
m2ap_setup_resp_local
)
m2ap_setup_resp_local
=
(
m2ap_setup_resp_t
*
)
calloc
(
1
,
sizeof
(
m2ap_setup_resp_t
));
if
(
m2ap_setup_resp_local
)
RCconfig_m2_mcch
(
m2ap_setup_resp_local
,
0
);
}
// /* Try to register each MCE with MCE each other */
if
(
is_m3ap_MCE_enabled
()
/*&& !NODE_IS_DU(RC.rrc[0]->node_type)*/
)
{
if
(
is_m3ap_MCE_enabled
()
)
{
///*m3_register_mce_pending =*/
MCE_app_register_m3
(
mce_id_start
,
mce_id_end
);
MCE_app_register_m3
(
mce_id_start
,
mce_id_end
);
}
do
{
...
...
@@ -390,7 +378,6 @@ void *MCE_app_task(void *args_p) {
break
;
case
M3AP_REGISTER_MCE_CNF
:
//AssertFatal(!NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received S1AP_REGISTER_ENB_CNF\n");
LOG_I
(
MCE_APP
,
"[MCE %ld] Received %s: associated MME %d
\n
"
,
instance
,
ITTI_MSG_NAME
(
msg_p
),
M3AP_REGISTER_MCE_CNF
(
msg_p
).
nb_mme
);
DevAssert
(
register_mce_pending
>
0
);
...
...
@@ -451,12 +438,7 @@ void *MCE_app_task(void *args_p) {
case
M3AP_SETUP_RESP
:
LOG_I
(
MCE_APP
,
"Received M3AP_SETUP_RESP message %s
\n
"
,
ITTI_MSG_NAME
(
msg_p
));
// //AssertFatal(NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received F1AP_REGISTER_ENB_CNF in CU/MCE\n");
// //LOG_I(MCE_APP, "Received %s: associated ngran_MCE_CU %s with %d cells to activate\n", ITTI_MSG_NAME (msg_p),
// //F1AP_SETUP_RESP(msg_p).gNB_CU_name,F1AP_SETUP_RESP(msg_p).num_cells_to_activate);
//
// //handle_f1ap_setup_resp(&F1AP_SETUP_RESP(msg_p));
// handle_m3ap_setup_resp(&M3AP_SETUP_RESP(msg_p));
// DevAssert(register_mce_pending > 0);
...
...
openair2/MCE_APP/mce_config.h
View file @
9dc22822
...
...
@@ -40,7 +40,6 @@
#include "PHY/impl_defs_top.h"
#include "PHY/defs_eNB.h"
#include "s1ap_messages_types.h"
#include "f1ap_messages_types.h"
#include "LTE_SystemInformationBlockType2.h"
#include "rrc_messages_types.h"
#include "RRC/LTE/rrc_defs.h"
...
...
openair2/RRC/LTE/L2_interface.c
View file @
9dc22822
...
...
@@ -47,7 +47,6 @@
#include "intertask_interface.h"
#include "openair2/F1AP/f1ap_du_rrc_message_transfer.h"
extern
RAN_CONTEXT_t
RC
;
...
...
@@ -302,28 +301,6 @@ mac_rrc_data_ind(
)
//--------------------------------------------------------------------------
{
if
(
NODE_IS_DU
(
RC
.
rrc
[
module_idP
]
->
node_type
))
{
LOG_W
(
RRC
,
"[DU %d][RAPROC] Received SDU for CCCH on SRB %ld length %d for UE id %d RNTI %x
\n
"
,
module_idP
,
srb_idP
,
sdu_lenP
,
UE_id
,
rntiP
);
/* do ITTI message */
DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER
(
module_idP
,
CC_id
,
UE_id
,
rntiP
,
sduP
,
sdu_lenP
,
NULL
,
0
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_allocate_new_UE_context
(
RC
.
rrc
[
module_idP
]);
ue_context_p
->
ue_id_rnti
=
rntiP
;
ue_context_p
->
ue_context
.
rnti
=
rntiP
;
ue_context_p
->
ue_context
.
random_ue_identity
=
rntiP
;
ue_context_p
->
ue_context
.
Srb0
.
Active
=
1
;
RB_INSERT
(
rrc_ue_tree_s
,
&
RC
.
rrc
[
module_idP
]
->
rrc_ue_head
,
ue_context_p
);
return
(
0
);
}
//SRB_INFO *Srb_info;
protocol_ctxt_t
ctxt
;
sdu_size_t
sdu_size
=
0
;
...
...
openair2/RRC/LTE/L2_interface_common.c
View file @
9dc22822
...
...
@@ -88,12 +88,6 @@ rrc_data_req(
message_p
);
LOG_I
(
RRC
,
"sent RRC_DCCH_DATA_REQ to TASK_PDCP_ENB
\n
"
);
/* Hack: only trigger PDCP if in CU, otherwise it is triggered by RU threads
* Ideally, PDCP would not neet to be triggered like this but react to ITTI
* messages automatically */
if
(
ctxt_pP
->
enb_flag
&&
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
pdcp_run
(
ctxt_pP
);
return
true
;
// TODO should be changed to a CNF message later, currently RRC lite does not used the returned value anyway.
}
...
...
openair2/RRC/LTE/rrc_defs.h
View file @
9dc22822
...
...
@@ -742,7 +742,6 @@ typedef struct {
typedef
struct
eNB_RRC_INST_s
{
/// southbound midhaul configuration
ngran_node_t
node_type
;
eth_params_t
eth_params_s
;
char
*
node_name
;
uint32_t
node_id
;
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
9dc22822
This diff is collapsed.
Click to expand it.
openair2/RRC/LTE/rrc_eNB_M2AP.c
View file @
9dc22822
...
...
@@ -276,7 +276,6 @@ static void rrc_M2AP_init_MBMS(
,
&
(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
->
pmch_InfoList_r9
)
,
NULL
);
if
(
!
NODE_IS_CU
(
RC
.
rrc
[
enb_mod_idP
]
->
node_type
))
{
rrc_rlc_config_asn1_req
(
&
ctxt
,
NULL
,
// LTE_SRB_ToAddModList
NULL
,
// LTE_DRB_ToAddModList
...
...
@@ -284,7 +283,6 @@ static void rrc_M2AP_init_MBMS(
&
(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
->
pmch_InfoList_r9
)
,
0
,
0
);
}
//rrc_mac_config_req();
}
}
...
...
@@ -298,8 +296,6 @@ static void rrc_M2AP_init_MCCH(
){
int
sync_area
=
0
;
// initialize RRC_eNB_INST MCCH entry
eNB_RRC_INST
*
rrc
=
RC
.
rrc
[
enb_mod_idP
];
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
MCCH_MESSAGE
=
malloc
(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
num_mbsfn_sync_area
*
sizeof
(
uint8_t
*
));
...
...
@@ -353,13 +349,11 @@ static void rrc_M2AP_init_MCCH(
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
MCCH_MESS_COUNTING
[
sync_area
].
Active
=
1
;
}
if
(
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
rrc_mac_config_req_eNB_t
tmp
=
{
0
};
tmp
.
CC_id
=
CC_id
;
tmp
.
pmch_InfoList
=
&
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
->
pmch_InfoList_r9
;
tmp
.
mbms_AreaConfiguration
=
RC
.
rrc
[
enb_mod_idP
]
->
carrier
[
CC_id
].
mcch_message
;
rrc_mac_config_req_eNB
(
enb_mod_idP
,
&
tmp
);
}
return
;
}
...
...
@@ -599,9 +593,8 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
return
(
-
1
);
}
carrier
->
MBMS_flag
=
1
;
carrier
->
MBMS_flag
=
1
;
if
(
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
rrc_mac_config_req_eNB_t
tmp
=
{
0
};
tmp
.
CC_id
=
CC_id
;
tmp
.
rnti
=
0xfffd
;
...
...
@@ -610,7 +603,6 @@ static uint8_t rrc_M2AP_do_SIB1_MBMS_SIB13(
tmp
.
mbsfn_AreaInfoList
=
&
carrier
->
sib13
->
mbsfn_AreaInfoList_r9
;
tmp
.
FeMBMS_Flag
=
carrier
->
FeMBMS_flag
;
rrc_mac_config_req_eNB
(
Mod_id
,
&
tmp
);
}
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sizeof_SIB23
=
((
enc_rval
.
encoded
+
7
)
/
8
);
...
...
@@ -856,15 +848,13 @@ static uint8_t rrc_M2AP_do_SIB23_SIB2(
return
(
-
1
);
}
carrier
->
MBMS_flag
=
1
;
carrier
->
MBMS_flag
=
1
;
if
(
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
rrc_mac_config_req_eNB_t
tmp
=
{
0
};
tmp
.
CC_id
=
CC_id
;
tmp
.
mbsfn_SubframeConfigList
=
carrier
->
sib2
->
mbsfn_SubframeConfigList
;
tmp
.
MBMS_Flag
=
carrier
->
MBMS_flag
;
rrc_mac_config_req_eNB
(
ctxt_pP
->
module_id
,
&
tmp
);
}
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sizeof_SIB23
=
((
enc_rval
.
encoded
+
7
)
/
8
);
...
...
@@ -1001,13 +991,11 @@ static uint8_t rrc_M2AP_do_SIB23_SIB13(
return
(
-
1
);
}
if
(
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
rrc_mac_config_req_eNB_t
tmp
=
{
0
};
tmp
.
CC_id
=
CC_id
;
tmp
.
mbsfn_AreaInfoList
=
&
carrier
->
sib13
->
mbsfn_AreaInfoList_r9
;
tmp
.
MBMS_Flag
=
carrier
->
MBMS_flag
;
rrc_mac_config_req_eNB
(
ctxt_pP
->
module_id
,
&
tmp
);
}
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sizeof_SIB23
=
((
enc_rval
.
encoded
+
7
)
/
8
);
...
...
@@ -1250,16 +1238,14 @@ static uint8_t rrc_M2AP_do_SIB23_SIB2_SIB13(
return
(
-
1
);
}
carrier
->
MBMS_flag
=
1
;
carrier
->
MBMS_flag
=
1
;
if
(
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
rrc_mac_config_req_eNB_t
tmp
=
{
0
};
tmp
.
CC_id
=
CC_id
;
tmp
.
mbsfn_SubframeConfigList
=
carrier
->
sib2
->
mbsfn_SubframeConfigList
;
tmp
.
MBMS_Flag
=
carrier
->
MBMS_flag
;
tmp
.
mbsfn_AreaInfoList
=
&
carrier
->
sib13
->
mbsfn_AreaInfoList_r9
;
rrc_mac_config_req_eNB
(
ctxt_pP
->
module_id
,
&
tmp
);
}
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
carrier
[
CC_id
].
sizeof_SIB23
=
((
enc_rval
.
encoded
+
7
)
/
8
);
...
...
openair2/RRC/LTE/rrc_eNB_S1AP.c
View file @
9dc22822
...
...
@@ -993,39 +993,6 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char
//if(ue_context_p->ue_context.reestablishment_cause == ReestablishmentCause_spare1){}
rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP
(
&
ctxt
,
ue_context_p
);
}
if
(
NODE_IS_CU
(
RC
.
rrc
[
ctxt
.
module_id
]
->
node_type
))
{
struct
eNB_RRC_INST_s
*
rrc
=
RC
.
rrc
[
0
];
MessageDef
*
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
0
,
F1AP_UE_CONTEXT_SETUP_REQ
);
f1ap_ue_context_setup_t
*
req
=&
F1AP_UE_CONTEXT_SETUP_REQ
(
message_p
);
req
->
gNB_CU_ue_id
=
0
;
req
->
gNB_DU_ue_id
=
0
;
req
->
rnti
=
ue_context_p
->
ue_context
.
rnti
;
req
->
mcc
=
rrc
->
configuration
.
mcc
[
0
];
req
->
mnc
=
rrc
->
configuration
.
mnc
[
0
];
req
->
mnc_digit_length
=
rrc
->
configuration
.
mnc_digit_length
[
0
];
req
->
nr_cellid
=
rrc
->
nr_cellid
;
req
->
srbs_to_be_setup
=
malloc
(
sizeof
(
f1ap_srb_to_be_setup_t
));
req
->
srbs_to_be_setup_length
=
1
;
f1ap_srb_to_be_setup_t
*
SRBs
=
req
->
srbs_to_be_setup
;
SRBs
[
0
].
srb_id
=
CCCH
;
req
->
drbs_to_be_setup_length
=
S1AP_INITIAL_CONTEXT_SETUP_REQ
(
msg_p
).
nb_of_e_rabs
;
req
->
drbs_to_be_setup
=
malloc
(
req
->
drbs_to_be_setup_length
*
sizeof
(
f1ap_drb_to_be_setup_t
));
f1ap_drb_to_be_setup_t
*
DRBs
=
req
->
drbs_to_be_setup
;
for
(
int
i
=
0
;
i
<
req
->
drbs_to_be_setup_length
;
i
++
)
{
DRBs
[
i
].
drb_id
=
S1AP_INITIAL_CONTEXT_SETUP_REQ
(
msg_p
).
e_rab_param
[
i
].
e_rab_id
;
DRBs
[
i
].
rlc_mode
=
RLC_MODE_AM
;
DRBs
[
i
].
up_ul_tnl
[
0
].
tl_address
=
inet_addr
(
rrc
->
eth_params_s
.
my_addr
);
DRBs
[
i
].
up_ul_tnl
[
0
].
port
=
rrc
->
eth_params_s
.
my_portd
;
DRBs
[
i
].
up_ul_tnl_length
=
1
;
DRBs
[
i
].
up_dl_tnl
[
0
].
tl_address
=
inet_addr
(
rrc
->
eth_params_s
.
remote_addr
);
DRBs
[
i
].
up_dl_tnl
[
0
].
port
=
rrc
->
eth_params_s
.
remote_portd
;
DRBs
[
i
].
up_dl_tnl_length
=
1
;
}
LOG_I
(
RRC
,
"Send F1AP_UE_CONTEXT_SETUP_REQ with ITTI
\n
"
);
itti_send_msg_to_task
(
TASK_CU_F1
,
0
,
message_p
);
}
}
return
(
0
);
...
...
openair2/RRC/NR/L2_nr_interface.c
View file @
9dc22822
...
...
@@ -28,7 +28,6 @@
* \email: raymond.knopp@eurecom.fr, kroempa@gmail.com
*/
#include <f1ap_du_rrc_message_transfer.h>
#include "platform_types.h"
#include "nr_rrc_defs.h"
#include "nr_rrc_extern.h"
...
...
@@ -44,7 +43,6 @@
#include "NR_BCCH-BCH-Message.h"
#include "rrc_gNB_UE_context.h"
#include <openair2/RRC/NR/MESSAGES/asn1_msg.h>
#include <openair2/F1AP/f1ap_du_rrc_message_transfer.h>
extern
RAN_CONTEXT_t
RC
;
...
...
@@ -101,7 +99,7 @@ nr_rrc_data_req(
/* Hack: only trigger PDCP if in CU, otherwise it is triggered by RU threads
* Ideally, PDCP would not neet to be triggered like this but react to ITTI
* messages automatically */
if
(
ctxt_pP
->
enb_flag
&&
NODE_IS_CU
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
)
if
(
ctxt_pP
->
enb_flag
)
pdcp_run
(
ctxt_pP
);
return
true
;
// TODO should be changed to a CNF message later, currently RRC lite does not used the returned value anyway.
...
...
openair3/COMMON/messages_types.h
View file @
9dc22822
...
...
@@ -31,7 +31,6 @@
#include "ip_forward_messages_types.h"
#include "s11_messages_types.h"
#include "s1ap_messages_types.h"
#include "f1ap_messages_types.h"
#include "nas_messages_types.h"
#include "s6a_messages_types.h"
#include "sctp_messages_types.h"
...
...
openair3/M3AP/m3ap_MCE_generate_messsages.c
View file @
9dc22822
...
...
@@ -92,7 +92,7 @@ int m2ap_eNB_generate_m2_setup_request(
//ie->id = M2AP_ProtocolIE_ID_id_gNB_eNB_ID;
//ie->criticality = M2AP_Criticality_reject;
//ie->value.present = M2AP_M2SetupRequestIEs__value_PR_GNB_eNB_ID;
//asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID,
f1ap_du_data->gNB_eNB_id
);
//asn_int642INTEGER(&ie->value.choice.GNB_eNB_ID,
0
);
//asn1cSeqAdd(&out->protocolIEs.list, ie);
/* optional */
...
...
openair3/M3AP/m3ap_MCE_interface_management.c
View file @
9dc22822
...
...
@@ -128,7 +128,7 @@ int MCE_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m3ap_session_start
ie
->
id
=
M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionStartResponse_IEs__value_PR_MCE_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -137,7 +137,7 @@ int MCE_send_MBMS_SESSION_START_RESPONSE(instance_t instance, m3ap_session_start
ie
->
id
=
M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionStartResponse_IEs__value_PR_MME_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -289,7 +289,7 @@ int MCE_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m3ap_session_start_
ie
->
id
=
M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionStopResponse_IEs__value_PR_MCE_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -298,7 +298,7 @@ int MCE_send_MBMS_SESSION_STOP_RESPONSE(instance_t instance, m3ap_session_start_
ie
->
id
=
M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionStopResponse_IEs__value_PR_MCE_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -388,7 +388,7 @@ int MCE_send_MBMS_SESSION_UPDATE_RESPONSE(instance_t instance, m3ap_mbms_session
ie
->
id
=
M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionUpdateResponse_IEs__value_PR_MCE_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -397,7 +397,7 @@ int MCE_send_MBMS_SESSION_UPDATE_RESPONSE(instance_t instance, m3ap_mbms_session
ie
->
id
=
M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionUpdateResponse_IEs__value_PR_MCE_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -494,7 +494,7 @@ int MCE_send_M3_SETUP_REQUEST(m3ap_MCE_instance_t *instance_p, m3ap_MCE_data_t *
// //ie->id = M3AP_ProtocolIE_ID_id_gNB_MCE_ID;
// //ie->criticality = M3AP_Criticality_reject;
// //ie->value.present = M3AP_M3SetupRequestIEs__value_PR_GNB_MCE_ID;
// //asn_int642INTEGER(&ie->value.choice.GNB_MCE_ID,
f1ap_du_data->gNB_MCE_id
);
// //asn_int642INTEGER(&ie->value.choice.GNB_MCE_ID,
0
);
// //asn1cSeqAdd(&out->protocolIEs.list, ie);
//
// /* optional */
...
...
openair3/M3AP/m3ap_MME.c
View file @
9dc22822
...
...
@@ -111,9 +111,7 @@ void m3ap_MME_handle_sctp_association_resp(instance_t instance, sctp_new_associa
sctp_new_association_resp
->
ulp_cnx_id
);
if
(
sctp_new_association_resp
->
sctp_state
==
SCTP_STATE_SHUTDOWN
)
//proto_agent_stop(instance);
//f1ap_handle_setup_message(instance, sctp_new_association_resp->sctp_state == SCTP_STATE_SHUTDOWN);
return
;
// exit -1 for debugging
return
;
}
// go to an init func
...
...
openair3/M3AP/m3ap_MME_interface_management.c
View file @
9dc22822
...
...
@@ -93,7 +93,7 @@ int MME_send_MBMS_SESSION_START_REQUEST(instance_t instance/*, uint32_t assoc_id
ie
->
id
=
M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionStartRequest_IEs__value_PR_MME_MBMS_M3AP_ID
;
//ie->value.choice.MME_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MME_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -343,7 +343,7 @@ int MME_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m3ap_session_stop_re
ie
->
id
=
M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionStopRequest_IEs__value_PR_MME_MBMS_M3AP_ID
;
//ie->value.choice.MME_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MME_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -352,7 +352,7 @@ int MME_send_MBMS_SESSION_STOP_REQUEST(instance_t instance, m3ap_session_stop_re
ie
->
id
=
M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionStopRequest_IEs__value_PR_MCE_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
@@ -857,7 +857,7 @@ int MME_send_MBMS_SESSION_UPDATE_REQUEST(instance_t instance, m3ap_mbms_session_
ie
->
id
=
M3AP_ProtocolIE_ID_id_MME_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionUpdateRequest_IEs__value_PR_MME_MBMS_M3AP_ID
;
//ie->value.choice.MME_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MME_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
/* mandatory */
...
...
@@ -866,7 +866,7 @@ int MME_send_MBMS_SESSION_UPDATE_REQUEST(instance_t instance, m3ap_mbms_session_
ie
->
id
=
M3AP_ProtocolIE_ID_id_MCE_MBMS_M3AP_ID
;
ie
->
criticality
=
M3AP_Criticality_reject
;
ie
->
value
.
present
=
M3AP_MBMSSessionUpdateRequest_IEs__value_PR_MCE_MBMS_M3AP_ID
;
//ie->value.choice.MCE_MBMS_M3AP_ID =
/*F1AP_get_next_transaction_identifier(enb_mod_idP, du_mod_idP);*/ //?
//ie->value.choice.MCE_MBMS_M3AP_ID =
0;
asn1cSeqAdd
(
&
out
->
protocolIEs
.
list
,
ie
);
...
...
openair3/MME_APP/mme_app.c
View file @
9dc22822
...
...
@@ -85,17 +85,7 @@ extern RAN_CONTEXT_t RC;
// LOG_I(ENB_APP,"[MCE %d] MCE_app_register via M3AP for instance %d\n", mce_id, ENB_MODULE_ID_TO_INSTANCE(mce_id));
// itti_send_msg_to_task (TASK_M3AP, ENB_MODULE_ID_TO_INSTANCE(mce_id), msg_p);
//
// //if (NODE_IS_DU(node_type)) { // F1AP registration
// // // configure F1AP here for F1C
// // LOG_I(ENB_APP,"ngran_eNB_DU: Allocating ITTI message for F1AP_SETUP_REQ\n");
// // msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, F1AP_SETUP_REQ);
// // RCconfig_DU_F1(msg_p, enb_id);
//
// // LOG_I(ENB_APP,"[eNB %d] eNB_app_register via F1AP for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id));
// // itti_send_msg_to_task (TASK_DU_F1, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
// // // configure GTPu here for F1U
// //}
// //else { // S1AP registration
// //{ // S1AP registration
// // /* note: there is an implicit relationship between the data structure and the message name */
// // msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, S1AP_REGISTER_ENB_REQ);
// // RCconfig_S1(msg_p, enb_id);
...
...
@@ -313,12 +303,9 @@ void *MME_app_task(void *args_p) {
break
;
// case M3AP_SETUP_RESP:
// //AssertFatal(NODE_IS_DU(RC.rrc[0]->node_type), "Should not have received F1AP_REGISTER_ENB_CNF in CU/MCE\n");
// //LOG_I(MME_APP, "Received %s: associated ngran_MCE_CU %s with %d cells to activate\n", ITTI_MSG_NAME (msg_p),
// //F1AP_SETUP_RESP(msg_p).gNB_CU_name,F1AP_SETUP_RESP(msg_p).num_cells_to_activate);
//
// //handle_f1ap_setup_resp(&F1AP_SETUP_RESP(msg_p));
// handle_m3ap_setup_resp(&M3AP_SETUP_RESP(msg_p));
// DevAssert(register_mce_pending > 0);
...
...
openair3/MME_APP/mme_config.h
View file @
9dc22822
...
...
@@ -40,7 +40,6 @@
#include "PHY/impl_defs_top.h"
#include "PHY/defs_eNB.h"
#include "s1ap_messages_types.h"
#include "f1ap_messages_types.h"
#include "LTE_SystemInformationBlockType2.h"
#include "rrc_messages_types.h"
#include "RRC/LTE/rrc_defs.h"
...
...
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