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
072d65a5
Commit
072d65a5
authored
Feb 23, 2024
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_UE_contention_resolution_timer' into integration_2024_w08
parents
ab5da3fe
df739aa5
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
39 additions
and
33 deletions
+39
-33
executables/nr-ue.c
executables/nr-ue.c
+6
-3
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+2
-4
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+1
-0
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+14
-26
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+5
-0
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+9
-0
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
+2
-0
No files found.
executables/nr-ue.c
View file @
072d65a5
...
...
@@ -533,20 +533,23 @@ static void RU_write(nr_rxtx_thread_data_t *rxtxD) {
}
void
processSlotTX
(
void
*
arg
)
{
void
processSlotTX
(
void
*
arg
)
{
nr_rxtx_thread_data_t
*
rxtxD
=
(
nr_rxtx_thread_data_t
*
)
arg
;
const
UE_nr_rxtx_proc_t
*
proc
=
&
rxtxD
->
proc
;
PHY_VARS_NR_UE
*
UE
=
rxtxD
->
UE
;
nr_phy_data_tx_t
phy_data
=
{
0
};
if
(
UE
->
if_inst
)
UE
->
if_inst
->
slot_indication
(
UE
->
Mod_id
);
LOG_D
(
PHY
,
"SlotTx %d.%d => slot type %d, wait: %d
\n
"
,
proc
->
frame_tx
,
proc
->
nr_slot_tx
,
proc
->
tx_slot_type
,
rxtxD
->
tx_wait_for_dlsch
);
if
(
proc
->
tx_slot_type
==
NR_UPLINK_SLOT
||
proc
->
tx_slot_type
==
NR_MIXED_SLOT
){
if
(
proc
->
tx_slot_type
==
NR_UPLINK_SLOT
||
proc
->
tx_slot_type
==
NR_MIXED_SLOT
)
{
if
(
rxtxD
->
tx_wait_for_dlsch
)
LOG_D
(
PHY
,
"enter wait for tx, slot %d, nb events to wait %d; "
,
proc
->
nr_slot_tx
,
rxtxD
->
tx_wait_for_dlsch
);
// wait for rx slots to send indication (if any) that DLSCH decoding is finished
...
...
openair2/LAYER2/NR_MAC_UE/mac_defs.h
View file @
072d65a5
...
...
@@ -322,10 +322,8 @@ typedef struct {
/// Msg3 buffer
uint8_t
*
Msg3_buffer
;
/// Random-access Contention Resolution Timer active flag
uint8_t
RA_contention_resolution_timer_active
;
int
RA_contention_resolution_target_frame
;
int
RA_contention_resolution_target_slot
;
/// Random-access Contention Resolution Timer
NR_timer_t
contention_resolution_timer
;
/// Transmitted UE Contention Resolution Identifier
uint8_t
cont_res_id
[
6
];
...
...
openair2/LAYER2/NR_MAC_UE/mac_proto.h
View file @
072d65a5
...
...
@@ -150,6 +150,7 @@
void
nr_ue_init_mac
(
NR_UE_MAC_INST_t
*
mac
);
void
send_srb0_rrc
(
int
ue_id
,
const
uint8_t
*
sdu
,
sdu_size_t
sdu_len
,
void
*
data
);
void
update_mac_timers
(
NR_UE_MAC_INST_t
*
mac
);
/**\brief apply default configuration values in nr_mac instance
\param mac mac instance */
...
...
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
View file @
072d65a5
...
...
@@ -592,22 +592,14 @@ void nr_Msg3_transmitted(NR_UE_MAC_INST_t *mac, uint8_t CC_id, frame_t frameP, s
RA_config_t
*
ra
=
&
mac
->
ra
;
NR_RACH_ConfigCommon_t
*
nr_rach_ConfigCommon
=
mac
->
current_UL_BWP
->
rach_ConfigCommon
;
long
mu
=
mac
->
current_UL_BWP
->
scs
;
int
subframes_per_slot
=
nr_slots_per_frame
[
mu
]
/
10
;
int
subframes_per_slot
=
nr_slots_per_frame
[
mu
]
/
10
;
// start contention resolution timer (cnt in slots)
int
RA_contention_resolution_timer_subframes
=
(
nr_rach_ConfigCommon
->
ra_ContentionResolutionTimer
+
1
)
<<
3
;
// start contention resolution timer
int
RA_contention_resolution_timer_subframes
=
(
nr_rach_ConfigCommon
->
ra_ContentionResolutionTimer
+
1
)
<<
3
;
// timer step 1 slot and timer target given by ra_ContentionResolutionTimer
nr_timer_setup
(
&
ra
->
contention_resolution_timer
,
RA_contention_resolution_timer_subframes
*
subframes_per_slot
,
1
);
nr_timer_start
(
&
ra
->
contention_resolution_timer
);
ra
->
RA_contention_resolution_target_frame
=
(
frameP
+
(
RA_contention_resolution_timer_subframes
/
10
))
%
MAX_FRAME_NUMBER
;
ra
->
RA_contention_resolution_target_slot
=
(
slotP
+
(
RA_contention_resolution_timer_subframes
*
subframes_per_slot
))
%
nr_slots_per_frame
[
mu
];
LOG_D
(
MAC
,
"[UE %d] CB-RA: contention resolution timer set in frame.slot %d.%d and expiring in %d.%d
\n
"
,
mac
->
ue_id
,
frameP
,
slotP
,
ra
->
RA_contention_resolution_target_frame
,
ra
->
RA_contention_resolution_target_slot
);
ra
->
RA_contention_resolution_timer_active
=
1
;
ra
->
ra_state
=
WAIT_CONTENTION_RESOLUTION
;
}
...
...
@@ -770,7 +762,7 @@ void nr_ue_get_rach(NR_UE_MAC_INST_t *mac, int CC_id, frame_t frame, uint8_t gNB
}
}
if
(
ra
->
RA_contention_resolution_timer_active
)
{
if
(
is_nr_timer_active
(
ra
->
contention_resolution_timer
)
)
{
nr_ue_contention_resolution
(
mac
,
CC_id
,
frame
,
nr_slot_tx
,
prach_resources
);
}
}
...
...
@@ -826,16 +818,12 @@ void nr_ue_contention_resolution(NR_UE_MAC_INST_t *mac, int cc_id, frame_t frame
{
RA_config_t
*
ra
=
&
mac
->
ra
;
if
(
ra
->
RA_contention_resolution_timer_active
==
1
)
{
if
(
frame
>=
ra
->
RA_contention_resolution_target_frame
&&
slot
>=
ra
->
RA_contention_resolution_target_slot
)
{
ra
->
t_crnti
=
0
;
ra
->
RA_active
=
0
;
ra
->
RA_contention_resolution_timer_active
=
0
;
// Signal PHY to quit RA procedure
LOG_E
(
MAC
,
"[UE %d] CB-RA: Contention resolution timer has expired, RA procedure has failed...
\n
"
,
mac
->
ue_id
);
nr_ra_failed
(
mac
,
cc_id
,
prach_resources
,
frame
,
slot
);
}
if
(
nr_timer_expired
(
ra
->
contention_resolution_timer
))
{
ra
->
t_crnti
=
0
;
nr_timer_stop
(
&
ra
->
contention_resolution_timer
);
// Signal PHY to quit RA procedure
LOG_E
(
MAC
,
"[UE %d] CB-RA: Contention resolution timer has expired, RA procedure has failed...
\n
"
,
mac
->
ue_id
);
nr_ra_failed
(
mac
,
cc_id
,
prach_resources
,
frame
,
slot
);
}
}
...
...
@@ -852,7 +840,7 @@ void nr_ra_succeeded(NR_UE_MAC_INST_t *mac, const uint8_t gNB_index, const frame
ra
->
RA_window_cnt
=
-
1
;
}
else
{
LOG_A
(
MAC
,
"[UE %d][%d.%d][RAPROC] RA procedure succeeded. CB-RA: Contention Resolution is successful.
\n
"
,
mac
->
ue_id
,
frame
,
slot
);
ra
->
RA_contention_resolution_timer_active
=
0
;
nr_timer_stop
(
&
ra
->
contention_resolution_timer
)
;
mac
->
crnti
=
ra
->
t_crnti
;
ra
->
t_crnti
=
0
;
LOG_D
(
MAC
,
"[UE %d][%d.%d] CB-RA: cleared contention resolution timer...
\n
"
,
mac
->
ue_id
,
frame
,
slot
);
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
072d65a5
...
...
@@ -90,6 +90,11 @@ fapi_nr_ul_config_request_pdu_t *lockGet_ul_config(NR_UE_MAC_INST_t *mac, frame_
return
pdu
;
}
void
update_mac_timers
(
NR_UE_MAC_INST_t
*
mac
)
{
nr_timer_tick
(
&
mac
->
ra
.
contention_resolution_timer
);
}
void
remove_ul_config_last_item
(
fapi_nr_ul_config_request_pdu_t
*
pdu
)
{
pdu
->
privateNBpdus
--
;
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
View file @
072d65a5
...
...
@@ -1278,6 +1278,14 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info)
return
ret2
;
}
void
nr_ue_slot_indication
(
uint8_t
mod_id
)
{
pthread_mutex_lock
(
&
mac_IF_mutex
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
mod_id
);
update_mac_timers
(
mac
);
pthread_mutex_unlock
(
&
mac_IF_mutex
);
}
nr_ue_if_module_t
*
nr_ue_if_module_init
(
uint32_t
module_id
)
{
if
(
nr_ue_if_module_inst
[
module_id
]
==
NULL
)
{
...
...
@@ -1295,6 +1303,7 @@ nr_ue_if_module_t *nr_ue_if_module_init(uint32_t module_id)
nr_ue_if_module_inst
[
module_id
]
->
scheduled_response
=
nr_ue_scheduled_response
;
nr_ue_if_module_inst
[
module_id
]
->
dl_indication
=
nr_ue_dl_indication
;
nr_ue_if_module_inst
[
module_id
]
->
ul_indication
=
nr_ue_ul_indication
;
nr_ue_if_module_inst
[
module_id
]
->
slot_indication
=
nr_ue_slot_indication
;
}
pthread_mutex_init
(
&
mac_IF_mutex
,
NULL
);
...
...
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
View file @
072d65a5
...
...
@@ -245,6 +245,7 @@ typedef int (nr_ue_dl_indication_f)(nr_downlink_indication_t *dl_info);
*/
typedef
int
(
nr_ue_ul_indication_f
)(
nr_uplink_indication_t
*
ul_info
);
typedef
void
(
nr_ue_slot_indication_f
)(
uint8_t
mod_id
);
/*
* Generic type of an application-defined callback to return various
...
...
@@ -263,6 +264,7 @@ typedef struct nr_ue_if_module_s {
nr_ue_dl_indication_f
*
dl_indication
;
nr_ue_ul_indication_f
*
ul_indication
;
nr_ue_sl_indication_f
*
sl_indication
;
nr_ue_slot_indication_f
*
slot_indication
;
uint32_t
cc_mask
;
uint32_t
current_frame
;
uint32_t
current_slot
;
...
...
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