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
0a0f6b79
Commit
0a0f6b79
authored
May 26, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial UL RRC Message: manage DU UE ID at CU
parent
3e0f0770
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
82 additions
and
82 deletions
+82
-82
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
+17
-40
openair2/F1AP/f1ap_du_rrc_message_transfer.c
openair2/F1AP/f1ap_du_rrc_message_transfer.c
+9
-16
openair2/F1AP/f1ap_du_rrc_message_transfer.h
openair2/F1AP/f1ap_du_rrc_message_transfer.h
+1
-8
openair2/F1AP/f1ap_du_task.c
openair2/F1AP/f1ap_du_task.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+1
-0
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+1
-0
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+26
-12
openair2/RRC/NR/rrc_gNB_UE_context.c
openair2/RRC/NR/rrc_gNB_UE_context.c
+22
-4
openair2/RRC/NR/rrc_gNB_UE_context.h
openair2/RRC/NR/rrc_gNB_UE_context.h
+4
-1
No files found.
openair2/F1AP/f1ap_cu_rrc_message_transfer.c
View file @
0a0f6b79
...
...
@@ -53,9 +53,6 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
MessageDef
*
message_p
;
F1AP_InitialULRRCMessageTransfer_t
*
container
;
F1AP_InitialULRRCMessageTransferIEs_t
*
ie
;
rnti_t
rnti
;
sdu_size_t
ccch_sdu_len
;
int
CC_id
=
0
;
DevAssert
(
pdu
!=
NULL
);
if
(
stream
!=
0
)
{
...
...
@@ -68,6 +65,8 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
/* GNB_DU_UE_F1AP_ID */
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_InitialULRRCMessageTransferIEs_t
,
ie
,
container
,
F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID
,
true
);
uint32_t
du_ue_id
=
ie
->
value
.
choice
.
GNB_DU_UE_F1AP_ID
;
/* NRCGI
* Fixme: process NRCGI
*/
...
...
@@ -78,7 +77,7 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
/* RNTI */
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_InitialULRRCMessageTransferIEs_t
,
ie
,
container
,
F1AP_ProtocolIE_ID_id_C_RNTI
,
true
);
rnti
=
ie
->
value
.
choice
.
C_RNTI
;
rnti
_t
rnti
=
ie
->
value
.
choice
.
C_RNTI
;
F1AP_InitialULRRCMessageTransferIEs_t
*
rrccont
;
F1AP_FIND_PROTOCOLIE_BY_ID
(
F1AP_InitialULRRCMessageTransferIEs_t
,
rrccont
,
container
,
F1AP_ProtocolIE_ID_id_RRCContainer
,
true
);
...
...
@@ -96,43 +95,21 @@ int CU_handle_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instance,
}
// create an ITTI message and copy SDU
if
(
f1ap_req
(
true
,
instance
)
->
cell_type
==
CELL_MACRO_GNB
)
{
message_p
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
F1AP_INITIAL_UL_RRC_MESSAGE
);
f1ap_initial_ul_rrc_message_t
*
ul_rrc
=
&
F1AP_INITIAL_UL_RRC_MESSAGE
(
message_p
);
ul_rrc
->
nr_cellid
=
nr_cellid
;
// CU instance
ul_rrc
->
crnti
=
rnti
;
ul_rrc
->
rrc_container_length
=
rrccont
->
value
.
choice
.
RRCContainer
.
size
;
ul_rrc
->
rrc_container
=
malloc
(
ul_rrc
->
rrc_container_length
);
memcpy
(
ul_rrc
->
rrc_container
,
rrccont
->
value
.
choice
.
RRCContainer
.
buf
,
ul_rrc
->
rrc_container_length
);
AssertFatal
(
du2cu
!=
NULL
,
"no masterCellGroup in initial UL RRC message
\n
"
);
ul_rrc
->
du2cu_rrc_container_length
=
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
size
;
ul_rrc
->
du2cu_rrc_container
=
malloc
(
ul_rrc
->
du2cu_rrc_container_length
);
memcpy
(
ul_rrc
->
du2cu_rrc_container
,
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
buf
,
ul_rrc
->
du2cu_rrc_container_length
);
itti_send_msg_to_task
(
TASK_RRC_GNB
,
instance
,
message_p
);
}
else
{
message_p
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
RRC_MAC_CCCH_DATA_IND
);
memset
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
0
,
CCCH_SDU_SIZE
);
ccch_sdu_len
=
rrccont
->
value
.
choice
.
RRCContainer
.
size
;
memcpy
(
RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu
,
rrccont
->
value
.
choice
.
RRCContainer
.
buf
,
ccch_sdu_len
);
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
frame
=
0
;
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
slot
=
0
;
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
sdu_size
=
ccch_sdu_len
;
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
nr_cellid
=
nr_cellid
;
// CU instance
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
rnti
=
rnti
;
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
CC_id
=
CC_id
;
if
(
du2cu
)
{
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
du_to_cu_rrc_container
=
malloc
(
sizeof
(
OCTET_STRING_t
));
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
du_to_cu_rrc_container
->
size
=
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
size
;
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
du_to_cu_rrc_container
->
buf
=
malloc
(
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
size
);
memcpy
(
NR_RRC_MAC_CCCH_DATA_IND
(
message_p
).
du_to_cu_rrc_container
->
buf
,
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
buf
,
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
size
);
}
itti_send_msg_to_task
(
TASK_RRC_ENB
,
instance
,
message_p
);
}
AssertFatal
(
f1ap_req
(
true
,
instance
)
->
cell_type
==
CELL_MACRO_GNB
,
"illegal cell type %d
\n
"
,
f1ap_req
(
true
,
instance
)
->
cell_type
);
message_p
=
itti_alloc_new_message
(
TASK_CU_F1
,
0
,
F1AP_INITIAL_UL_RRC_MESSAGE
);
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
ul_rrc
->
crnti
=
rnti
;
ul_rrc
->
rrc_container_length
=
rrccont
->
value
.
choice
.
RRCContainer
.
size
;
ul_rrc
->
rrc_container
=
malloc
(
ul_rrc
->
rrc_container_length
);
memcpy
(
ul_rrc
->
rrc_container
,
rrccont
->
value
.
choice
.
RRCContainer
.
buf
,
ul_rrc
->
rrc_container_length
);
AssertFatal
(
du2cu
!=
NULL
,
"no masterCellGroup in initial UL RRC message
\n
"
);
ul_rrc
->
du2cu_rrc_container_length
=
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
size
;
ul_rrc
->
du2cu_rrc_container
=
malloc
(
ul_rrc
->
du2cu_rrc_container_length
);
memcpy
(
ul_rrc
->
du2cu_rrc_container
,
du2cu
->
value
.
choice
.
DUtoCURRCContainer
.
buf
,
ul_rrc
->
du2cu_rrc_container_length
);
itti_send_msg_to_task
(
TASK_RRC_GNB
,
instance
,
message_p
);
//getCxt(true,ITTI_MSG_DESTINATION_ID(message_p))->f1ap_ue[f1ap_uid].du_ue_f1ap_id = du_ue_f1ap_id;
return
0
;
}
...
...
openair2/F1AP/f1ap_du_rrc_message_transfer.c
View file @
0a0f6b79
...
...
@@ -145,19 +145,13 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
}
/* UL RRC Message Transfer */
int
DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER
(
instance_t
instanceP
,
int
CC_idP
,
int
UE_id
,
rnti_t
rntiP
,
const
uint8_t
*
sduP
,
sdu_size_t
sdu_lenP
,
const
uint8_t
*
sdu2P
,
sdu_size_t
sdu2_lenP
)
{
int
DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER
(
instance_t
instanceP
,
const
f1ap_initial_ul_rrc_message_t
*
msg
)
{
F1AP_F1AP_PDU_t
pdu
=
{
0
};
F1AP_InitialULRRCMessageTransfer_t
*
out
;
uint8_t
*
buffer
=
NULL
;
uint32_t
len
=
0
;
int
f1ap_uid
=
f1ap_add_ue
(
DUtype
,
instanceP
,
rntiP
);
int
f1ap_uid
=
f1ap_add_ue
(
DUtype
,
instanceP
,
msg
->
crnti
);
if
(
f1ap_uid
<
0
)
{
LOG_E
(
F1AP
,
"Failed to add UE
\n
"
);
...
...
@@ -178,7 +172,7 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP,
ie1
->
id
=
F1AP_ProtocolIE_ID_id_gNB_DU_UE_F1AP_ID
;
ie1
->
criticality
=
F1AP_Criticality_reject
;
ie1
->
value
.
present
=
F1AP_InitialULRRCMessageTransferIEs__value_PR_GNB_DU_UE_F1AP_ID
;
ie1
->
value
.
choice
.
GNB_DU_UE_F1AP_ID
=
getCxt
(
DUtype
,
instanceP
)
->
f1ap_ue
[
f1ap_uid
].
du_ue_f1ap
_id
;
ie1
->
value
.
choice
.
GNB_DU_UE_F1AP_ID
=
msg
->
gNB_DU_ue
_id
;
/* mandatory */
/* c2. NRCGI */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
F1AP_InitialULRRCMessageTransferIEs_t
,
ie2
);
...
...
@@ -193,25 +187,25 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP,
ie3
->
id
=
F1AP_ProtocolIE_ID_id_C_RNTI
;
ie3
->
criticality
=
F1AP_Criticality_reject
;
ie3
->
value
.
present
=
F1AP_InitialULRRCMessageTransferIEs__value_PR_C_RNTI
;
ie3
->
value
.
choice
.
C_RNTI
=
rntiP
;
ie3
->
value
.
choice
.
C_RNTI
=
msg
->
crnti
;
/* mandatory */
/* c4. RRCContainer */
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
F1AP_InitialULRRCMessageTransferIEs_t
,
ie4
);
ie4
->
id
=
F1AP_ProtocolIE_ID_id_RRCContainer
;
ie4
->
criticality
=
F1AP_Criticality_reject
;
ie4
->
value
.
present
=
F1AP_InitialULRRCMessageTransferIEs__value_PR_RRCContainer
;
OCTET_STRING_fromBuf
(
&
ie4
->
value
.
choice
.
RRCContainer
,
(
const
char
*
)
sduP
,
sdu_lenP
);
OCTET_STRING_fromBuf
(
&
ie4
->
value
.
choice
.
RRCContainer
,
(
const
char
*
)
msg
->
rrc_container
,
msg
->
rrc_container_length
);
/* optional */
/* c5. DUtoCURRCContainer */
if
(
sdu2P
)
{
if
(
msg
->
du2cu_rrc_container
!=
NULL
)
{
asn1cSequenceAdd
(
out
->
protocolIEs
.
list
,
F1AP_InitialULRRCMessageTransferIEs_t
,
ie5
);
ie5
->
id
=
F1AP_ProtocolIE_ID_id_DUtoCURRCContainer
;
ie5
->
criticality
=
F1AP_Criticality_reject
;
ie5
->
value
.
present
=
F1AP_InitialULRRCMessageTransferIEs__value_PR_DUtoCURRCContainer
;
OCTET_STRING_fromBuf
(
&
ie5
->
value
.
choice
.
DUtoCURRCContainer
,
(
const
char
*
)
sdu2P
,
sdu2_lenP
);
(
const
char
*
)
msg
->
du2cu_rrc_container
,
msg
->
du2cu_rrc_container_length
);
}
/* mandatory */
/* c6. Transaction ID (integer value) */
...
...
@@ -231,7 +225,6 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(instance_t instanceP,
return
0
;
}
int
DU_send_UL_NR_RRC_MESSAGE_TRANSFER
(
instance_t
instance
,
const
f1ap_ul_rrc_message_t
*
msg
)
{
const
rnti_t
rnti
=
msg
->
rnti
;
...
...
openair2/F1AP/f1ap_du_rrc_message_transfer.h
View file @
0a0f6b79
...
...
@@ -43,13 +43,6 @@ int DU_handle_DL_RRC_MESSAGE_TRANSFER(instance_t instance,
int
DU_send_UL_NR_RRC_MESSAGE_TRANSFER
(
instance_t
instance
,
const
f1ap_ul_rrc_message_t
*
msg
);
int
DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER
(
instance_t
instanceP
,
int
CC_idP
,
int
UE_id
,
rnti_t
rntiP
,
const
uint8_t
*
sduP
,
sdu_size_t
sdu_lenP
,
const
uint8_t
*
sdu2P
,
sdu_size_t
sdu2_lenP
);
int
DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER
(
instance_t
instanceP
,
const
f1ap_initial_ul_rrc_message_t
*
msg
);
#endif
/* F1AP_DU_RRC_MESSAGE_TRANSFER_H_ */
openair2/F1AP/f1ap_du_task.c
View file @
0a0f6b79
...
...
@@ -145,7 +145,7 @@ void *F1AP_DU_task(void *arg) {
case
F1AP_INITIAL_UL_RRC_MESSAGE
:
// from rrc
{
f1ap_initial_ul_rrc_message_t
*
msgRrc
=
&
F1AP_INITIAL_UL_RRC_MESSAGE
(
msg
);
DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER
(
0
,
0
,
0
,
msgRrc
->
crnti
,
msgRrc
->
rrc_container
,
msgRrc
->
rrc_container_length
,
msgRrc
->
du2cu_rrc_container
,
msgRrc
->
du2cu_rrc_container_length
);
DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER
(
myInstance
,
msgRrc
);
}
break
;
case
F1AP_UL_RRC_MESSAGE
:
// to rrc
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
0a0f6b79
...
...
@@ -2907,6 +2907,7 @@ void send_initial_ul_rrc_message(gNB_MAC_INST *mac, int rnti, const uint8_t *sdu
const
f1ap_initial_ul_rrc_message_t
ul_rrc_msg
=
{
/* TODO: add mcc, mnc, cell_id, ..., is not available at MAC yet */
.
gNB_DU_ue_id
=
rnti
,
.
crnti
=
rnti
,
.
rrc_container
=
(
uint8_t
*
)
sdu
,
.
rrc_container_length
=
sdu_len
,
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
0a0f6b79
...
...
@@ -271,6 +271,7 @@ typedef struct gNB_RRC_UE_s {
e_NR_IntegrityProtAlgorithm
integrity_algorithm
;
NR_UE_STATE_t
StatusRrc
;
uint32_t
cu_ue_id
;
rnti_t
rnti
;
uint64_t
random_ue_identity
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
0a0f6b79
...
...
@@ -489,7 +489,11 @@ static int rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(module_id_t m
rrc_gNB_ue_context_t
*
ue_context_pP
=
NULL
;
gNB_RRC_INST
*
rrc_instance_p
=
RC
.
nrrrc
[
module_id
];
ue_context_pP
=
rrc_gNB_create_ue_context
(
rnti
,
rrc_instance_p
,
0
);
AssertFatal
(
!
NODE_IS_CU
(
rrc_instance_p
->
node_type
),
"Not functional in F1-split: no DU UE ID available
\n
"
);
/* for creating a UE context, we need the DU ID to be able to indicate the
* DU. This is not yet implemented for Reestablishment. We know that in
* monolithic, the DU UE ID is the RNTI, so use that for the moment */
ue_context_pP
=
rrc_gNB_create_ue_context
(
rnti
,
rrc_instance_p
,
0
,
rnti
);
gNB_RRC_UE_t
*
ue_p
=
&
ue_context_pP
->
ue_context
;
unsigned
char
buf
[
1024
];
...
...
@@ -1468,7 +1472,7 @@ int nr_rrc_reconfiguration_req(rrc_gNB_ue_context_t *const ue_context_pP
}
/*------------------------------------------------------------------------------*/
static
int
nr_rrc_gNB_decode_ccch
(
module_id_t
module_id
,
rnti_t
rnti
,
const
uint8_t
*
buffer
,
int
buffer_length
,
const
uint8_t
*
du_to_cu_rrc_container
,
int
du_to_cu_rrc_container_len
)
static
int
nr_rrc_gNB_decode_ccch
(
module_id_t
module_id
,
const
f1ap_initial_ul_rrc_message_t
*
msg
)
{
module_id_t
Idx
;
asn_dec_rval_t
dec_rval
;
...
...
@@ -1476,9 +1480,11 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
gNB_RRC_INST
*
gnb_rrc_inst
=
RC
.
nrrrc
[
module_id
];
NR_RRCSetupRequest_IEs_t
*
rrcSetupRequest
=
NULL
;
NR_RRCReestablishmentRequest_IEs_t
rrcReestablishmentRequest
;
rnti_t
rnti
=
msg
->
crnti
;
LOG_I
(
NR_RRC
,
"Decoding CCCH: RNTI %04x, payload_size %d
\n
"
,
rnti
,
buffer_length
);
dec_rval
=
uper_decode
(
NULL
,
&
asn_DEF_NR_UL_CCCH_Message
,
(
void
**
)
&
ul_ccch_msg
,
buffer
,
buffer_length
,
0
,
0
);
LOG_I
(
NR_RRC
,
"Decoding CCCH: RNTI %04x, payload_size %d
\n
"
,
rnti
,
msg
->
rrc_container_length
);
dec_rval
=
uper_decode
(
NULL
,
&
asn_DEF_NR_UL_CCCH_Message
,
(
void
**
)
&
ul_ccch_msg
,
msg
->
rrc_container
,
msg
->
rrc_container_length
,
0
,
0
);
if
(
dec_rval
.
code
!=
RC_OK
||
dec_rval
.
consumed
==
0
)
{
LOG_E
(
NR_RRC
,
" FATAL Error in receiving CCCH
\n
"
);
...
...
@@ -1517,7 +1523,7 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
AssertFatal
(
false
,
"not implemented
\n
"
);
}
ue_context_p
=
rrc_gNB_create_ue_context
(
rnti
,
gnb_rrc_inst
,
random_value
);
ue_context_p
=
rrc_gNB_create_ue_context
(
rnti
,
gnb_rrc_inst
,
random_value
,
msg
->
gNB_DU_ue_id
);
}
else
if
(
NR_InitialUE_Identity_PR_ng_5G_S_TMSI_Part1
==
rrcSetupRequest
->
ue_Identity
.
present
)
{
/* TODO */
/* <5G-S-TMSI> = <AMF Set ID><AMF Pointer><5G-TMSI> 48-bit */
...
...
@@ -1549,7 +1555,7 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
}
else
{
LOG_I
(
NR_RRC
,
"UE %04x 5G-S-TMSI-Part1 doesn't exist, setting ng_5G_S_TMSI_Part1 => %ld
\n
"
,
rnti
,
s_tmsi_part1
);
ue_context_p
=
rrc_gNB_create_ue_context
(
rnti
,
gnb_rrc_inst
,
s_tmsi_part1
);
ue_context_p
=
rrc_gNB_create_ue_context
(
rnti
,
gnb_rrc_inst
,
s_tmsi_part1
,
msg
->
gNB_DU_ue_id
);
if
(
ue_context_p
==
NULL
)
{
LOG_E
(
NR_RRC
,
"rrc_gNB_get_next_free_ue_context returned NULL
\n
"
);
return
-
1
;
...
...
@@ -1563,7 +1569,7 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
uint64_t
random_value
=
0
;
memcpy
(((
uint8_t
*
)
&
random_value
)
+
3
,
rrcSetupRequest
->
ue_Identity
.
choice
.
randomValue
.
buf
,
rrcSetupRequest
->
ue_Identity
.
choice
.
randomValue
.
size
);
ue_context_p
=
rrc_gNB_create_ue_context
(
rnti
,
gnb_rrc_inst
,
random_value
);
ue_context_p
=
rrc_gNB_create_ue_context
(
rnti
,
gnb_rrc_inst
,
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
"
,
rnti
);
rrc_gNB_generate_RRCReject
(
module_id
,
ue_context_p
);
break
;
...
...
@@ -1575,8 +1581,8 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
rrc_gNB_generate_RRCSetup
(
module_id
,
rnti
,
rrc_gNB_get_ue_context_by_rnti
(
gnb_rrc_inst
,
rnti
),
du_to_
cu_rrc_container
,
du_to_cu_rrc_container_len
);
msg
->
du2
cu_rrc_container
,
msg
->
du2cu_rrc_container_length
);
}
break
;
...
...
@@ -1585,7 +1591,11 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
break
;
case
NR_UL_CCCH_MessageType__c1_PR_rrcReestablishmentRequest
:
{
LOG_DUMPMSG
(
NR_RRC
,
DEBUG_RRC
,
(
char
*
)(
buffer
),
buffer_length
,
"[MSG] RRC Reestablishment Request
\n
"
);
LOG_DUMPMSG
(
NR_RRC
,
DEBUG_RRC
,
(
char
*
)(
msg
->
rrc_container
),
msg
->
rrc_container_length
,
"[MSG] RRC Reestablishment Request
\n
"
);
rrcReestablishmentRequest
=
ul_ccch_msg
->
message
.
choice
.
c1
->
choice
.
rrcReestablishmentRequest
->
rrcReestablishmentRequest
;
const
NR_ReestablishmentCause_t
cause
=
rrcReestablishmentRequest
.
reestablishmentCause
;
const
long
physCellId
=
rrcReestablishmentRequest
.
ue_Identity
.
physCellId
;
...
...
@@ -1662,7 +1672,11 @@ static int nr_rrc_gNB_decode_ccch(module_id_t module_id, rnti_t rnti, const uint
// SRB2: set it to go through SRB1 with id 1 (DCCH)
UE
->
Srb
[
2
].
Active
=
1
;
protocol_ctxt_t
ctxt
=
{.
rntiMaybeUEid
=
rnti
,
.
module_id
=
module_id
,
.
instance
=
module_id
,
.
enb_flag
=
1
,
.
eNB_index
=
module_id
};
rrc_gNB_generate_RRCReestablishment
(
&
ctxt
,
ue_context_p
,
du_to_cu_rrc_container
,
gnb_rrc_inst
->
carrier
.
servingcellconfigcommon
,
0
);
rrc_gNB_generate_RRCReestablishment
(
&
ctxt
,
ue_context_p
,
msg
->
du2cu_rrc_container
,
gnb_rrc_inst
->
carrier
.
servingcellconfigcommon
,
0
);
LOG_I
(
NR_RRC
,
"CALLING RLC CONFIG SRB1 (rbid %d)
\n
"
,
Idx
);
}
break
;
...
...
@@ -2224,7 +2238,7 @@ void rrc_gNB_process_initial_ul_rrc_message(const f1ap_initial_ul_rrc_message_t
i
=
0
;
LOG_W
(
RRC
,
"initial UL RRC message nr_cellid %ld does not match RRC's %ld
\n
"
,
ul_rrc
->
nr_cellid
,
RC
.
nrrrc
[
0
]
->
nr_cellid
);
}
nr_rrc_gNB_decode_ccch
(
i
,
ul_rrc
->
crnti
,
ul_rrc
->
rrc_container
,
ul_rrc
->
rrc_container_length
,
ul_rrc
->
du2cu_rrc_container
,
ul_rrc
->
du2cu_rrc_container_length
);
nr_rrc_gNB_decode_ccch
(
i
,
ul_rrc
);
if
(
ul_rrc
->
rrc_container
)
free
(
ul_rrc
->
rrc_container
);
...
...
openair2/RRC/NR/rrc_gNB_UE_context.c
View file @
0a0f6b79
...
...
@@ -35,6 +35,7 @@
#include "common/utils/LOG/log.h"
#include "rrc_gNB_UE_context.h"
#include "openair2/F1AP/f1ap_ids.h"
//------------------------------------------------------------------------------
...
...
@@ -121,6 +122,7 @@ void rrc_gNB_remove_ue_context(gNB_RRC_INST *rrc_instance_pP, rrc_gNB_ue_context
RB_REMOVE
(
rrc_nr_ue_tree_s
,
&
rrc_instance_pP
->
rrc_ue_head
,
ue_context_pP
);
uid_linear_allocator_free
(
&
rrc_instance_pP
->
uid_allocator
,
ue_context_pP
->
ue_context
.
rrc_ue_id
-
1
);
cu_remove_f1_ue_data
(
ue_context_pP
->
ue_context
.
cu_ue_id
);
rrc_gNB_free_mem_ue_context
(
ue_context_pP
);
LOG_I
(
NR_RRC
,
"Removed UE context
\n
"
);
}
...
...
@@ -165,7 +167,10 @@ void rrc_gNB_update_ue_context_rnti(rnti_t rnti, gNB_RRC_INST *rrc_instance_pP,
}
//-----------------------------------------------------------------------------
// 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
,
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
ue_identityP
)
rrc_gNB_ue_context_t
*
rrc_gNB_create_ue_context
(
rnti_t
rnti
,
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
ue_identityP
,
uint32_t
du_ue_id
)
//-----------------------------------------------------------------------------
{
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
rrc_instance_pP
,
rnti
);
...
...
@@ -179,9 +184,22 @@ rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(rnti_t rnti, gNB_RRC_INST *rrc_i
if
(
ue_context_p
==
NULL
)
return
NULL
;
ue_context_p
->
ue_context
.
rnti
=
rnti
;
ue_context_p
->
ue_context
.
random_ue_identity
=
ue_identityP
;
gNB_RRC_UE_t
*
ue
=
&
ue_context_p
->
ue_context
;
ue
->
cu_ue_id
=
rnti
;
ue
->
rnti
=
rnti
;
ue
->
random_ue_identity
=
ue_identityP
;
f1_ue_data_t
ue_data
=
{.
secondary_ue
=
du_ue_id
};
AssertFatal
(
!
cu_exists_f1_ue_data
(
ue
->
cu_ue_id
),
"UE F1 Context for ID %d already exists, logic bug
\n
"
,
ue
->
cu_ue_id
);
cu_add_f1_ue_data
(
ue
->
cu_ue_id
,
&
ue_data
);
RB_INSERT
(
rrc_nr_ue_tree_s
,
&
rrc_instance_pP
->
rrc_ue_head
,
ue_context_p
);
LOG_W
(
NR_RRC
,
" Created new UE context rnti: %04x, random ue id %lx, RRC ue id %u
\n
"
,
rnti
,
ue_identityP
,
ue_context_p
->
ue_context
.
rrc_ue_id
);
LOG_I
(
NR_RRC
,
"Created new UE context: CU UE ID %u DU UE ID %u (rnti: %04x, random ue id %lx)
\n
"
,
ue
->
cu_ue_id
,
du_ue_id
,
ue
->
rnti
,
ue
->
random_ue_identity
);
return
ue_context_p
;
}
openair2/RRC/NR/rrc_gNB_UE_context.h
View file @
0a0f6b79
...
...
@@ -51,6 +51,9 @@ rrc_gNB_ue_context_t* rrc_gNB_ue_context_random_exist(gNB_RRC_INST* rrc_instance
rrc_gNB_ue_context_t
*
rrc_gNB_ue_context_5g_s_tmsi_exist
(
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
s_TMSI
);
void
rrc_gNB_update_ue_context_rnti
(
rnti_t
rnti
,
gNB_RRC_INST
*
rrc_instance_pP
,
uint32_t
gNB_ue_ngap_id
);
rrc_gNB_ue_context_t
*
rrc_gNB_create_ue_context
(
rnti_t
rnti
,
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
ue_identityP
);
rrc_gNB_ue_context_t
*
rrc_gNB_create_ue_context
(
rnti_t
rnti
,
gNB_RRC_INST
*
rrc_instance_pP
,
const
uint64_t
ue_identityP
,
uint32_t
du_ue_id
);
#endif
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