Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
e5684d21
Commit
e5684d21
authored
Oct 30, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Assoc ID DU->CU
parent
843a1dc0
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
35 additions
and
15 deletions
+35
-15
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
+1
-0
openair2/F1AP/f1ap_cu_ue_context_management.c
openair2/F1AP/f1ap_cu_ue_context_management.c
+5
-0
openair2/F1AP/f1ap_ids.h
openair2/F1AP/f1ap_ids.h
+1
-0
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
+7
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+14
-12
openair2/RRC/NR/rrc_gNB_UE_context.c
openair2/RRC/NR/rrc_gNB_UE_context.c
+3
-2
openair2/RRC/NR/rrc_gNB_UE_context.h
openair2/RRC/NR/rrc_gNB_UE_context.h
+2
-1
openair2/RRC/NR/rrc_gNB_du.c
openair2/RRC/NR/rrc_gNB_du.c
+2
-0
No files found.
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
View file @
e5684d21
...
...
@@ -88,6 +88,7 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance, sctp_assoc_t
// create an ITTI message and copy SDU
message_p
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
F1AP_INITIAL_UL_RRC_MESSAGE
);
message_p
->
ittiMsgHeader
.
originInstance
=
assoc_id
;
f1ap_initial_ul_rrc_message_t
*
ul_rrc
=
&
F1AP_INITIAL_UL_RRC_MESSAGE
(
message_p
);
ul_rrc
->
gNB_DU_ue_id
=
du_ue_id
;
ul_rrc
->
nr_cellid
=
nr_cellid
;
// CU instance
...
...
openair2/F1AP/f1ap_cu_ue_context_management.c
View file @
e5684d21
...
...
@@ -639,6 +639,7 @@ int CU_handle_UE_CONTEXT_SETUP_RESPONSE(instance_t instance, sctp_assoc_t assoc_
F1AP_UEContextSetupResponseIEs_t
*
ie
;
DevAssert
(
pdu
);
msg_p
=
itti_alloc_new_message
(
TASK_DU_F1
,
0
,
F1AP_UE_CONTEXT_SETUP_RESP
);
msg_p
->
ittiMsgHeader
.
originInstance
=
assoc_id
;
f1ap_ue_context_setup_t
*
f1ap_ue_context_setup_resp
=
&
F1AP_UE_CONTEXT_SETUP_RESP
(
msg_p
);
container
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
UEContextSetupResponse
;
int
i
;
...
...
@@ -772,6 +773,7 @@ int CU_handle_UE_CONTEXT_SETUP_FAILURE(instance_t instance, sctp_assoc_t assoc_i
int
CU_handle_UE_CONTEXT_RELEASE_REQUEST
(
instance_t
instance
,
sctp_assoc_t
assoc_id
,
uint32_t
stream
,
F1AP_F1AP_PDU_t
*
pdu
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
F1AP_UE_CONTEXT_RELEASE_REQ
);
msg
->
ittiMsgHeader
.
originInstance
=
assoc_id
;
f1ap_ue_context_release_req_t
*
req
=
&
F1AP_UE_CONTEXT_RELEASE_REQ
(
msg
);
F1AP_UEContextReleaseRequest_t
*
container
;
F1AP_UEContextReleaseRequestIEs_t
*
ie
;
...
...
@@ -921,6 +923,7 @@ int CU_handle_UE_CONTEXT_RELEASE_COMPLETE(instance_t instance, sctp_assoc_t asso
F1AP_UEContextReleaseCompleteIEs_t
*
ie
;
DevAssert
(
pdu
);
MessageDef
*
msg_p
=
itti_alloc_new_message
(
TASK_DU_F1
,
0
,
F1AP_UE_CONTEXT_RELEASE_COMPLETE
);
msg_p
->
ittiMsgHeader
.
originInstance
=
assoc_id
;
f1ap_ue_context_release_complete_t
*
complete
=
&
F1AP_UE_CONTEXT_RELEASE_COMPLETE
(
msg_p
);
container
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
UEContextReleaseComplete
;
/* GNB_CU_UE_F1AP_ID */
...
...
@@ -1576,6 +1579,7 @@ int CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance, sctp_assoc_t
F1AP_UEContextModificationResponseIEs_t
*
ie
;
DevAssert
(
pdu
);
msg_p
=
itti_alloc_new_message
(
TASK_DU_F1
,
0
,
F1AP_UE_CONTEXT_MODIFICATION_RESP
);
msg_p
->
ittiMsgHeader
.
originInstance
=
assoc_id
;
f1ap_ue_context_modif_resp_t
*
f1ap_ue_context_modification_resp
=
&
F1AP_UE_CONTEXT_MODIFICATION_RESP
(
msg_p
);
container
=
&
pdu
->
choice
.
successfulOutcome
->
value
.
choice
.
UEContextModificationResponse
;
int
i
;
...
...
@@ -1704,6 +1708,7 @@ int CU_handle_UE_CONTEXT_MODIFICATION_REQUIRED(instance_t instance, sctp_assoc_t
DevAssert
(
pdu
!=
NULL
);
MessageDef
*
msg_p
=
itti_alloc_new_message
(
TASK_DU_F1
,
0
,
F1AP_UE_CONTEXT_MODIFICATION_REQUIRED
);
msg_p
->
ittiMsgHeader
.
originInstance
=
assoc_id
;
f1ap_ue_context_modif_required_t
*
required
=
&
F1AP_UE_CONTEXT_MODIFICATION_REQUIRED
(
msg_p
);
F1AP_UEContextModificationRequired_t
*
container
=
&
pdu
->
choice
.
initiatingMessage
->
value
.
choice
.
UEContextModificationRequired
;
...
...
openair2/F1AP/f1ap_ids.h
View file @
e5684d21
...
...
@@ -34,6 +34,7 @@
typedef
struct
f1_ue_data_t
{
uint32_t
secondary_ue
;
sctp_assoc_t
e1_assoc_id
;
sctp_assoc_t
du_assoc_id
;
// only used at the CU
}
f1_ue_data_t
;
void
cu_init_f1_ue_data
(
void
);
...
...
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
View file @
e5684d21
...
...
@@ -27,6 +27,7 @@
static
void
f1_setup_request_direct
(
const
f1ap_setup_req_t
*
req
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_SETUP_REQ
);
msg
->
ittiMsgHeader
.
originInstance
=
-
1
;
// means monolithic
f1ap_setup_req_t
*
f1ap_msg
=
&
F1AP_SETUP_REQ
(
msg
);
f1ap_msg
->
gNB_DU_id
=
req
->
gNB_DU_id
;
f1ap_msg
->
gNB_DU_name
=
strdup
(
req
->
gNB_DU_name
);
...
...
@@ -71,6 +72,7 @@ static void ue_context_setup_response_direct(const f1ap_ue_context_setup_t *req,
(
void
)
req
;
/* we don't need the request -- it is to set up GTP in F1 case */
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_UE_CONTEXT_SETUP_RESP
);
msg
->
ittiMsgHeader
.
originInstance
=
-
1
;
// means monolithic
f1ap_ue_context_setup_t
*
f1ap_msg
=
&
F1AP_UE_CONTEXT_SETUP_RESP
(
msg
);
/* copy all fields, but reallocate memory buffers! */
*
f1ap_msg
=
*
resp
;
...
...
@@ -100,6 +102,7 @@ static void ue_context_modification_response_direct(const f1ap_ue_context_modif_
{
(
void
)
req
;
/* we don't need the request -- it is to set up GTP in F1 case */
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_UE_CONTEXT_MODIFICATION_RESP
);
msg
->
ittiMsgHeader
.
originInstance
=
-
1
;
// means monolithic
f1ap_ue_context_modif_resp_t
*
f1ap_msg
=
&
F1AP_UE_CONTEXT_MODIFICATION_RESP
(
msg
);
f1ap_msg
->
gNB_CU_ue_id
=
resp
->
gNB_CU_ue_id
;
...
...
@@ -152,6 +155,7 @@ static void ue_context_modification_response_direct(const f1ap_ue_context_modif_
static
void
ue_context_modification_required_direct
(
const
f1ap_ue_context_modif_required_t
*
required
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_UE_CONTEXT_MODIFICATION_REQUIRED
);
msg
->
ittiMsgHeader
.
originInstance
=
-
1
;
// means monolithic
f1ap_ue_context_modif_required_t
*
f1ap_msg
=
&
F1AP_UE_CONTEXT_MODIFICATION_REQUIRED
(
msg
);
f1ap_msg
->
gNB_CU_ue_id
=
required
->
gNB_CU_ue_id
;
f1ap_msg
->
gNB_DU_ue_id
=
required
->
gNB_DU_ue_id
;
...
...
@@ -177,6 +181,7 @@ static void ue_context_modification_required_direct(const f1ap_ue_context_modif_
static
void
ue_context_release_request_direct
(
const
f1ap_ue_context_release_req_t
*
req
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_UE_CONTEXT_RELEASE_REQ
);
msg
->
ittiMsgHeader
.
originInstance
=
-
1
;
// means monolithic
f1ap_ue_context_release_req_t
*
f1ap_msg
=
&
F1AP_UE_CONTEXT_RELEASE_REQ
(
msg
);
*
f1ap_msg
=
*
req
;
itti_send_msg_to_task
(
TASK_RRC_GNB
,
0
,
msg
);
...
...
@@ -185,6 +190,7 @@ static void ue_context_release_request_direct(const f1ap_ue_context_release_req_
static
void
ue_context_release_complete_direct
(
const
f1ap_ue_context_release_complete_t
*
complete
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_UE_CONTEXT_RELEASE_COMPLETE
);
msg
->
ittiMsgHeader
.
originInstance
=
-
1
;
// means monolithic
f1ap_ue_context_release_complete_t
*
f1ap_msg
=
&
F1AP_UE_CONTEXT_RELEASE_COMPLETE
(
msg
);
*
f1ap_msg
=
*
complete
;
itti_send_msg_to_task
(
TASK_RRC_GNB
,
0
,
msg
);
...
...
@@ -193,6 +199,7 @@ static void ue_context_release_complete_direct(const f1ap_ue_context_release_com
static
void
initial_ul_rrc_message_transfer_direct
(
module_id_t
module_id
,
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
)
{
MessageDef
*
msg
=
itti_alloc_new_message
(
TASK_MAC_GNB
,
0
,
F1AP_INITIAL_UL_RRC_MESSAGE
);
msg
->
ittiMsgHeader
.
originInstance
=
-
1
;
// means monolithic
/* copy all fields, but reallocate rrc_containers! */
f1ap_initial_ul_rrc_message_t
*
f1ap_msg
=
&
F1AP_INITIAL_UL_RRC_MESSAGE
(
msg
);
*
f1ap_msg
=
*
ul_rrc
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
e5684d21
...
...
@@ -1151,7 +1151,7 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
return
0
;
}
static
void
rrc_handle_RRCSetupRequest
(
gNB_RRC_INST
*
rrc
,
const
NR_RRCSetupRequest_IEs_t
*
rrcSetupRequest
,
const
f1ap_initial_ul_rrc_message_t
*
msg
)
static
void
rrc_handle_RRCSetupRequest
(
gNB_RRC_INST
*
rrc
,
sctp_assoc_t
assoc_id
,
const
NR_RRCSetupRequest_IEs_t
*
rrcSetupRequest
,
const
f1ap_initial_ul_rrc_message_t
*
msg
)
{
rrc_gNB_ue_context_t
*
ue_context_p
=
NULL
;
if
(
NR_InitialUE_Identity_PR_randomValue
==
rrcSetupRequest
->
ue_Identity
.
present
)
{
...
...
@@ -1175,7 +1175,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
AssertFatal
(
false
,
"not implemented
\n
"
);
}
ue_context_p
=
rrc_gNB_create_ue_context
(
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
ue_context_p
=
rrc_gNB_create_ue_context
(
assoc_id
,
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
}
else
if
(
NR_InitialUE_Identity_PR_ng_5G_S_TMSI_Part1
==
rrcSetupRequest
->
ue_Identity
.
present
)
{
/* <5G-S-TMSI> = <AMF Set ID><AMF Pointer><5G-TMSI> 48-bit */
/* ng-5G-S-TMSI-Part1 BIT STRING (SIZE (39)) */
...
...
@@ -1202,7 +1202,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
}
else
{
LOG_I
(
NR_RRC
,
"UE %04x 5G-S-TMSI-Part1 doesn't exist, setting ng_5G_S_TMSI_Part1 => %ld
\n
"
,
msg
->
crnti
,
s_tmsi_part1
);
ue_context_p
=
rrc_gNB_create_ue_context
(
msg
->
crnti
,
rrc
,
s_tmsi_part1
,
msg
->
gNB_DU_ue_id
);
ue_context_p
=
rrc_gNB_create_ue_context
(
assoc_id
,
msg
->
crnti
,
rrc
,
s_tmsi_part1
,
msg
->
gNB_DU_ue_id
);
AssertFatal
(
ue_context_p
!=
NULL
,
"out of memory
\n
"
);
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
UE
->
Initialue_identity_5g_s_TMSI
.
presence
=
true
;
...
...
@@ -1214,7 +1214,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
rrcSetupRequest
->
ue_Identity
.
choice
.
randomValue
.
buf
,
rrcSetupRequest
->
ue_Identity
.
choice
.
randomValue
.
size
);
ue_context_p
=
rrc_gNB_create_ue_context
(
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
ue_context_p
=
rrc_gNB_create_ue_context
(
assoc_id
,
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
LOG_E
(
NR_RRC
,
"RRCSetupRequest without random UE identity or S-TMSI not supported, let's reject the UE %04x
\n
"
,
msg
->
crnti
);
rrc_gNB_generate_RRCReject
(
0
,
ue_context_p
);
return
;
...
...
@@ -1227,7 +1227,7 @@ static void rrc_handle_RRCSetupRequest(gNB_RRC_INST *rrc, const NR_RRCSetupReque
rrc_gNB_generate_RRCSetup
(
0
,
msg
->
crnti
,
ue_context_p
,
msg
->
du2cu_rrc_container
,
msg
->
du2cu_rrc_container_length
);
}
static
void
rrc_handle_RRCReestablishmentRequest
(
gNB_RRC_INST
*
rrc
,
const
NR_RRCReestablishmentRequest_IEs_t
*
req
,
const
f1ap_initial_ul_rrc_message_t
*
msg
)
static
void
rrc_handle_RRCReestablishmentRequest
(
gNB_RRC_INST
*
rrc
,
sctp_assoc_t
assoc_id
,
const
NR_RRCReestablishmentRequest_IEs_t
*
req
,
const
f1ap_initial_ul_rrc_message_t
*
msg
)
{
const
NR_ReestablishmentCause_t
cause
=
req
->
reestablishmentCause
;
const
long
physCellId
=
req
->
ue_Identity
.
physCellId
;
...
...
@@ -1239,7 +1239,6 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
?
"Other Failure"
:
(
cause
==
NR_ReestablishmentCause_handoverFailure
?
"Handover Failure"
:
"reconfigurationFailure"
));
sctp_assoc_t
assoc_id
=
0
;
// currently, we have only one DU
const
nr_rrc_du_container_t
*
du
=
get_du_by_assoc_id
(
rrc
,
assoc_id
);
if
(
du
==
NULL
)
{
LOG_E
(
RRC
,
"received CCCH message, but no corresponding DU found
\n
"
);
...
...
@@ -1270,7 +1269,7 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
random_value
=
random_value
&
0x7fffffffff
;
/* random value is 39 bits */
if
(
ue_context_p
==
NULL
)
{
LOG_E
(
NR_RRC
,
"NR_RRCReestablishmentRequest without UE context, fallback to RRC setup
\n
"
);
ue_context_p
=
rrc_gNB_create_ue_context
(
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
ue_context_p
=
rrc_gNB_create_ue_context
(
assoc_id
,
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
ue_context_p
->
ue_context
.
Srb
[
1
].
Active
=
1
;
rrc_gNB_generate_RRCSetup
(
0
,
msg
->
crnti
,
ue_context_p
,
msg
->
du2cu_rrc_container
,
msg
->
du2cu_rrc_container_length
);
return
;
...
...
@@ -1282,7 +1281,7 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
LOG_E
(
NR_RRC
,
"NR_RRCReestablishmentRequest c_RNTI %04lx range error, fallback to RRC setup
\n
"
,
req
->
ue_Identity
.
c_RNTI
);
ue_context_p
=
rrc_gNB_create_ue_context
(
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
ue_context_p
=
rrc_gNB_create_ue_context
(
assoc_id
,
msg
->
crnti
,
rrc
,
random_value
,
msg
->
gNB_DU_ue_id
);
ue_context_p
->
ue_context
.
Srb
[
1
].
Active
=
1
;
rrc_gNB_generate_RRCSetup
(
0
,
msg
->
crnti
,
ue_context_p
,
msg
->
du2cu_rrc_container
,
msg
->
du2cu_rrc_container_length
);
return
;
...
...
@@ -1293,7 +1292,7 @@ static void rrc_handle_RRCReestablishmentRequest(gNB_RRC_INST *rrc, const NR_RRC
// update with new RNTI, and update secondary UE association
UE
->
rnti
=
msg
->
crnti
;
cu_remove_f1_ue_data
(
UE
->
rrc_ue_id
);
f1_ue_data_t
ue_data
=
{.
secondary_ue
=
msg
->
gNB_DU_ue_id
};
f1_ue_data_t
ue_data
=
{.
secondary_ue
=
msg
->
gNB_DU_ue_id
,
.
du_assoc_id
=
assoc_id
};
cu_add_f1_ue_data
(
UE
->
rrc_ue_id
,
&
ue_data
);
UE
->
reestablishment_cause
=
cause
;
...
...
@@ -1733,8 +1732,10 @@ int rrc_gNB_decode_dcch(const protocol_ctxt_t *const ctxt_pP,
return
0
;
}
void
rrc_gNB_process_initial_ul_rrc_message
(
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
)
void
rrc_gNB_process_initial_ul_rrc_message
(
sctp_assoc_t
assoc_id
,
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
)
{
AssertFatal
(
assoc_id
!=
0
,
"illegal assoc_id == 0: should be -1 (monolithic) or >0 (split)
\n
"
);
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
0
];
LOG_I
(
NR_RRC
,
"Decoding CCCH: RNTI %04x, payload_size %d
\n
"
,
ul_rrc
->
crnti
,
ul_rrc
->
rrc_container_length
);
NR_UL_CCCH_Message_t
*
ul_ccch_msg
=
NULL
;
...
...
@@ -1758,7 +1759,7 @@ void rrc_gNB_process_initial_ul_rrc_message(const f1ap_initial_ul_rrc_message_t
case
NR_UL_CCCH_MessageType__c1_PR_rrcSetupRequest
:
LOG_D
(
NR_RRC
,
"Received RRCSetupRequest on UL-CCCH-Message (UE rnti %04x)
\n
"
,
ul_rrc
->
crnti
);
rrc_handle_RRCSetupRequest
(
rrc
,
&
ul_ccch_msg
->
message
.
choice
.
c1
->
choice
.
rrcSetupRequest
->
rrcSetupRequest
,
ul_rrc
);
rrc_handle_RRCSetupRequest
(
rrc
,
assoc_id
,
&
ul_ccch_msg
->
message
.
choice
.
c1
->
choice
.
rrcSetupRequest
->
rrcSetupRequest
,
ul_rrc
);
break
;
case
NR_UL_CCCH_MessageType__c1_PR_rrcResumeRequest
:
...
...
@@ -1769,6 +1770,7 @@ void rrc_gNB_process_initial_ul_rrc_message(const f1ap_initial_ul_rrc_message_t
LOG_D
(
NR_RRC
,
"Received RRCReestablishmentRequest on UL-CCCH-Message (UE RNTI %04x)
\n
"
,
ul_rrc
->
crnti
);
rrc_handle_RRCReestablishmentRequest
(
rrc
,
assoc_id
,
&
ul_ccch_msg
->
message
.
choice
.
c1
->
choice
.
rrcReestablishmentRequest
->
rrcReestablishmentRequest
,
ul_rrc
);
}
break
;
...
...
@@ -2242,7 +2244,7 @@ void *rrc_gnb_task(void *args_p) {
case
F1AP_INITIAL_UL_RRC_MESSAGE
:
AssertFatal
(
NODE_IS_CU
(
RC
.
nrrrc
[
instance
]
->
node_type
)
||
NODE_IS_MONOLITHIC
(
RC
.
nrrrc
[
instance
]
->
node_type
),
"should not receive F1AP_INITIAL_UL_RRC_MESSAGE, need call by CU!
\n
"
);
rrc_gNB_process_initial_ul_rrc_message
(
&
F1AP_INITIAL_UL_RRC_MESSAGE
(
msg_p
));
rrc_gNB_process_initial_ul_rrc_message
(
msg_p
->
ittiMsgHeader
.
originInstance
,
&
F1AP_INITIAL_UL_RRC_MESSAGE
(
msg_p
));
break
;
/* Messages from PDCP */
...
...
openair2/RRC/NR/rrc_gNB_UE_context.c
View file @
e5684d21
...
...
@@ -157,7 +157,8 @@ rrc_gNB_ue_context_t *rrc_gNB_ue_context_5g_s_tmsi_exist(gNB_RRC_INST *rrc_insta
//-----------------------------------------------------------------------------
// return a new ue context structure if ue_identityP, rnti not found in collection
rrc_gNB_ue_context_t
*
rrc_gNB_create_ue_context
(
rnti_t
rnti
,
rrc_gNB_ue_context_t
*
rrc_gNB_create_ue_context
(
sctp_assoc_t
assoc_id
,
rnti_t
rnti
,
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
ue_identityP
,
uint32_t
du_ue_id
)
...
...
@@ -170,7 +171,7 @@ rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(rnti_t rnti,
gNB_RRC_UE_t
*
ue
=
&
ue_context_p
->
ue_context
;
ue
->
rnti
=
rnti
;
ue
->
random_ue_identity
=
ue_identityP
;
f1_ue_data_t
ue_data
=
{.
secondary_ue
=
du_ue_id
};
f1_ue_data_t
ue_data
=
{.
secondary_ue
=
du_ue_id
,
.
du_assoc_id
=
assoc_id
};
AssertFatal
(
!
cu_exists_f1_ue_data
(
ue
->
rrc_ue_id
),
"UE F1 Context for ID %d already exists, logic bug
\n
"
,
ue
->
rrc_ue_id
);
...
...
openair2/RRC/NR/rrc_gNB_UE_context.h
View file @
e5684d21
...
...
@@ -50,7 +50,8 @@ void rrc_gNB_remove_ue_context(gNB_RRC_INST* rrc_instance_pP, rrc_gNB_ue_context
rrc_gNB_ue_context_t
*
rrc_gNB_ue_context_random_exist
(
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
ue_identityP
);
rrc_gNB_ue_context_t
*
rrc_gNB_ue_context_5g_s_tmsi_exist
(
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
s_TMSI
);
rrc_gNB_ue_context_t
*
rrc_gNB_create_ue_context
(
rnti_t
rnti
,
rrc_gNB_ue_context_t
*
rrc_gNB_create_ue_context
(
sctp_assoc_t
assoc_id
,
rnti_t
rnti
,
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
ue_identityP
,
uint32_t
du_ue_id
);
...
...
openair2/RRC/NR/rrc_gNB_du.c
View file @
e5684d21
...
...
@@ -37,6 +37,7 @@ static bool rrc_gNB_plmn_matches(const gNB_RRC_INST *rrc, const f1ap_served_cell
void
rrc_gNB_process_f1_setup_req
(
f1ap_setup_req_t
*
req
,
sctp_assoc_t
assoc_id
)
{
AssertFatal
(
assoc_id
!=
0
,
"illegal assoc_id == 0: should be -1 (monolithic) or >0 (split)
\n
"
);
gNB_RRC_INST
*
rrc
=
RC
.
nrrrc
[
0
];
DevAssert
(
rrc
);
...
...
@@ -164,6 +165,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
void
rrc_CU_process_f1_lost_connection
(
gNB_RRC_INST
*
rrc
,
f1ap_lost_connection_t
*
lc
,
sctp_assoc_t
assoc_id
)
{
AssertFatal
(
assoc_id
!=
0
,
"illegal assoc_id == 0: should be -1 (monolithic) or >0 (split)
\n
"
);
AssertFatal
(
rrc
->
du
!=
NULL
,
"no DU connected, cannot received F1 lost connection
\n
"
);
AssertFatal
(
rrc
->
du
->
assoc_id
==
assoc_id
,
"previously connected DU (%d) does not match DU for which connection has been lost (%d)
\n
"
,
...
...
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