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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
460acd84
Commit
460acd84
authored
Jul 05, 2022
by
laurent
Committed by
Sakthivel Velumani
Sep 13, 2022
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
build, run in F1 mode until UE connect but pdu session still fails
parent
7c067095
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
124 additions
and
54 deletions
+124
-54
cmake_targets/build_oai
cmake_targets/build_oai
+1
-1
common/ngran_types.h
common/ngran_types.h
+4
-2
openair2/ENB_APP/flexran_agent_ran_api.c
openair2/ENB_APP/flexran_agent_ran_api.c
+4
-0
openair2/F1AP/f1ap_cu_interface_management.c
openair2/F1AP/f1ap_cu_interface_management.c
+3
-1
openair2/F1AP/f1ap_cu_task.c
openair2/F1AP/f1ap_cu_task.c
+3
-1
openair2/GNB_APP/gnb_app.c
openair2/GNB_APP/gnb_app.c
+27
-26
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+7
-4
openair2/LAYER2/RLC/rlc.c
openair2/LAYER2/RLC/rlc.c
+1
-1
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+1
-1
openair2/LAYER2/rlc_v2/rlc_oai_api.c
openair2/LAYER2/rlc_v2/rlc_oai_api.c
+1
-1
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+1
-0
openair2/RRC/LTE/rrc_eNB_S1AP.c
openair2/RRC/LTE/rrc_eNB_S1AP.c
+1
-3
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+0
-1
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+52
-0
openair2/RRC/NR/rrc_gNB_NGAP.c
openair2/RRC/NR/rrc_gNB_NGAP.c
+10
-9
openair2/RRC/NR/rrc_gNB_NGAP.h
openair2/RRC/NR/rrc_gNB_NGAP.h
+1
-1
openair3/NGAP/ngap_gNB_handlers.c
openair3/NGAP/ngap_gNB_handlers.c
+7
-2
No files found.
cmake_targets/build_oai
View file @
460acd84
...
...
@@ -616,7 +616,7 @@ function main() {
if
[[
${#
CMAKE_CXX_FLAGS
[@]
}
>
0
]]
;
then
CMAKE_CMD
=
"
$CMAKE_CMD
-DCMAKE_CXX_FLAGS=
\"
${
CMAKE_CXX_FLAGS
[*]
}
\"
"
;
fi
CMAKE_CMD
=
"
$CMAKE_CMD
-DNOAVX512=
\"
${
NOAVX512
[*]
}
\"
"
echo_info
"running
$CMAKE_CMD
"
eval
$CMAKE_CMD
eval
$CMAKE_CMD
../../..
for
f
in
$execlist
;
do
echo_info
"Compiling
$f
..."
...
...
common/ngran_types.h
View file @
460acd84
...
...
@@ -42,11 +42,13 @@ typedef enum {
ngran_gNB_CU
=
5
,
ngran_eNB_DU
=
6
,
ngran_gNB_DU
=
7
,
ngran_eNB_MBMS_STA
=
8
ngran_eNB_MBMS_STA
=
8
,
ngran_gNB_CUCP
,
ngran_gNB_CUUP
}
ngran_node_t
;
#define NODE_IS_MONOLITHIC(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB || (nOdE_TyPe) == ngran_ng_eNB || (nOdE_TyPe) == ngran_gNB)
#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU)
#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU
|| (nOdE_TyPe) == ngran_gNB_CUCP ||(nOdE_TyPe) == ngran_gNB_CUUP
)
#define NODE_IS_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_DU || (nOdE_TyPe) == ngran_gNB_DU)
#define NODE_IS_MBMS(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_MBMS_STA)
...
...
openair2/ENB_APP/flexran_agent_ran_api.c
View file @
460acd84
...
...
@@ -3677,6 +3677,8 @@ size_t flexran_get_capabilities(mid_t mod_id, Protocol__FlexBsCapability **caps)
case
ngran_eNB_CU
:
case
ngran_ng_eNB_CU
:
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
case
ngran_gNB_CUUP
:
n_caps
=
4
;
*
caps
=
calloc
(
n_caps
,
sizeof
(
Protocol__FlexBsCapability
));
AssertFatal
(
*
caps
,
"could not allocate %zu bytes for Protocol__FlexBsCapability array
\n
"
,
...
...
@@ -3730,6 +3732,8 @@ uint32_t flexran_get_capabilities_mask(mid_t mod_id) {
case
ngran_eNB_CU
:
case
ngran_ng_eNB_CU
:
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
case
ngran_gNB_CUUP
:
mask
=
(
1
<<
PROTOCOL__FLEX_BS_CAPABILITY__PDCP
)
|
(
1
<<
PROTOCOL__FLEX_BS_CAPABILITY__SDAP
)
|
(
1
<<
PROTOCOL__FLEX_BS_CAPABILITY__RRC
)
...
...
openair2/F1AP/f1ap_cu_interface_management.c
View file @
460acd84
...
...
@@ -144,7 +144,9 @@ int CU_handle_F1_SETUP_REQUEST(instance_t instance,
// LTS: FIXME data model failure: we don't KNOW if we receive a 4G or a 5G cell
// Furthermore, cell_type is not a attribute of a cell in the data structure !!!!!!!!!!
if
(
RC
.
nrrrc
&&
RC
.
nrrrc
[
GNB_INSTANCE_TO_MODULE_ID
(
instance
)]
->
node_type
==
ngran_gNB_CU
)
if
(
RC
.
nrrrc
&&
(
RC
.
nrrrc
[
GNB_INSTANCE_TO_MODULE_ID
(
instance
)]
->
node_type
==
ngran_gNB_CU
||
RC
.
nrrrc
[
GNB_INSTANCE_TO_MODULE_ID
(
instance
)]
->
node_type
==
ngran_gNB_CUCP
)
)
f1ap_req
(
true
,
instance
)
->
cell_type
=
CELL_MACRO_GNB
;
else
f1ap_req
(
true
,
instance
)
->
cell_type
=
CELL_MACRO_ENB
;
...
...
openair2/F1AP/f1ap_cu_task.c
View file @
460acd84
...
...
@@ -121,7 +121,9 @@ void *F1AP_CU_task(void *arg) {
eth_params_t
*
IPaddrs
;
// Hardcoded instance id!
if
(
RC
.
nrrrc
&&
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CU
)
if
(
RC
.
nrrrc
&&
(
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CU
||
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CUCP
)
)
IPaddrs
=&
RC
.
nrrrc
[
0
]
->
eth_params_s
;
else
IPaddrs
=&
RC
.
rrc
[
0
]
->
eth_params_s
;
...
...
openair2/GNB_APP/gnb_app.c
View file @
460acd84
...
...
@@ -196,40 +196,41 @@ void *gNB_app_task(void *args_p)
}
if
(
RC
.
nb_nr_inst
>
0
)
{
if
(
NODE_IS_CU
(
RC
.
nrrrc
[
0
]
->
node_type
))
{
if
(
itti_create_task
(
TASK_CU_F1
,
F1AP_CU_task
,
NULL
)
<
0
)
{
LOG_E
(
F1AP
,
"Create task for F1AP CU failed
\n
"
);
AssertFatal
(
1
==
0
,
"exiting"
);
LOG_E
(
F1AP
,
"Create task for F1AP CU failed
\n
"
);
AssertFatal
(
1
==
0
,
"exiting"
);
}
}
if
(
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CUCP
)
{
if
(
itti_create_task
(
TASK_CUCP_E1
,
E1AP_CUCP_task
,
NULL
)
<
0
)
{
LOG_E
(
E1AP
,
"Create task for E1AP CP failed
\n
"
);
AssertFatal
(
1
==
0
,
"exiting"
);
}
if
(
RC
.
nrrrc
[
0
]
->
cu_type
==
CPtype
)
{
if
(
itti_create_task
(
TASK_CUCP_E1
,
E1AP_CUCP_task
,
NULL
)
<
0
)
{
LOG_E
(
E1AP
,
"Create task for E1AP CP failed
\n
"
);
AssertFatal
(
1
==
0
,
"exiting"
);
}
// To initialize SCTP listener
msg_p
=
itti_alloc_new_message
(
TASK_GNB_APP
,
0
,
E1AP_SETUP_REQ
);
RCconfig_NR_CU_E1
(
msg_p
,
0
);
itti_send_msg_to_task
(
TASK_CUCP_E1
,
GNB_MODULE_ID_TO_INSTANCE
(
0
),
msg_p
);
}
else
if
(
RC
.
nrrrc
[
0
]
->
cu_type
==
UPtype
)
{
if
(
itti_create_task
(
TASK_CUUP_E1
,
E1AP_CUUP_task
,
NULL
)
<
0
)
{
LOG_E
(
E1AP
,
"Create task for E1AP UP failed
\n
"
);
AssertFatal
(
1
==
0
,
"exiting"
);
}
// configure E1AP here
LOG_I
(
GNB_APP
,
"ngran_gNB_CU: Allocating ITTI message for E1AP_SETUP_REQ
\n
"
);
msg_p
=
itti_alloc_new_message
(
TASK_GNB_APP
,
0
,
E1AP_SETUP_REQ
);
RCconfig_NR_CU_E1
(
msg_p
,
0
);
itti_send_msg_to_task
(
TASK_CUUP_E1
,
GNB_MODULE_ID_TO_INSTANCE
(
0
),
msg_p
);
msg_p
=
itti_alloc_new_message
(
TASK_GNB_APP
,
0
,
E1AP_SETUP_REQ
);
RCconfig_NR_CU_E1
(
msg_p
,
0
);
itti_send_msg_to_task
(
TASK_CUCP_E1
,
GNB_MODULE_ID_TO_INSTANCE
(
0
),
msg_p
);
}
else
if
(
RC
.
nrrrc
[
0
]
->
node_type
==
ngran_gNB_CUUP
)
{
if
(
itti_create_task
(
TASK_CUUP_E1
,
E1AP_CUUP_task
,
NULL
)
<
0
)
{
LOG_E
(
E1AP
,
"Create task for E1AP UP failed
\n
"
);
AssertFatal
(
1
==
0
,
"exiting"
);
}
// configure E1AP here
LOG_I
(
GNB_APP
,
"ngran_gNB_CU: Allocating ITTI message for E1AP_SETUP_REQ
\n
"
);
msg_p
=
itti_alloc_new_message
(
TASK_GNB_APP
,
0
,
E1AP_SETUP_REQ
);
RCconfig_NR_CU_E1
(
msg_p
,
0
);
itti_send_msg_to_task
(
TASK_CUUP_E1
,
GNB_MODULE_ID_TO_INSTANCE
(
0
),
msg_p
);
}
if
(
NODE_IS_DU
(
RC
.
nrrrc
[
0
]
->
node_type
))
{
if
(
itti_create_task
(
TASK_DU_F1
,
F1AP_DU_task
,
NULL
)
<
0
)
{
LOG_E
(
F1AP
,
"Create task for F1AP DU failed
\n
"
);
AssertFatal
(
1
==
0
,
"exiting"
);
...
...
openair2/GNB_APP/gnb_config.c
View file @
460acd84
...
...
@@ -1171,7 +1171,6 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {
}
rrc
->
node_type
=
node_type
;
rrc
->
cu_type
=
cu_type
;
rrc
->
nr_cellid
=
(
uint64_t
)
*
(
GNBParamList
.
paramarray
[
i
][
GNB_NRCELLID_IDX
].
u64ptr
);
...
...
@@ -2319,10 +2318,9 @@ static ngran_node_t get_node_type(void)
config_getlist
(
&
MacRLC_ParamList
,
MacRLC_Params
,
sizeof
(
MacRLC_Params
)
/
sizeof
(
paramdef_t
),
NULL
);
config_getlist
(
&
GNBParamList
,
GNBParams
,
sizeof
(
GNBParams
)
/
sizeof
(
paramdef_t
),
NULL
);
config_getlist
(
&
GNBE1ParamList
,
GNBE1Params
,
sizeof
(
GNBE1Params
)
/
sizeof
(
paramdef_t
),
aprefix
);
char
aprefix
[
MAX_OPTNAME_SIZE
*
2
+
8
];
sprintf
(
aprefix
,
"%s.[%i]"
,
GNB_CONFIG_STRING_GNB_LIST
,
0
);
config_getlist
(
&
GNBE1ParamList
,
GNBE1Params
,
sizeof
(
GNBE1Params
)
/
sizeof
(
paramdef_t
),
aprefix
);
if
(
MacRLC_ParamList
.
numelt
>
0
)
{
RC
.
nb_nr_macrlc_inst
=
MacRLC_ParamList
.
numelt
;
for
(
int
j
=
0
;
j
<
RC
.
nb_nr_macrlc_inst
;
j
++
)
{
...
...
@@ -2333,7 +2331,12 @@ static ngran_node_t get_node_type(void)
}
if
((
strcmp
(
*
(
GNBParamList
.
paramarray
[
0
][
GNB_TRANSPORT_S_PREFERENCE_IDX
].
strptr
),
"f1"
)
==
0
)
&&
(
strcmp
(
*
(
GNBE1ParamList
.
paramarray
[
0
][
GNB_CONFIG_E1_CU_TYPE_IDX
].
strptr
),
"cu"
)
==
0
))
(
strcmp
(
*
(
GNBE1ParamList
.
paramarray
[
0
][
GNB_CONFIG_E1_CU_TYPE_IDX
].
strptr
),
"cp"
)
==
0
))
return
ngran_gNB_CUCP
;
else
if
((
strcmp
(
*
(
GNBParamList
.
paramarray
[
0
][
GNB_TRANSPORT_S_PREFERENCE_IDX
].
strptr
),
"f1"
)
==
0
)
&&
(
strcmp
(
*
(
GNBE1ParamList
.
paramarray
[
0
][
GNB_CONFIG_E1_CU_TYPE_IDX
].
strptr
),
"up"
)
==
0
))
return
ngran_gNB_CUUP
;
else
if
(
strcmp
(
*
(
GNBParamList
.
paramarray
[
0
][
GNB_TRANSPORT_S_PREFERENCE_IDX
].
strptr
),
"f1"
)
==
0
)
return
ngran_gNB_CU
;
else
if
(
macrlc_has_f1
==
0
)
return
ngran_gNB
;
...
...
openair2/LAYER2/RLC/rlc.c
View file @
460acd84
...
...
@@ -590,7 +590,7 @@ void rlc_data_ind (
T
(
T_ENB_RLC_UL
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
rnti
),
T_INT
(
rb_idP
),
T_INT
(
sdu_sizeP
));
#endif
const
ngran_node_t
type
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
;
AssertFatal
(
type
!=
ngran_eNB_CU
&&
type
!=
ngran_ng_eNB_CU
&&
type
!=
ngran_gNB_CU
,
AssertFatal
(
!
NODE_IS_CU
(
type
)
,
"Can't be CU, bad node type %d
\n
"
,
type
);
if
(
NODE_IS_DU
(
type
)
&&
srb_flagP
==
1
)
{
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
View file @
460acd84
...
...
@@ -514,7 +514,7 @@ rb_found:
T_INT
(
ue
->
rnti
),
T_INT
(
rb_id
),
T_INT
(
size
));
const
ngran_node_t
type
=
RC
.
nrrrc
[
0
/*ctxt_pP->module_id*/
]
->
node_type
;
AssertFatal
(
type
!=
ngran_eNB_CU
&&
type
!=
ngran_ng_eNB_CU
&&
type
!=
ngran_gNB_CU
,
AssertFatal
(
!
NODE_IS_CU
(
type
)
,
"Can't be CU, bad node type %d
\n
"
,
type
);
// if (NODE_IS_DU(type) && is_srb == 0) {
...
...
openair2/LAYER2/rlc_v2/rlc_oai_api.c
View file @
460acd84
...
...
@@ -415,7 +415,7 @@ rb_found:
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
(
type
!=
ngran_eNB_CU
&&
type
!=
ngran_ng_eNB_CU
&&
type
!=
ngran_gNB_CU
,
AssertFatal
(
!
NODE_IS_CU
(
type
)
,
"Can't be CU, bad node type %d
\n
"
,
type
);
if
(
NODE_IS_DU
(
type
))
{
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
460acd84
...
...
@@ -6610,6 +6610,7 @@ rrc_eNB_generate_RRCConnectionSetup(
case
ngran_eNB_CU
:
case
ngran_ng_eNB_CU
:
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
// create an ITTI message
/* TODO: F1 IDs ar missing in RRC */
message_p
=
itti_alloc_new_message
(
TASK_RRC_ENB
,
0
,
F1AP_DL_RRC_MESSAGE
);
...
...
openair2/RRC/LTE/rrc_eNB_S1AP.c
View file @
460acd84
...
...
@@ -1004,9 +1004,7 @@ int rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, const char
}
if
((
RC
.
rrc
[
ctxt
.
module_id
]
->
node_type
==
ngran_eNB_CU
)
||
(
RC
.
rrc
[
ctxt
.
module_id
]
->
node_type
==
ngran_ng_eNB_CU
)
||
(
RC
.
rrc
[
ctxt
.
module_id
]
->
node_type
==
ngran_gNB_CU
)
){
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
);
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
460acd84
...
...
@@ -476,7 +476,6 @@ typedef struct nr_mac_rrc_dl_if_s {
typedef
struct
gNB_RRC_INST_s
{
ngran_node_t
node_type
;
int
cu_type
;
uint32_t
node_id
;
char
*
node_name
;
int
module_id
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
460acd84
...
...
@@ -369,10 +369,54 @@ rrc_gNB_generate_RRCSetup(
ue_p
->
Srb0
.
Tx_buffer
.
payload_size
,
"[MSG] RRC Setup
\n
"
);
<<<<<<<
HEAD
// activate release timer, if RRCSetupComplete not received after 100 frames, remove UE
ue_context_pP
->
ue_context
.
ue_release_timer
=
1
;
// remove UE after 10 frames after RRCConnectionRelease is triggered
ue_context_pP
->
ue_context
.
ue_release_timer_thres
=
1000
;
=======
switch
(
rrc
->
node_type
)
{
case
ngran_gNB_CU
:
// create an ITTI message
/* TODO: F1 IDs ar missing in RRC */
nr_rrc_pdcp_config_asn1_req
(
ctxt_pP
,
ue_context_pP
->
ue_context
.
SRB_configList
,
NULL
,
NULL
,
0
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
message_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
0
,
F1AP_DL_RRC_MESSAGE
);
F1AP_DL_RRC_MESSAGE
(
message_p
).
rrc_container
=
(
uint8_t
*
)
ue_p
->
Srb0
.
Tx_buffer
.
Payload
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
rrc_container_length
=
ue_p
->
Srb0
.
Tx_buffer
.
payload_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
=
ue_p
->
rnti
;
F1AP_DL_RRC_MESSAGE
(
message_p
).
srb_id
=
CCCH
;
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
);
LOG_D
(
NR_RRC
,
"Send F1AP_DL_RRC_MESSAGE with ITTI
\n
"
);
break
;
case
ngran_gNB_DU
:
case
ngran_gNB_CUCP
:
case
ngran_gNB_CUUP
:
// nothing to do for DU
AssertFatal
(
1
==
0
,
"nothing to do for DU
\n
"
);
break
;
case
ngran_gNB
:
{
// rrc_mac_config_req_gNB
>>>>>>>
build
,
run
in
F1
mode
until
UE
connect
but
pdu
session
still
fails
/* TODO: this should go through the E1 interface */
apply_pdcp_config
(
ue_context_pP
,
ctxt_pP
);
...
...
@@ -473,6 +517,7 @@ rrc_gNB_generate_RRCReject(
switch
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
{
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
// create an ITTI message
message_p
=
itti_alloc_new_message
(
TASK_RRC_GNB
,
0
,
F1AP_DL_RRC_MESSAGE
);
F1AP_DL_RRC_MESSAGE
(
message_p
).
rrc_container
=
(
uint8_t
*
)
ue_p
->
Srb0
.
Tx_buffer
.
Payload
;
...
...
@@ -489,6 +534,7 @@ rrc_gNB_generate_RRCReject(
break
;
case
ngran_gNB_DU
:
case
ngran_gNB_CUUP
:
// nothing to do for DU
AssertFatal
(
1
==
0
,
"nothing to do for DU
\n
"
);
break
;
...
...
@@ -686,6 +732,7 @@ rrc_gNB_generate_defaultRRCReconfiguration(
ue_context_pP
->
ue_context
.
rnti
);
switch
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
{
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
nr_rrc_data_req
(
ctxt_pP
,
DCCH
,
rrc_gNB_mui
++
,
...
...
@@ -698,6 +745,7 @@ rrc_gNB_generate_defaultRRCReconfiguration(
break
;
case
ngran_gNB_DU
:
case
ngran_gNB_CUUP
:
// nothing to do for DU
AssertFatal
(
1
==
0
,
"nothing to do for DU
\n
"
);
break
;
...
...
@@ -4101,6 +4149,7 @@ rrc_gNB_generate_SecurityModeCommand(
switch
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
{
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
// create an ITTI message
memcpy
(
ue_context_pP
->
ue_context
.
Srb1
.
Srb_info
.
Tx_buffer
.
Payload
,
buffer
,
size
);
ue_context_pP
->
ue_context
.
Srb1
.
Srb_info
.
Tx_buffer
.
payload_size
=
size
;
...
...
@@ -4116,6 +4165,7 @@ rrc_gNB_generate_SecurityModeCommand(
break
;
case
ngran_gNB_DU
:
case
ngran_gNB_CUUP
:
// nothing to do for DU
AssertFatal
(
1
==
0
,
"nothing to do for DU
\n
"
);
break
;
...
...
@@ -4164,6 +4214,7 @@ rrc_gNB_generate_UECapabilityEnquiry(
size
);
switch
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
{
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
nr_rrc_data_req
(
ctxt_pP
,
DCCH
,
...
...
@@ -4175,6 +4226,7 @@ rrc_gNB_generate_UECapabilityEnquiry(
break
;
case
ngran_gNB_DU
:
case
ngran_gNB_CUUP
:
// nothing to do for DU
AssertFatal
(
1
==
0
,
"nothing to do for DU
\n
"
);
break
;
...
...
openair2/RRC/NR/rrc_gNB_NGAP.c
View file @
460acd84
...
...
@@ -554,7 +554,7 @@ rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(
&
ctxt
,
&
create_tunnel_resp
,
&
inde_list
[
0
]);
ue_context_p
->
ue_context
.
setup_pdu_sessions
+=
nb_pdusessions_tosetup
;
ue_context_p
->
ue_context
.
setup_pdu_sessions
+=
NGAP_INITIAL_CONTEXT_SETUP_REQ
(
msg_p
).
nb_of_pdusessions
;
ue_context_p
->
ue_context
.
established_pdu_sessions_flag
=
1
;
}
...
...
@@ -807,6 +807,7 @@ rrc_gNB_process_NGAP_DOWNLINK_NAS(
*/
switch
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
node_type
)
{
case
ngran_gNB_CU
:
case
ngran_gNB_CUCP
:
/* Transfer data to PDCP */
nr_rrc_data_req
(
&
ctxt
,
...
...
@@ -948,7 +949,7 @@ rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(
}
//------------------------------------------------------------------------------
int
void
rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
...
...
@@ -975,7 +976,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
LOG_I
(
NR_RRC
,
"[gNB %ld] Received %s: ue_initial_id %d, gNB_ue_ngap_id %u
\n
"
,
instance
,
msg_name
,
ue_initial_id
,
gNB_ue_ngap_id
);
if
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
cu_type
==
CPtype
)
{
// E1 split CU-CP node
if
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
node_type
==
ngran_gNB_CUCP
)
{
// E1 split CU-CP node
/* Configurations are referred from rrc_gNB_generate_dedicatedRRCReconfiguration() and
rrc_gNB_process_RRCReconfigurationComplete()
...
...
@@ -1048,7 +1049,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
NGAP_PDUSESSION_SETUP_REQ
(
msg_fail_p
).
gNB_ue_ngap_id
=
gNB_ue_ngap_id
;
// TODO add failure cause when defined!
itti_send_msg_to_task
(
TASK_NGAP
,
instance
,
msg_fail_p
);
return
(
-
1
)
;
return
;
}
else
{
memset
(
&
create_tunnel_req
,
0
,
sizeof
(
gtpv1u_gnb_create_tunnel_req_t
));
uint8_t
nb_pdusessions_tosetup
=
NGAP_PDUSESSION_SETUP_REQ
(
msg_p
).
nb_pdusessions_tosetup
;
...
...
@@ -1098,7 +1099,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
ue_context_p
->
ue_context
.
ul_failure_timer
=
20000
;
// set ul_failure to 20000 for triggering rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ
// rrc_gNB_free_UE(ctxt.module_id,ue_context_p);
ue_context_p
->
ue_context
.
ul_failure_timer
=
0
;
return
(
0
)
;
return
;
}
nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP
(
&
ctxt
,
...
...
@@ -1109,14 +1110,14 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
// TEST
// ue_context_p->ue_context.pdusession[0].status = PDU_SESSION_STATUS_DONE;
// rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(&ctxt, ue_context_p, 0);
rrc_gNB_generate_dedicatedRRCReconfiguration
(
&
ctxt
,
ue_context_p
);
return
(
0
)
;
rrc_gNB_generate_dedicatedRRCReconfiguration
(
&
ctxt
,
ue_context_p
,
NULL
);
return
;
}
nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP
(
&
ctxt
,
&
create_tunnel_resp
,
&
inde_list
[
0
]);
ue_context_p
->
ue_context
.
setup_pdu_sessions
+=
nb_pdusessions_tosetup
;
ue_context_p
->
ue_context
.
setup_pdu_sessions
+=
NGAP_PDUSESSION_SETUP_REQ
(
msg_p
).
nb_pdusessions_tosetup
;
// TEST
// ue_context_p->ue_context.pdusession[0].status = PDU_SESSION_STATUS_DONE;
...
...
@@ -1161,7 +1162,7 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ(
itti_send_msg_to_task
(
TASK_CU_F1
,
ctxt
.
module_id
,
message_p
);
}
return
(
0
)
;
return
;
}
}
...
...
openair2/RRC/NR/rrc_gNB_NGAP.h
View file @
460acd84
...
...
@@ -101,7 +101,7 @@ rrc_gNB_send_NGAP_PDUSESSION_SETUP_RESP(
uint8_t
xid
);
int
void
rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ
(
MessageDef
*
msg_p
,
const
char
*
msg_name
,
...
...
openair3/NGAP/ngap_gNB_handlers.c
View file @
460acd84
...
...
@@ -1347,8 +1347,13 @@ int ngap_gNB_handle_pdusession_setup_request(uint32_t assoc_id,
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
pdusession_setup_params
[
i
].
pdusession_id
=
item_p
->
pDUSessionID
;
// S-NSSAI
OCTET_STRING_TO_INT32
(
&
item_p
->
s_NSSAI
.
sST
,
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
allowed_nssai
[
i
].
sST
);
OCTET_STRING_TO_INT32
(
item_p
->
s_NSSAI
.
sD
,
*
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
allowed_nssai
[
i
].
sD
);
OCTET_STRING_TO_INT8
(
&
item_p
->
s_NSSAI
.
sST
,
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
allowed_nssai
[
i
].
sST
);
if
(
item_p
->
s_NSSAI
.
sD
!=
NULL
)
{
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
allowed_nssai
[
i
].
sD_flag
=
1
;
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
allowed_nssai
[
i
].
sD
[
0
]
=
item_p
->
s_NSSAI
.
sD
->
buf
[
0
];
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
allowed_nssai
[
i
].
sD
[
1
]
=
item_p
->
s_NSSAI
.
sD
->
buf
[
1
];
NGAP_PDUSESSION_SETUP_REQ
(
message_p
).
allowed_nssai
[
i
].
sD
[
2
]
=
item_p
->
s_NSSAI
.
sD
->
buf
[
2
];
}
// check for the NAS PDU
if
(
item_p
->
pDUSessionNAS_PDU
->
size
>
0
)
{
...
...
FANG WANG
@wf
mentioned in commit
553f1d1a
·
Feb 11, 2023
mentioned in commit
553f1d1a
mentioned in commit 553f1d1a52845911be4ba61ec2bcc5c60ad42ae7
Toggle commit list
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