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
e77a1468
Commit
e77a1468
authored
Mar 12, 2024
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use UE ID instead of RNTI internally in RLC
parent
883724b9
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
126 additions
and
168 deletions
+126
-168
openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
+1
-1
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
+100
-131
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
+15
-23
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c
+7
-9
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
+3
-4
No files found.
openair2/LAYER2/NR_MAC_gNB/mac_rrc_dl_handler.c
View file @
e77a1468
...
...
@@ -715,7 +715,7 @@ void dl_rrc_message_transfer(const f1ap_dl_rrc_message_t *dl_rrc)
mac_remove_nr_ue
(
mac
,
*
dl_rrc
->
old_gNB_DU_ue_id
);
pthread_mutex_unlock
(
&
mac
->
sched_lock
);
nr_rlc_remove_ue
(
dl_rrc
->
gNB_DU_ue_id
);
nr_rlc_update_
rnti
(
*
dl_rrc
->
old_gNB_DU_ue_id
,
dl_rrc
->
gNB_DU_ue_id
);
nr_rlc_update_
id
(
*
dl_rrc
->
old_gNB_DU_ue_id
,
dl_rrc
->
gNB_DU_ue_id
);
instance_t
f1inst
=
get_f1_gtp_instance
();
if
(
f1inst
>=
0
)
// we actually use F1-U
gtpv1u_update_ue_id
(
f1inst
,
*
dl_rrc
->
old_gNB_DU_ue_id
,
dl_rrc
->
gNB_DU_ue_id
);
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.c
View file @
e77a1468
...
...
@@ -118,10 +118,10 @@ static nr_rlc_entity_t *get_rlc_entity_from_lcid(nr_rlc_ue_t *ue, logical_chan_i
}
}
void
nr_rlc_release_entity
(
int
rnti
,
logical_chan_id_t
channel_id
)
void
nr_rlc_release_entity
(
int
ue_id
,
logical_chan_id_t
channel_id
)
{
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
if
(
channel_id
==
0
)
{
if
(
ue
->
srb0
!=
NULL
)
{
free
(
ue
->
srb0
->
deliver_sdu_data
);
...
...
@@ -136,7 +136,7 @@ void nr_rlc_release_entity(int rnti, logical_chan_id_t channel_id)
}
void
mac_rlc_data_ind
(
const
module_id_t
module_idP
,
const
rnti_t
rntiP
,
const
uint16_t
ue_id
,
const
eNB_index_t
eNB_index
,
const
frame_t
frameP
,
const
eNB_flag_t
enb_flagP
,
...
...
@@ -153,11 +153,11 @@ void mac_rlc_data_ind(const module_id_t module_idP,
}
if
(
enb_flagP
)
T
(
T_ENB_RLC_MAC_UL
,
T_INT
(
module_idP
),
T_INT
(
rntiP
),
T
(
T_ENB_RLC_MAC_UL
,
T_INT
(
module_idP
),
T_INT
(
ue_id
),
T_INT
(
channel_idP
),
T_INT
(
tb_sizeP
));
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rntiP
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
if
(
ue
==
NULL
)
LOG_I
(
RLC
,
"RLC instance for the given UE was not found
\n
"
);
...
...
@@ -169,8 +169,7 @@ void mac_rlc_data_ind(const module_id_t module_idP,
rb
->
set_time
(
rb
,
nr_rlc_current_time
);
rb
->
recv_pdu
(
rb
,
buffer_pP
,
tb_sizeP
);
}
else
{
LOG_E
(
RLC
,
"Fatal: no RB found (channel ID %d RNTI %d)
\n
"
,
channel_idP
,
rntiP
);
LOG_E
(
RLC
,
"Fatal: no RB found (channel ID %d UE ID %d)
\n
"
,
channel_idP
,
ue_id
);
// exit(1);
}
...
...
@@ -178,7 +177,7 @@ void mac_rlc_data_ind(const module_id_t module_idP,
}
tbs_size_t
mac_rlc_data_req
(
const
module_id_t
module_idP
,
const
rnti_t
rntiP
,
const
uint16_t
ue_id
,
const
eNB_index_t
eNB_index
,
const
frame_t
frameP
,
const
eNB_flag_t
enb_flagP
,
...
...
@@ -193,7 +192,7 @@ tbs_size_t mac_rlc_data_req(const module_id_t module_idP,
int
maxsize
;
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rntiP
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
nr_rlc_entity_t
*
rb
=
get_rlc_entity_from_lcid
(
ue
,
channel_idP
);
if
(
rb
!=
NULL
)
{
...
...
@@ -209,14 +208,14 @@ tbs_size_t mac_rlc_data_req(const module_id_t module_idP,
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
if
(
enb_flagP
)
T
(
T_ENB_RLC_MAC_DL
,
T_INT
(
module_idP
),
T_INT
(
rntiP
),
T
(
T_ENB_RLC_MAC_DL
,
T_INT
(
module_idP
),
T_INT
(
ue_id
),
T_INT
(
channel_idP
),
T_INT
(
ret
));
return
ret
;
}
mac_rlc_status_resp_t
mac_rlc_status_ind
(
const
module_id_t
module_idP
,
const
rnti_t
rntiP
,
const
uint16_t
ue_id
,
const
eNB_index_t
eNB_index
,
const
frame_t
frameP
,
const
sub_frame_t
subframeP
,
...
...
@@ -229,7 +228,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind(const module_id_t module_idP,
mac_rlc_status_resp_t
ret
;
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rntiP
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
nr_rlc_entity_t
*
rb
=
get_rlc_entity_from_lcid
(
ue
,
channel_idP
);
if
(
rb
!=
NULL
)
{
...
...
@@ -246,7 +245,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind(const module_id_t module_idP,
+
buf_stat
.
tx_size
;
}
else
{
if
(
!
(
frameP
%
128
)
||
channel_idP
==
0
)
//to suppress this warning message
LOG_W
(
RLC
,
"
[%s] Radio Bearer (channel ID %d) is NULL for UE with rntiP %x
\n
"
,
__FUNCTION__
,
channel_idP
,
rntiP
);
LOG_W
(
RLC
,
"
Radio Bearer (channel ID %d) is NULL for UE %d
\n
"
,
channel_idP
,
ue_id
);
ret
.
bytes_in_buffer
=
0
;
}
...
...
@@ -261,7 +260,7 @@ mac_rlc_status_resp_t mac_rlc_status_ind(const module_id_t module_idP,
}
rlc_buffer_occupancy_t
mac_rlc_get_buffer_occupancy_ind
(
const
module_id_t
module_idP
,
const
rnti_t
rntiP
,
const
uint16_t
ue_id
,
const
eNB_index_t
eNB_index
,
const
frame_t
frameP
,
const
sub_frame_t
subframeP
,
...
...
@@ -284,7 +283,7 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module
}
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rntiP
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
nr_rlc_entity_t
*
rb
=
get_rlc_entity_from_lcid
(
ue
,
channel_idP
);
if
(
rb
!=
NULL
)
{
...
...
@@ -302,7 +301,7 @@ rlc_buffer_occupancy_t mac_rlc_get_buffer_occupancy_ind(const module_id_t module
+
buf_stat
.
tx_size
;
}
else
{
if
(
!
(
frameP
%
128
))
//to suppress this warning message
LOG_W
(
RLC
,
"
[%s] Radio Bearer (channel ID %d) is NULL for UE with rntiP %x
\n
"
,
__FUNCTION__
,
channel_idP
,
rntiP
);
LOG_W
(
RLC
,
"
Radio Bearer (channel ID %d) is NULL for UE %d
\n
"
,
channel_idP
,
ue_id
);
ret
=
0
;
}
...
...
@@ -322,18 +321,18 @@ rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
const
uint32_t
*
const
sourceL2Id
,
const
uint32_t
*
const
destinationL2Id
)
{
int
rnti
=
ctxt_pP
->
rntiMaybeUEid
;
int
ue_id
=
ctxt_pP
->
rntiMaybeUEid
;
nr_rlc_ue_t
*
ue
;
nr_rlc_entity_t
*
rb
;
LOG_D
(
RLC
,
"
rnti
%d srb_flag %d rb_id %ld mui %d confirm %d sdu_size %d MBMS_flag %d
\n
"
,
rnti
,
srb_flagP
,
rb_idP
,
muiP
,
confirmP
,
sdu_sizeP
,
MBMS_flagP
);
LOG_D
(
RLC
,
"
UE
%d srb_flag %d rb_id %ld mui %d confirm %d sdu_size %d MBMS_flag %d
\n
"
,
ue_id
,
srb_flagP
,
rb_idP
,
muiP
,
confirmP
,
sdu_sizeP
,
MBMS_flagP
);
if
(
ctxt_pP
->
enb_flag
)
T
(
T_ENB_RLC_DL
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
rntiMaybeUEid
),
T_INT
(
rb_idP
),
T_INT
(
sdu_sizeP
));
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
rb
=
NULL
;
...
...
@@ -359,19 +358,18 @@ rlc_op_status_t rlc_data_req(const protocol_ctxt_t *const ctxt_pP,
return
RLC_OP_STATUS_OK
;
}
int
nr_rlc_get_available_tx_space
(
const
rnti_t
rntiP
,
const
logical_chan_id_t
channel_idP
)
int
nr_rlc_get_available_tx_space
(
const
int
ue_id
,
const
logical_chan_id_t
channel_idP
)
{
int
ret
;
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rntiP
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
nr_rlc_entity_t
*
rb
=
get_rlc_entity_from_lcid
(
ue
,
channel_idP
);
if
(
rb
!=
NULL
)
{
ret
=
rb
->
available_tx_space
(
rb
);
}
else
{
LOG_E
(
RLC
,
"
[%s] Radio Bearer (channel ID %d) is NULL for UE with rntiP %x
\n
"
,
__FUNCTION__
,
channel_idP
,
rntiP
);
LOG_E
(
RLC
,
"
Radio Bearer (channel ID %d) is NULL for UE %d
\n
"
,
channel_idP
,
ue_id
);
ret
=
-
1
;
}
...
...
@@ -440,13 +438,11 @@ static void deliver_sdu(void *_ue, nr_rlc_entity_t *entity, char *buf, int size)
}
}
LOG_E
(
RLC
,
"%s:%d:%s: fatal, no RB found for ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
ue
->
rnti
);
LOG_E
(
RLC
,
"Fatal, no RB found for ue %d
\n
"
,
ue
->
ue_id
);
exit
(
1
);
rb_found:
LOG_D
(
RLC
,
"%s:%d:%s: delivering SDU (rnti %d is_srb %d rb_id %d) size %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
ue
->
rnti
,
is_srb
,
rb_id
,
size
);
LOG_D
(
RLC
,
"Delivering SDU (ue_id %d is_srb %d rb_id %d) size %d
\n
"
,
ue
->
ue_id
,
is_srb
,
rb_id
,
size
);
/* unused fields? */
ctx
.
instance
=
0
;
...
...
@@ -461,9 +457,9 @@ rb_found:
ctx
.
module_id
=
0
;
/* CU (PDCP, RRC, SDAP) use a different ID than RNTI, so below set the CU UE
* ID if in gNB, else use RNTI normally */
ctx
.
rntiMaybeUEid
=
ue
->
rnti
;
ctx
.
rntiMaybeUEid
=
ue
->
ue_id
;
if
(
is_enb
)
{
f1_ue_data_t
ue_data
=
du_get_f1_ue_data
(
ue
->
rnti
);
f1_ue_data_t
ue_data
=
du_get_f1_ue_data
(
ue
->
ue_id
);
ctx
.
rntiMaybeUEid
=
ue_data
.
secondary_ue
;
}
...
...
@@ -472,7 +468,7 @@ rb_found:
if
(
is_enb
)
{
T
(
T_ENB_RLC_UL
,
T_INT
(
0
/*ctxt_pP->module_id*/
),
T_INT
(
ue
->
rnti
),
T_INT
(
rb_id
),
T_INT
(
size
));
T_INT
(
ue
->
ue_id
),
T_INT
(
rb_id
),
T_INT
(
size
));
const
ngran_node_t
type
=
RC
.
nrrrc
[
0
/*ctxt_pP->module_id*/
]
->
node_type
;
AssertFatal
(
!
NODE_IS_CU
(
type
),
...
...
@@ -491,7 +487,7 @@ rb_found:
uint8_t
*
message_buffer
=
itti_malloc
(
TASK_RLC_ENB
,
TASK_DU_F1
,
size
);
memcpy
(
message_buffer
,
buf
,
size
);
F1AP_UL_RRC_MESSAGE
(
msg
).
gNB_CU_ue_id
=
ctx
.
rntiMaybeUEid
;
F1AP_UL_RRC_MESSAGE
(
msg
).
gNB_DU_ue_id
=
ue
->
rnti
;
F1AP_UL_RRC_MESSAGE
(
msg
).
gNB_DU_ue_id
=
ue
->
ue_id
;
F1AP_UL_RRC_MESSAGE
(
msg
).
srb_id
=
rb_id
;
F1AP_UL_RRC_MESSAGE
(
msg
).
rrc_container
=
message_buffer
;
F1AP_UL_RRC_MESSAGE
(
msg
).
rrc_container_length
=
size
;
...
...
@@ -504,8 +500,8 @@ rb_found:
req
->
buffer
=
(
uint8_t
*
)(
req
+
1
);
memcpy
(
req
->
buffer
,
buf
,
size
);
req
->
length
=
size
;
req
->
offset
=
0
;
req
->
ue_id
=
ue
->
rnti
;
// use RNTI here, which GTP will use to look up TEID
req
->
offset
=
0
;
req
->
ue_id
=
ue
->
ue_id
;
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
;
...
...
@@ -558,8 +554,7 @@ static void successful_delivery(void *_ue, nr_rlc_entity_t *entity, int sdu_id)
}
}
LOG_E
(
RLC
,
"%s:%d:%s: fatal, no RB found for ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
ue
->
rnti
);
LOG_E
(
RLC
,
"Fatal, no RB found for ue %d
\n
"
,
ue
->
ue_id
);
exit
(
1
);
rb_found:
...
...
@@ -616,8 +611,7 @@ static void max_retx_reached(void *_ue, nr_rlc_entity_t *entity)
}
}
LOG_E
(
RLC
,
"%s:%d:%s: fatal, no RB found for ue %d
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
ue
->
rnti
);
LOG_E
(
RLC
,
"Fatal, no RB found for ue %d
\n
"
,
ue
->
ue_id
);
exit
(
1
);
rb_found:
...
...
@@ -644,10 +638,10 @@ rb_found:
#endif
}
void
nr_rlc_reestablish_entity
(
int
rnti
,
int
lc_id
)
void
nr_rlc_reestablish_entity
(
int
ue_id
,
int
lc_id
)
{
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
if
(
ue
==
NULL
)
{
LOG_E
(
RLC
,
"RLC instance for the given UE was not found
\n
"
);
...
...
@@ -663,10 +657,11 @@ void nr_rlc_reestablish_entity(int rnti, int lc_id)
}
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
void
nr_rlc_reconfigure_entity
(
int
rnti
,
int
lc_id
,
NR_RLC_Config_t
*
rlc_Config
)
void
nr_rlc_reconfigure_entity
(
int
ue_id
,
int
lc_id
,
NR_RLC_Config_t
*
rlc_Config
)
{
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
if
(
ue
==
NULL
)
LOG_E
(
RLC
,
"RLC instance for the given UE was not found
\n
"
);
...
...
@@ -737,7 +732,7 @@ void nr_rlc_reconfigure_entity(int rnti, int lc_id, NR_RLC_Config_t *rlc_Config)
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
void
nr_rlc_add_srb
(
int
rnti
,
int
srb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
void
nr_rlc_add_srb
(
int
ue_id
,
int
srb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
{
struct
NR_RLC_Config
*
r
=
rlc_BearerConfig
->
rlc_Config
;
int
t_status_prohibit
;
...
...
@@ -778,7 +773,7 @@ void nr_rlc_add_srb(int rnti, int srb_id, const NR_RLC_BearerConfig_t *rlc_Beare
}
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
AssertFatal
(
rlc_BearerConfig
->
servedRadioBearer
&&
(
rlc_BearerConfig
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_srb_Identity
),
...
...
@@ -787,7 +782,7 @@ void nr_rlc_add_srb(int rnti, int srb_id, const NR_RLC_BearerConfig_t *rlc_Beare
ue
->
lcid2rb
[
local_id
].
type
=
NR_RLC_SRB
;
ue
->
lcid2rb
[
local_id
].
choice
.
srb_id
=
rlc_BearerConfig
->
servedRadioBearer
->
choice
.
srb_Identity
;
if
(
ue
->
srb
[
srb_id
-
1
]
!=
NULL
)
{
LOG_E
(
RLC
,
"
%s:%d:%s: SRB %d already exists for UE with RNTI %04x, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
srb_id
,
rnti
);
LOG_E
(
RLC
,
"
SRB %d already exists for UE %d, do nothing
\n
"
,
srb_id
,
ue_id
);
}
else
{
nr_rlc_entity_t
*
nr_rlc_am
=
new_nr_rlc_entity_am
(
RLC_RX_MAXSIZE
,
RLC_TX_MAXSIZE
,
...
...
@@ -800,12 +795,12 @@ void nr_rlc_add_srb(int rnti, int srb_id, const NR_RLC_BearerConfig_t *rlc_Beare
sn_field_length
);
nr_rlc_ue_add_srb_rlc_entity
(
ue
,
srb_id
,
nr_rlc_am
);
LOG_I
(
RLC
,
"Added srb %d to UE
with RNTI 0x%x
\n
"
,
srb_id
,
rnti
);
LOG_I
(
RLC
,
"Added srb %d to UE
%d
\n
"
,
srb_id
,
ue_id
);
}
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
static
void
add_drb_am
(
int
rnti
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
static
void
add_drb_am
(
int
ue_id
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
{
struct
NR_RLC_Config
*
r
=
rlc_BearerConfig
->
rlc_Config
;
...
...
@@ -843,7 +838,7 @@ static void add_drb_am(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Be
}
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
AssertFatal
(
rlc_BearerConfig
->
servedRadioBearer
&&
(
rlc_BearerConfig
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
),
...
...
@@ -852,7 +847,7 @@ static void add_drb_am(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Be
ue
->
lcid2rb
[
local_id
].
type
=
NR_RLC_DRB
;
ue
->
lcid2rb
[
local_id
].
choice
.
drb_id
=
rlc_BearerConfig
->
servedRadioBearer
->
choice
.
drb_Identity
;
if
(
ue
->
drb
[
drb_id
-
1
]
!=
NULL
)
{
LOG_E
(
RLC
,
"
%s:%d:%s: DRB %d already exists for UE with RNTI %04x, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_E
(
RLC
,
"
DRB %d already exists for UE %d, do nothing
\n
"
,
drb_id
,
ue_id
);
}
else
{
nr_rlc_entity_t
*
nr_rlc_am
=
new_nr_rlc_entity_am
(
RLC_RX_MAXSIZE
,
RLC_TX_MAXSIZE
,
...
...
@@ -865,12 +860,12 @@ static void add_drb_am(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Be
sn_field_length
);
nr_rlc_ue_add_drb_rlc_entity
(
ue
,
drb_id
,
nr_rlc_am
);
LOG_I
(
RLC
,
"
%s:%d:%s: added drb %d to UE with RNTI 0x%x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_I
(
RLC
,
"
Added drb %d to UE %d
\n
"
,
drb_id
,
ue_id
);
}
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
static
void
add_drb_um
(
int
rnti
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
static
void
add_drb_um
(
int
ue_id
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
{
struct
NR_RLC_Config
*
r
=
rlc_BearerConfig
->
rlc_Config
;
...
...
@@ -898,7 +893,7 @@ static void add_drb_um(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Be
}
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
AssertFatal
(
rlc_BearerConfig
->
servedRadioBearer
&&
(
rlc_BearerConfig
->
servedRadioBearer
->
present
==
NR_RLC_BearerConfig__servedRadioBearer_PR_drb_Identity
),
...
...
@@ -907,7 +902,7 @@ static void add_drb_um(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Be
ue
->
lcid2rb
[
local_id
].
type
=
NR_RLC_DRB
;
ue
->
lcid2rb
[
local_id
].
choice
.
drb_id
=
rlc_BearerConfig
->
servedRadioBearer
->
choice
.
drb_Identity
;
if
(
ue
->
drb
[
drb_id
-
1
]
!=
NULL
)
{
LOG_E
(
RLC
,
"DEBUG add_drb_um
%s:%d:%s: warning DRB %d already exist for ue %d, do nothing
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_E
(
RLC
,
"DEBUG add_drb_um
: warning DRB %d already exist for ue %d, do nothing
\n
"
,
drb_id
,
ue_id
);
}
else
{
nr_rlc_entity_t
*
nr_rlc_um
=
new_nr_rlc_entity_um
(
RLC_RX_MAXSIZE
,
RLC_TX_MAXSIZE
,
...
...
@@ -916,26 +911,25 @@ static void add_drb_um(int rnti, int drb_id, const NR_RLC_BearerConfig_t *rlc_Be
sn_field_length
);
nr_rlc_ue_add_drb_rlc_entity
(
ue
,
drb_id
,
nr_rlc_um
);
LOG_D
(
RLC
,
"
%s:%d:%s: added drb %d to UE with RNTI 0x%x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
drb_id
,
rnti
);
LOG_D
(
RLC
,
"
Added drb %d to UE %d
\n
"
,
drb_id
,
ue_id
);
}
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
void
nr_rlc_add_drb
(
int
rnti
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
void
nr_rlc_add_drb
(
int
ue_id
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
)
{
switch
(
rlc_BearerConfig
->
rlc_Config
->
present
)
{
case
NR_RLC_Config_PR_am
:
add_drb_am
(
rnti
,
drb_id
,
rlc_BearerConfig
);
add_drb_am
(
ue_id
,
drb_id
,
rlc_BearerConfig
);
break
;
case
NR_RLC_Config_PR_um_Bi_Directional
:
add_drb_um
(
rnti
,
drb_id
,
rlc_BearerConfig
);
add_drb_um
(
ue_id
,
drb_id
,
rlc_BearerConfig
);
break
;
default:
LOG_E
(
RLC
,
"%s:%d:%s: fatal: unhandled DRB type
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
LOG_E
(
RLC
,
"Fatal: unhandled DRB type
\n
"
);
exit
(
1
);
}
LOG_I
(
RLC
,
"
%s:%s:%d: added DRB to UE with RNTI 0x%x
\n
"
,
__FILE__
,
__FUNCTION__
,
__LINE__
,
rnti
);
LOG_I
(
RLC
,
"
Added DRB to UE %d
\n
"
,
ue_id
);
}
/* Dummy function due to dependency from LTE libraries */
...
...
@@ -951,66 +945,52 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
}
struct
srb0_data
{
int
rnti
;
int
ue_id
;
void
*
data
;
void
(
*
send_initial_ul_rrc_message
)(
int
rnti
,
const
uint8_t
*
sdu
,
sdu_size_t
sdu_len
,
void
*
data
);
void
(
*
send_initial_ul_rrc_message
)(
int
ue_id
,
const
uint8_t
*
sdu
,
sdu_size_t
sdu_len
,
void
*
data
);
};
void
deliver_sdu_srb0
(
void
*
deliver_sdu_data
,
struct
nr_rlc_entity_t
*
entity
,
char
*
buf
,
int
size
)
{
struct
srb0_data
*
s0
=
(
struct
srb0_data
*
)
deliver_sdu_data
;
s0
->
send_initial_ul_rrc_message
(
s0
->
rnti
,
(
unsigned
char
*
)
buf
,
size
,
s0
->
data
);
s0
->
send_initial_ul_rrc_message
(
s0
->
ue_id
,
(
unsigned
char
*
)
buf
,
size
,
s0
->
data
);
}
void
nr_rlc_activate_srb0
(
int
rnti
,
void
*
data
,
void
(
*
send_initial_ul_rrc_message
)(
int
rnti
,
const
uint8_t
*
sdu
,
sdu_size_t
sdu_len
,
void
*
data
))
void
nr_rlc_activate_srb0
(
int
ue_id
,
void
*
data
,
void
(
*
send_initial_ul_rrc_message
)(
int
ue_id
,
const
uint8_t
*
sdu
,
sdu_size_t
sdu_len
,
void
*
data
))
{
nr_rlc_entity_t
*
nr_rlc_tm
;
nr_rlc_ue_t
*
ue
;
struct
srb0_data
*
srb0_data
;
srb0_data
=
calloc
(
1
,
sizeof
(
struct
srb0_data
));
struct
srb0_data
*
srb0_data
=
calloc
(
1
,
sizeof
(
struct
srb0_data
));
AssertFatal
(
srb0_data
!=
NULL
,
"out of memory
\n
"
);
srb0_data
->
rnti
=
rnti
;
srb0_data
->
data
=
data
;
srb0_data
->
ue_id
=
ue_id
;
srb0_data
->
data
=
data
;
srb0_data
->
send_initial_ul_rrc_message
=
send_initial_ul_rrc_message
;
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
if
(
ue
->
srb0
!=
NULL
)
{
LOG_W
(
RLC
,
"SRB0 already exists for UE
with RNTI 0x%x, do nothing
\n
"
,
rnti
);
LOG_W
(
RLC
,
"SRB0 already exists for UE
%d, do nothing
\n
"
,
ue_id
);
free
(
srb0_data
);
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
return
;
}
nr_rlc_tm
=
new_nr_rlc_entity_tm
(
10000
,
nr_rlc_
entity_t
*
nr_rlc_
tm
=
new_nr_rlc_entity_tm
(
10000
,
deliver_sdu_srb0
,
srb0_data
);
nr_rlc_ue_add_srb_rlc_entity
(
ue
,
0
,
nr_rlc_tm
);
LOG_I
(
RLC
,
"
activated srb0 for UE with RNTI 0x%x
\n
"
,
rnti
);
LOG_I
(
RLC
,
"
Activated srb0 for UE %d
\n
"
,
ue_id
);
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
rlc_op_status_t
rrc_rlc_config_req
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
srb_flag_t
srb_flagP
,
const
MBMS_flag_t
mbms_flagP
,
const
config_action_t
actionP
,
const
rb_id_t
rb_idP
)
rlc_op_status_t
rrc_rlc_config_req
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
srb_flag_t
srb_flagP
,
const
MBMS_flag_t
mbms_flagP
,
const
config_action_t
actionP
,
const
rb_id_t
rb_idP
)
{
nr_rlc_ue_t
*
ue
;
int
i
;
if
(
mbms_flagP
)
{
LOG_E
(
RLC
,
"%s:%d:%s: todo (MBMS NOT supported)
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
);
exit
(
1
);
...
...
@@ -1029,8 +1009,8 @@ rlc_op_status_t rrc_rlc_config_req (
exit
(
1
);
}
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
LOG_D
(
RLC
,
"%s:%d:%s: remove rb %ld (is_srb %d) for UE
RNTI
%lx
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rb_idP
,
srb_flagP
,
ctxt_pP
->
rntiMaybeUEid
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ctxt_pP
->
rntiMaybeUEid
);
LOG_D
(
RLC
,
"%s:%d:%s: remove rb %ld (is_srb %d) for UE %lx
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rb_idP
,
srb_flagP
,
ctxt_pP
->
rntiMaybeUEid
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ctxt_pP
->
rntiMaybeUEid
);
if
(
srb_flagP
)
{
if
(
ue
->
srb
[
rb_idP
-
1
]
!=
NULL
)
{
ue
->
srb
[
rb_idP
-
1
]
->
delete_entity
(
ue
->
srb
[
rb_idP
-
1
]);
...
...
@@ -1045,6 +1025,7 @@ rlc_op_status_t rrc_rlc_config_req (
LOG_W
(
RLC
,
"removing non allocated DRB %ld, do nothing
\n
"
,
rb_idP
);
}
/* remove UE if it has no more RB configured */
int
i
;
for
(
i
=
0
;
i
<
2
;
i
++
)
if
(
ue
->
srb
[
i
]
!=
NULL
)
break
;
...
...
@@ -1059,11 +1040,11 @@ rlc_op_status_t rrc_rlc_config_req (
return
RLC_OP_STATUS_OK
;
}
void
nr_rlc_remove_ue
(
int
rnti
)
void
nr_rlc_remove_ue
(
int
ue_id
)
{
LOG_W
(
RLC
,
"
remove UE %x
\n
"
,
rnti
);
LOG_W
(
RLC
,
"
Remove UE %d
\n
"
,
ue_id
);
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_manager_remove_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_manager_remove_ue
(
nr_rlc_ue_manager
,
ue_id
);
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
...
...
@@ -1073,17 +1054,17 @@ rlc_op_status_t rrc_rlc_remove_ue (const protocol_ctxt_t* const x)
return
RLC_OP_STATUS_OK
;
}
bool
nr_rlc_update_
rnti
(
int
from_rnti
,
int
to_rnti
)
bool
nr_rlc_update_
id
(
int
from_id
,
int
to_id
)
{
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
from_
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
from_
id
);
if
(
ue
==
NULL
)
{
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
LOG_E
(
RLC
,
"Cannot find RLC entity for UE %
04x
\n
"
,
from_rnti
);
LOG_E
(
RLC
,
"Cannot find RLC entity for UE %
d
\n
"
,
from_id
);
return
false
;
}
ue
->
rnti
=
to_rnti
;
LOG_I
(
RLC
,
"Update old UE
RNTI %04x context to RNTI %04x
\n
"
,
from_rnti
,
to_rnti
);
ue
->
ue_id
=
to_id
;
LOG_I
(
RLC
,
"Update old UE
ID %d context to ID %d
\n
"
,
from_id
,
to_id
);
for
(
int
i
=
0
;
i
<
sizeof
(
ue
->
srb
)
/
sizeof
(
ue
->
srb
[
0
]);
++
i
)
if
(
ue
->
srb
[
i
])
ue
->
srb
[
i
]
->
reestablishment
(
ue
->
srb
[
i
]);
...
...
@@ -1096,13 +1077,13 @@ bool nr_rlc_update_rnti(int from_rnti, int to_rnti)
/* This function is for testing purposes. At least on a COTS UE, it will
* trigger a reestablishment. */
void
nr_rlc_test_trigger_reestablishment
(
int
rnti
)
void
nr_rlc_test_trigger_reestablishment
(
int
ue_id
)
{
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
if
(
ue
==
NULL
)
{
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
LOG_E
(
RLC
,
"Cannot find RLC entity for UE %04x
\n
"
,
rnti
);
LOG_E
(
RLC
,
"Cannot find RLC entity for UE %04x
\n
"
,
ue_id
);
return
;
}
/* we simply assume the SRB exists, because the scheduler creates it as soon
...
...
@@ -1132,16 +1113,13 @@ void rlc_tick(int a, int b)
exit
(
1
);
}
void
nr_rlc_activate_avg_time_to_tx
(
const
rnti_t
rnti
,
const
logical_chan_id_t
channel_id
,
const
bool
is_on
)
void
nr_rlc_activate_avg_time_to_tx
(
const
int
ue_id
,
const
logical_chan_id_t
channel_id
,
const
bool
is_on
)
{
nr_rlc_ue_t
*
ue
;
nr_rlc_entity_t
*
rb
;
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
switch
(
channel_id
)
{
case
1
...
3
:
rb
=
ue
->
srb
[
channel_id
-
1
];
break
;
...
...
@@ -1153,27 +1131,20 @@ void nr_rlc_activate_avg_time_to_tx(
rb
->
avg_time_is_on
=
is_on
;
time_average_reset
(
rb
->
txsdu_avg_time_to_tx
);
}
else
{
LOG_E
(
RLC
,
"
[%s] Radio Bearer (channel ID %d) is NULL for UE with rnti %x
\n
"
,
__FUNCTION__
,
channel_id
,
rnti
);
LOG_E
(
RLC
,
"
Radio Bearer (channel ID %d) is NULL for UE %d
\n
"
,
channel_id
,
ue_id
);
}
nr_rlc_manager_unlock
(
nr_rlc_ue_manager
);
}
/* returns false in case of error, true if everything ok */
bool
nr_rlc_get_statistics
(
int
rnti
,
int
srb_flag
,
int
rb_id
,
nr_rlc_statistics_t
*
out
)
bool
nr_rlc_get_statistics
(
int
ue_id
,
int
srb_flag
,
int
rb_id
,
nr_rlc_statistics_t
*
out
)
{
nr_rlc_ue_t
*
ue
;
nr_rlc_entity_t
*
rb
;
bool
ret
;
bool
ret
;
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
rb
=
NULL
;
nr_rlc_entity_t
*
rb
=
NULL
;
if
(
srb_flag
)
{
if
(
rb_id
>=
1
&&
rb_id
<=
2
)
...
...
@@ -1201,23 +1172,21 @@ bool nr_rlc_get_statistics(
return
ret
;
}
void
nr_rlc_srb_recv_sdu
(
const
int
rnti
,
const
logical_chan_id_t
channel_id
,
unsigned
char
*
buf
,
int
size
)
void
nr_rlc_srb_recv_sdu
(
const
int
ue_id
,
const
logical_chan_id_t
channel_id
,
unsigned
char
*
buf
,
int
size
)
{
nr_rlc_ue_t
*
ue
;
nr_rlc_entity_t
*
rb
;
T
(
T_ENB_RLC_DL
,
T_INT
(
0
),
T_INT
(
rnti
),
T_INT
(
0
),
T_INT
(
size
));
T
(
T_ENB_RLC_DL
,
T_INT
(
0
),
T_INT
(
ue_id
),
T_INT
(
0
),
T_INT
(
size
));
nr_rlc_manager_lock
(
nr_rlc_ue_manager
);
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
rnti
);
nr_rlc_ue_t
*
ue
=
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager
,
ue_id
);
nr_rlc_entity_t
*
rb
=
NULL
;
if
(
channel_id
==
0
)
{
rb
=
ue
->
srb0
;
}
else
{
rb
=
ue
->
srb
[
channel_id
-
1
];
}
AssertFatal
(
rb
!=
NULL
,
"SDU sent to unknown RB
RNTI %04x SRB %d
\n
"
,
rnti
,
channel_id
);
AssertFatal
(
rb
!=
NULL
,
"SDU sent to unknown RB
UE-ID %d SRB %d
\n
"
,
ue_id
,
channel_id
);
rb
->
set_time
(
rb
,
nr_rlc_current_time
);
rb
->
recv_sdu
(
rb
,
(
char
*
)
buf
,
size
,
-
1
);
...
...
openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h
View file @
e77a1468
...
...
@@ -41,37 +41,29 @@
struct
NR_RLC_Config
;
struct
NR_LogicalChannelConfig
;
void
nr_rlc_add_srb
(
int
rnti
,
int
srb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
);
void
nr_rlc_add_drb
(
int
rnti
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
);
void
nr_rlc_add_srb
(
int
ue_id
,
int
srb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
);
void
nr_rlc_add_drb
(
int
ue_id
,
int
drb_id
,
const
NR_RLC_BearerConfig_t
*
rlc_BearerConfig
);
void
nr_rlc_reestablish_entity
(
int
rnti
,
int
lc_id
);
logical_chan_id_t
nr_rlc_get_lcid_from_rb
(
int
ue_id
,
bool
is_srb
,
int
rb_id
);
void
nr_rlc_remove_ue
(
int
rnti
);
bool
nr_rlc_update_rnti
(
int
from_rnti
,
int
to_rnti
);
void
nr_rlc_reestablish_entity
(
int
ue_id
,
int
lc_id
);
void
nr_rlc_remove_ue
(
int
ue_id
);
bool
nr_rlc_update_id
(
int
from_id
,
int
to_id
);
/* test function for CI to trigger reestablishments */
void
nr_rlc_test_trigger_reestablishment
(
int
rnti
);
void
nr_rlc_test_trigger_reestablishment
(
int
ue_id
);
void
nr_rlc_release_entity
(
int
rnti
,
logical_chan_id_t
channel_id
);
void
nr_rlc_release_entity
(
int
ue_id
,
logical_chan_id_t
channel_id
);
void
nr_rlc_reconfigure_entity
(
int
rnti
,
int
lc_id
,
NR_RLC_Config_t
*
rlc_Config
);
void
nr_rlc_reconfigure_entity
(
int
ue_id
,
int
lc_id
,
NR_RLC_Config_t
*
rlc_Config
);
int
nr_rlc_get_available_tx_space
(
const
rnti_t
rntiP
,
const
logical_chan_id_t
channel_idP
);
int
nr_rlc_get_available_tx_space
(
const
int
ue_id
,
const
logical_chan_id_t
channel_idP
);
void
nr_rlc_activate_avg_time_to_tx
(
const
rnti_t
rnti
,
const
logical_chan_id_t
channel_id
,
const
bool
is_on
);
void
nr_rlc_activate_avg_time_to_tx
(
const
int
ue_id
,
const
logical_chan_id_t
channel_id
,
const
bool
is_on
);
void
nr_rlc_srb_recv_sdu
(
const
int
rnti
,
const
logical_chan_id_t
channel_id
,
unsigned
char
*
buf
,
int
size
);
void
nr_rlc_srb_recv_sdu
(
const
int
ue_id
,
const
logical_chan_id_t
channel_id
,
unsigned
char
*
buf
,
int
size
);
void
nr_rlc_activate_srb0
(
int
rnti
,
void
*
data
,
void
(
*
send_initial_ul_rrc_message
)(
int
rnti
,
const
uint8_t
*
sdu
,
sdu_size_t
sdu_len
,
void
*
data
));
void
nr_rlc_activate_srb0
(
int
ue_id
,
void
*
data
,
void
(
*
send_initial_ul_rrc_message
)(
int
rnti
,
const
uint8_t
*
sdu
,
sdu_size_t
sdu_len
,
void
*
data
));
bool
nr_rlc_get_statistics
(
int
rnti
,
int
srb_flag
,
int
rb_id
,
nr_rlc_statistics_t
*
out
);
bool
nr_rlc_get_statistics
(
int
ue_id
,
int
srb_flag
,
int
rb_id
,
nr_rlc_statistics_t
*
out
);
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.c
View file @
e77a1468
...
...
@@ -75,17 +75,17 @@ void nr_rlc_manager_unlock(nr_rlc_ue_manager_t *_m)
}
/* must be called with lock acquired */
nr_rlc_ue_t
*
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager_t
*
_m
,
int
rnti
)
nr_rlc_ue_t
*
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager_t
*
_m
,
int
ue_id
)
{
/* TODO: optimze */
nr_rlc_ue_manager_internal_t
*
m
=
_m
;
int
i
;
for
(
i
=
0
;
i
<
m
->
ue_count
;
i
++
)
if
(
m
->
ue_list
[
i
]
->
rnti
==
rnti
)
if
(
m
->
ue_list
[
i
]
->
ue_id
==
ue_id
)
return
m
->
ue_list
[
i
];
LOG_D
(
RLC
,
"
%s:%d:%s: new UE with RNTI 0x%x
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rnti
);
LOG_D
(
RLC
,
"
New UE with ID %d
\n
"
,
ue_id
);
m
->
ue_count
++
;
m
->
ue_list
=
realloc
(
m
->
ue_list
,
sizeof
(
nr_rlc_ue_t
*
)
*
m
->
ue_count
);
...
...
@@ -99,13 +99,13 @@ nr_rlc_ue_t *nr_rlc_manager_get_ue(nr_rlc_ue_manager_t *_m, int rnti)
exit
(
1
);
}
m
->
ue_list
[
m
->
ue_count
-
1
]
->
rnti
=
rnti
;
m
->
ue_list
[
m
->
ue_count
-
1
]
->
ue_id
=
ue_id
;
return
m
->
ue_list
[
m
->
ue_count
-
1
];
}
/* must be called with lock acquired */
void
nr_rlc_manager_remove_ue
(
nr_rlc_ue_manager_t
*
_m
,
int
rnti
)
void
nr_rlc_manager_remove_ue
(
nr_rlc_ue_manager_t
*
_m
,
int
ue_id
)
{
nr_rlc_ue_manager_internal_t
*
m
=
_m
;
nr_rlc_ue_t
*
ue
;
...
...
@@ -113,13 +113,11 @@ void nr_rlc_manager_remove_ue(nr_rlc_ue_manager_t *_m, int rnti)
int
j
;
for
(
i
=
0
;
i
<
m
->
ue_count
;
i
++
)
if
(
m
->
ue_list
[
i
]
->
rnti
==
rnti
)
if
(
m
->
ue_list
[
i
]
->
ue_id
==
ue_id
)
break
;
if
(
i
==
m
->
ue_count
)
{
LOG_W
(
RLC
,
"%s:%d:%s: warning: ue %x not found
\n
"
,
__FILE__
,
__LINE__
,
__FUNCTION__
,
rnti
);
LOG_W
(
RLC
,
"Warning: ue %d not found
\n
"
,
ue_id
);
return
;
}
...
...
openair2/LAYER2/nr_rlc/nr_rlc_ue_manager.h
View file @
e77a1468
...
...
@@ -38,8 +38,7 @@ typedef struct nr_rlc_rb_t {
}
nr_rlc_rb_t
;
typedef
struct
nr_rlc_ue_t
{
int
rnti
;
ue_id_t
ue_id
;
int
ue_id
;
nr_rlc_entity_t
*
srb0
;
nr_rlc_entity_t
*
srb
[
3
];
nr_rlc_entity_t
*
drb
[
MAX_DRBS_PER_UE
];
...
...
@@ -57,8 +56,8 @@ int nr_rlc_manager_get_enb_flag(nr_rlc_ue_manager_t *m);
void
nr_rlc_manager_lock
(
nr_rlc_ue_manager_t
*
m
);
void
nr_rlc_manager_unlock
(
nr_rlc_ue_manager_t
*
m
);
nr_rlc_ue_t
*
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager_t
*
m
,
int
rnti
);
void
nr_rlc_manager_remove_ue
(
nr_rlc_ue_manager_t
*
m
,
int
rnti
);
nr_rlc_ue_t
*
nr_rlc_manager_get_ue
(
nr_rlc_ue_manager_t
*
m
,
int
ue_id
);
void
nr_rlc_manager_remove_ue
(
nr_rlc_ue_manager_t
*
m
,
int
ue_id
);
/***********************************************************************/
/* ue functions */
...
...
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