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
5c42004e
Commit
5c42004e
authored
Jul 04, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RRC: switch to NGAP UE ID as CU UE ID
parent
c832b7af
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
92 additions
and
67 deletions
+92
-67
openair2/E1AP/e1ap_api.c
openair2/E1AP/e1ap_api.c
+1
-1
openair2/F1AP/f1ap_cu_ue_context_management.c
openair2/F1AP/f1ap_cu_ue_context_management.c
+2
-2
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
+1
-1
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+1
-1
openair2/RRC/NR/cucp_cuup_direct.c
openair2/RRC/NR/cucp_cuup_direct.c
+5
-5
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
+57
-35
openair2/RRC/NR/rrc_gNB_GTPV1U.c
openair2/RRC/NR/rrc_gNB_GTPV1U.c
+4
-2
openair2/RRC/NR/rrc_gNB_NGAP.c
openair2/RRC/NR/rrc_gNB_NGAP.c
+6
-6
openair2/RRC/NR/rrc_gNB_UE_context.c
openair2/RRC/NR/rrc_gNB_UE_context.c
+7
-6
openair2/RRC/NR/rrc_gNB_nsa.c
openair2/RRC/NR/rrc_gNB_nsa.c
+8
-7
No files found.
openair2/E1AP/e1ap_api.c
View file @
5c42004e
...
...
@@ -109,7 +109,7 @@ static int drb_config_N3gtpu_create(e1ap_bearer_setup_req_t * const req,
fill_DRB_configList_e1
(
&
DRB_configList
,
pdu
);
}
create_tunnel_req
.
num_tunnels
=
req
->
numPDUSessions
;
create_tunnel_req
.
ue_id
=
(
req
->
gNB_cu_cp_ue_id
&
0xFFFF
)
;
create_tunnel_req
.
ue_id
=
req
->
gNB_cu_cp_ue_id
;
// Create N3 tunnel
int
ret
=
gtpv1u_create_ngu_tunnel
(
instance
,
&
create_tunnel_req
,
create_tunnel_resp
,
nr_pdcp_data_req_drb
,
sdap_data_req
);
...
...
openair2/F1AP/f1ap_cu_ue_context_management.c
View file @
5c42004e
...
...
@@ -510,7 +510,7 @@ int CU_send_UE_CONTEXT_SETUP_REQUEST(instance_t instance,
/* Use a dummy address and teid for the outgoing GTP-U tunnel (DU) which will be updated once we get the UE context setup response from the DU */
transport_layer_addr_t
addr
=
{
.
length
=
32
,
.
buffer
=
{
0
}
};
f1ap_ue_context_setup_req
->
drbs_to_be_setup
[
i
].
up_ul_tnl
[
j
].
teid
=
newGtpuCreateTunnel
(
getCxt
(
CUtype
,
instance
)
->
gtpInst
,
f1ap_ue_context_setup_req
->
gNB_
D
U_ue_id
,
f1ap_ue_context_setup_req
->
gNB_
C
U_ue_id
,
f1ap_ue_context_setup_req
->
drbs_to_be_setup
[
i
].
drb_id
,
f1ap_ue_context_setup_req
->
drbs_to_be_setup
[
i
].
drb_id
,
0xFFFF
,
// We will set the right value from DU answer
...
...
@@ -1629,7 +1629,7 @@ int CU_handle_UE_CONTEXT_MODIFICATION_RESPONSE(instance_t instance,
BIT_STRING_TO_TRANSPORT_LAYER_ADDRESS_IPv4
(
&
dl_up_tnl0
->
transportLayerAddress
,
drb_p
->
up_dl_tnl
[
0
].
tl_address
);
OCTET_STRING_TO_UINT32
(
&
dl_up_tnl0
->
gTP_TEID
,
drb_p
->
up_dl_tnl
[
0
].
teid
);
GtpuUpdateTunnelOutgoingAddressAndTeid
(
getCxt
(
CUtype
,
instance
)
->
gtpInst
,
f1ap_ue_context_modification_resp
->
gNB_
D
U_ue_id
,
f1ap_ue_context_modification_resp
->
gNB_
C
U_ue_id
,
(
ebi_t
)
drbs_setupmod_item_p
->
dRBID
,
drb_p
->
up_dl_tnl
[
0
].
tl_address
,
drb_p
->
up_dl_tnl
[
0
].
teid
);
...
...
openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
View file @
5c42004e
...
...
@@ -686,7 +686,7 @@ static void deliver_pdu_drb_gnb(void *deliver_pdu_data, ue_id_t ue_id, int rb_id
req
->
buffer
=
gtpu_buffer_p
;
req
->
length
=
size
;
req
->
offset
=
GTPU_HEADER_OVERHEAD_MAX
;
req
->
ue_id
=
ctxt
.
rntiMaybeUEid
;
req
->
ue_id
=
ue_id
;
// use CU UE ID as GTP will use that to look up TEID
req
->
bearer_id
=
rb_id
;
LOG_D
(
PDCP
,
"%s() (drb %d) sending message to gtp size %d
\n
"
,
__func__
,
rb_id
,
size
);
extern
instance_t
CUuniqInstance
;
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
View file @
5c42004e
...
...
@@ -476,7 +476,7 @@ rb_found:
memcpy
(
req
->
buffer
,
buf
,
size
);
req
->
length
=
size
;
req
->
offset
=
0
;
req
->
ue_id
=
ctx
.
rntiMaybeUEid
;
req
->
ue_id
=
ue
->
rnti
;
// use RNTI here, which GTP will use to look up TEID
req
->
bearer_id
=
rb_id
;
LOG_D
(
RLC
,
"Received uplink user-plane traffic at RLC-DU to be sent to the CU, size %d
\n
"
,
size
);
extern
instance_t
DUuniqInstance
;
...
...
openair2/RRC/NR/cucp_cuup_direct.c
View file @
5c42004e
...
...
@@ -61,7 +61,7 @@ void fill_e1ap_bearer_setup_resp(e1ap_bearer_setup_resp_t *resp,
drbSetup
->
numUpParam
=
1
;
drbSetup
->
UpParamList
[
0
].
tlAddress
=
my_addr
;
drbSetup
->
UpParamList
[
0
].
teId
=
newGtpuCreateTunnel
(
gtpInst
,
(
ue_id
&
0xFFFF
)
,
ue_id
,
drb2Setup
->
id
,
drb2Setup
->
id
,
0xFFFF
,
// We will set the right value from DU answer
...
...
@@ -117,7 +117,7 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
create_tunnel_req
.
outgoing_teid
[
i
]
=
pdu
->
param
.
gtp_teid
;
}
create_tunnel_req
.
num_tunnels
=
UE
->
nb_of_pdusessions
;
create_tunnel_req
.
ue_id
=
UE
->
r
nti
;
create_tunnel_req
.
ue_id
=
UE
->
r
rc_ue_id
;
int
ret
=
gtpv1u_create_ngu_tunnel
(
getCxtE1
(
instance
)
->
gtpInstN3
,
&
create_tunnel_req
,
&
create_tunnel_resp
,
...
...
@@ -150,7 +150,7 @@ static int drb_config_gtpu_create(const protocol_ctxt_t *const ctxt_p,
LOG_D
(
NR_RRC
,
"Configuring PDCP DRBs for UE %x
\n
"
,
UE
->
rnti
);
nr_pdcp_add_drbs
(
ctxt_p
->
enb_flag
,
ctxt_p
->
rntiMaybeUE
id
,
UE
->
rrc_ue_
id
,
0
,
DRB_configList
,
(
UE
->
integrity_algorithm
<<
4
)
|
UE
->
ciphering_algorithm
,
...
...
@@ -166,7 +166,7 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
RC
.
nrrrc
[
instance
],
req
->
rnti
);
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
protocol_ctxt_t
ctxt
=
{
0
};
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
GNB_FLAG_YES
,
UE
->
r
nti
,
0
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
0
,
GNB_FLAG_YES
,
UE
->
r
rc_ue_id
,
0
,
0
,
0
);
e1ap_bearer_setup_resp_t
resp
=
{
0
};
resp
.
numPDUSessions
=
req
->
numPDUSessions
;
...
...
@@ -198,7 +198,7 @@ static void cucp_cuup_bearer_context_setup_direct(e1ap_bearer_setup_req_t *const
in_addr_t
my_addr
=
inet_addr
(
RC
.
nrrrc
[
ctxt
.
module_id
]
->
eth_params_s
.
my_addr
);
instance_t
gtpInst
=
getCxt
(
CUtype
,
instance
)
->
gtpInst
;
// GTP tunnel for DL
fill_e1ap_bearer_setup_resp
(
&
resp
,
req
,
gtpInst
,
UE
->
r
nti
,
remote_port
,
my_addr
);
fill_e1ap_bearer_setup_resp
(
&
resp
,
req
,
gtpInst
,
UE
->
r
rc_ue_id
,
remote_port
,
my_addr
);
}
// actually, we should receive the corresponding context setup response
// message at the RRC and always react to this one. So in the following, we
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
5c42004e
...
...
@@ -271,7 +271,6 @@ 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 @
5c42004e
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/rrc_gNB_GTPV1U.c
View file @
5c42004e
...
...
@@ -52,7 +52,8 @@ int rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ctxt_
}
LOG_D
(
RRC
,
PROTOCOL_RRC_CTXT_UE_FMT
" RX CREATE_TUNNEL_RESP num tunnels %u
\n
"
,
PROTOCOL_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
create_tunnel_resp_pP
->
num_tunnels
);
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rntiMaybeUEid
);
/* we look up by CU UE ID! Do NOT change back to RNTI! */
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rntiMaybeUEid
);
if
(
!
ue_context_p
)
{
LOG_E
(
NR_RRC
,
"UE table error
\n
"
);
return
-
1
;
...
...
@@ -83,7 +84,8 @@ int nr_rrc_gNB_process_GTPV1U_CREATE_TUNNEL_RESP(const protocol_ctxt_t *const ct
}
LOG_D
(
NR_RRC
,
PROTOCOL_NR_RRC_CTXT_UE_FMT
" RX CREATE_TUNNEL_RESP num tunnels %u
\n
"
,
PROTOCOL_NR_RRC_CTXT_UE_ARGS
(
ctxt_pP
),
create_tunnel_resp_pP
->
num_tunnels
);
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rntiMaybeUEid
);
/* we look up by CU UE ID! Do NOT change back to RNTI! */
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
],
ctxt_pP
->
rntiMaybeUEid
);
if
(
!
ue_context_p
)
{
LOG_E
(
NR_RRC
,
"UE table error
\n
"
);
return
-
1
;
...
...
openair2/RRC/NR/rrc_gNB_NGAP.c
View file @
5c42004e
...
...
@@ -371,7 +371,7 @@ int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t
itti_send_msg_to_task
(
TASK_NGAP
,
instance
,
msg_fail_p
);
return
(
-
1
);
}
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
nti
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
rc_ue_id
,
0
,
0
);
UE
->
amf_ue_ngap_id
=
req
->
amf_ue_ngap_id
;
uint8_t
nb_pdusessions_tosetup
=
req
->
nb_of_pdusessions
;
if
(
nb_pdusessions_tosetup
)
{
...
...
@@ -392,7 +392,7 @@ int rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(MessageDef *msg_p, instance_t
memcpy
(
create_tunnel_req
.
dst_addr
[
i
].
buffer
,
req
->
pdusession_param
[
i
].
upf_addr
.
buffer
,
sizeof
(
create_tunnel_req
.
dst_addr
[
i
].
buffer
));
LOG_I
(
NR_RRC
,
"PDUSESSION SETUP: local index %d teid %u, pdusession id %d
\n
"
,
i
,
create_tunnel_req
.
outgoing_teid
[
i
],
create_tunnel_req
.
pdusession_id
[
i
]);
}
create_tunnel_req
.
ue_id
=
UE
->
r
nti
;
create_tunnel_req
.
ue_id
=
UE
->
r
rc_ue_id
;
gtpv1u_gnb_create_tunnel_resp_t
create_tunnel_resp
=
{
0
};
int
ret
=
gtpv1u_create_ngu_tunnel
(
instance
,
&
create_tunnel_req
,
&
create_tunnel_resp
,
nr_pdcp_data_req_drb
,
sdap_data_req
);
if
(
ret
!=
0
)
{
...
...
@@ -608,7 +608,7 @@ int rrc_gNB_process_NGAP_DOWNLINK_NAS(MessageDef *msg_p, instance_t instance, mu
}
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
nti
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
rc_ue_id
,
0
,
0
);
/* Create message for PDCP (DLInformationTransfer_t) */
length
=
do_NR_DLInformationTransfer
(
instance
,
&
buffer
,
rrc_gNB_get_next_transaction_identifier
(
instance
),
req
->
nas_pdu
.
length
,
req
->
nas_pdu
.
buffer
);
...
...
@@ -926,7 +926,7 @@ int rrc_gNB_process_NGAP_PDUSESSION_MODIFY_REQ(MessageDef *msg_p, instance_t ins
return
(
-
1
);
}
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
nti
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
rc_ue_id
,
0
,
0
);
ctxt
.
eNB_index
=
0
;
bool
all_failed
=
true
;
for
(
int
i
=
0
;
i
<
req
->
nb_pdusessions_tomodify
;
i
++
)
{
...
...
@@ -1153,7 +1153,7 @@ int rrc_gNB_process_NGAP_UE_CONTEXT_RELEASE_COMMAND(MessageDef *msg_p, instance_
}
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
nti
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
rc_ue_id
,
0
,
0
);
ctxt
.
eNB_index
=
0
;
rrc_gNB_generate_RRCRelease
(
&
ctxt
,
ue_context_p
);
return
0
;
...
...
@@ -1265,7 +1265,7 @@ int rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND(MessageDef *msg_p, instance_
LOG_I
(
NR_RRC
,
"[gNB %ld] gNB_ue_ngap_id %u
\n
"
,
instance
,
gNB_ue_ngap_id
);
gNB_RRC_UE_t
*
UE
=
&
ue_context_p
->
ue_context
;
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
nti
,
0
,
0
);
PROTOCOL_CTXT_SET_BY_INSTANCE
(
&
ctxt
,
instance
,
GNB_FLAG_YES
,
UE
->
r
rc_ue_id
,
0
,
0
);
LOG_I
(
NR_RRC
,
"PDU Session Release Command: AMF_UE_NGAP_ID %lu rrc_ue_id %u release_pdusessions %d
\n
"
,
cmd
->
amf_ue_ngap_id
,
gNB_ue_ngap_id
,
cmd
->
nb_pdusessions_torelease
);
bool
found
=
false
;
...
...
openair2/RRC/NR/rrc_gNB_UE_context.c
View file @
5c42004e
...
...
@@ -122,7 +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
);
cu_remove_f1_ue_data
(
ue_context_pP
->
ue_context
.
rrc
_ue_id
);
rrc_gNB_free_mem_ue_context
(
ue_context_pP
);
LOG_I
(
NR_RRC
,
"Removed UE context
\n
"
);
}
...
...
@@ -175,6 +175,8 @@ rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(rnti_t rnti,
{
rrc_gNB_ue_context_t
*
ue_context_p
=
rrc_gNB_get_ue_context_by_rnti
(
rrc_instance_pP
,
rnti
);
/* TODO: this should not matter, we can have multiple UEs at different DUs
* with the same RNTI! */
if
(
ue_context_p
)
{
LOG_E
(
NR_RRC
,
"Cannot create new UE context, already exist rnti: %04x
\n
"
,
rnti
);
return
ue_context_p
;
...
...
@@ -185,19 +187,18 @@ rrc_gNB_ue_context_t *rrc_gNB_create_ue_context(rnti_t rnti,
return
NULL
;
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
),
AssertFatal
(
!
cu_exists_f1_ue_data
(
ue
->
rrc
_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
);
ue
->
rrc
_ue_id
);
cu_add_f1_ue_data
(
ue
->
rrc
_ue_id
,
&
ue_data
);
RB_INSERT
(
rrc_nr_ue_tree_s
,
&
rrc_instance_pP
->
rrc_ue_head
,
ue_context_p
);
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
,
ue
->
rrc
_ue_id
,
du_ue_id
,
ue
->
rnti
,
ue
->
random_ue_identity
);
...
...
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
5c42004e
...
...
@@ -288,7 +288,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context_p, x2a
create_tunnel_req
.
sgw_S1u_teid
[
i
]);
}
create_tunnel_req
.
rnti
=
ue_context_p
->
ue_context
.
r
nti
;
create_tunnel_req
.
rnti
=
ue_context_p
->
ue_context
.
r
rc_ue_id
;
create_tunnel_req
.
num_tunnels
=
m
->
nb_e_rabs_tobeadded
;
RB_INSERT
(
rrc_nr_ue_tree_s
,
&
RC
.
nrrrc
[
rrc
->
module_id
]
->
rrc_ue_head
,
ue_context_p
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
rrc
->
module_id
,
GNB_FLAG_YES
,
ue_context_p
->
ue_context
.
rnti
,
0
,
0
,
rrc
->
module_id
);
...
...
@@ -347,12 +347,13 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context_p, x2a
// layers use different IDs (MAC/RLC use RNTI as DU UE ID, above use NGAP ID
// as CU UE ID.
uint32_t
du_ue_id
=
ue_context_p
->
ue_context
.
rnti
;
uint32_t
cu_ue_id
=
ue_context_p
->
ue_context
.
rnti
;
f1_ue_data_t
du_ue_data
=
{.
secondary_ue
=
cu_ue_id
};
static
uint32_t
rrc_ue_id
=
0
;
rrc_ue_id
++
;
f1_ue_data_t
du_ue_data
=
{.
secondary_ue
=
rrc_ue_id
};
du_add_f1_ue_data
(
du_ue_id
,
&
du_ue_data
);
f1_ue_data_t
cu_ue_data
=
{.
secondary_ue
=
du_ue_id
};
cu_add_f1_ue_data
(
cu
_ue_id
,
&
cu_ue_data
);
LOG_I
(
RRC
,
"Assign CU UE ID %d and DU UE ID %d to UE RNTI %04x
\n
"
,
cu
_ue_id
,
du_ue_id
,
ue_context_p
->
ue_context
.
rnti
);
cu_add_f1_ue_data
(
rrc
_ue_id
,
&
cu_ue_data
);
LOG_I
(
RRC
,
"Assign CU UE ID %d and DU UE ID %d to UE RNTI %04x
\n
"
,
rrc
_ue_id
,
du_ue_id
,
ue_context_p
->
ue_context
.
rnti
);
// configure MAC and RLC
bool
ret
=
false
;
...
...
@@ -366,7 +367,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context_p, x2a
}
AssertFatal
(
ret
,
"cannot add NSA UE in MAC, aborting
\n
"
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
rrc
->
module_id
,
GNB_FLAG_YES
,
cu
_ue_id
,
0
,
0
,
rrc
->
module_id
);
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
rrc
->
module_id
,
GNB_FLAG_YES
,
rrc
_ue_id
,
0
,
0
,
rrc
->
module_id
);
if
(
get_softmodem_params
()
->
do_ra
)
ctxt
.
enb_flag
=
0
;
LOG_W
(
RRC
,
"Calling RRC PDCP/RLC ASN1 request functions for protocol context %p with module_id %d, rnti %lx, frame %d, subframe %d eNB_index %d
\n
"
,
...
...
@@ -378,7 +379,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc, rrc_gNB_ue_context_t *ue_context_p, x2a
ctxt
.
eNB_index
);
nr_pdcp_add_drbs
(
ctxt
.
enb_flag
,
cu
_ue_id
,
rrc
_ue_id
,
0
,
ue_context_p
->
ue_context
.
rb_config
->
drb_ToAddModList
,
(
ue_context_p
->
ue_context
.
integrity_algorithm
<<
4
)
|
ue_context_p
->
ue_context
.
ciphering_algorithm
,
...
...
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