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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
4814443b
Commit
4814443b
authored
Oct 31, 2024
by
Sakthivel Velumani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix RA-RNTI computation according to 3GPP
t_id for long prach formats is computed with mu = 0.
parent
ecbb0bab
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
63 additions
and
14 deletions
+63
-14
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+21
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
+2
-0
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+11
-5
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+29
-9
No files found.
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
4814443b
...
...
@@ -1755,6 +1755,27 @@ int get_nr_prach_occasion_info_from_index(uint8_t index,
}
}
uint16_t
get_nr_prach_format_from_index
(
uint8_t
index
,
uint32_t
pointa
,
uint8_t
unpaired
)
{
uint8_t
format2
=
0xff
;
uint16_t
format
;
if
(
pointa
>
2016666
)
{
// FR2
if
(
table_6_3_3_2_4_prachConfig_Index
[
index
][
1
]
!=
-
1
)
format2
=
(
uint8_t
)
table_6_3_3_2_4_prachConfig_Index
[
index
][
1
];
format
=
((
uint8_t
)
table_6_3_3_2_4_prachConfig_Index
[
index
][
0
])
|
(
format2
<<
8
);
}
else
{
if
(
unpaired
)
{
if
(
table_6_3_3_2_3_prachConfig_Index
[
index
][
1
]
!=
-
1
)
format2
=
(
uint8_t
)
table_6_3_3_2_3_prachConfig_Index
[
index
][
1
];
format
=
((
uint8_t
)
table_6_3_3_2_3_prachConfig_Index
[
index
][
0
])
|
(
format2
<<
8
);
}
else
{
if
(
table_6_3_3_2_2_prachConfig_Index
[
index
][
1
]
!=
-
1
)
format2
=
(
uint8_t
)
table_6_3_3_2_2_prachConfig_Index
[
index
][
1
];
format
=
((
uint8_t
)
table_6_3_3_2_2_prachConfig_Index
[
index
][
0
])
|
(
format2
<<
8
);
}
}
return
format
;
}
int
get_nr_prach_info_from_index
(
uint8_t
index
,
int
frame
,
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h
View file @
4814443b
...
...
@@ -141,6 +141,8 @@ void find_aggregation_candidates(uint8_t *aggregation_level,
const
NR_SearchSpace_t
*
ss
,
int
maxL
);
uint16_t
get_nr_prach_format_from_index
(
uint8_t
index
,
uint32_t
pointa
,
uint8_t
unpaired
);
int
get_nr_prach_info_from_index
(
uint8_t
index
,
int
frame
,
int
slot
,
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
4814443b
...
...
@@ -2956,10 +2956,16 @@ static void nr_ue_prach_scheduler(NR_UE_MAC_INST_t *mac, frame_t frameP, sub_fra
nr_get_prach_resources
(
mac
,
0
,
0
,
&
ra
->
prach_resources
,
ra
->
rach_ConfigDedicated
);
pdu
->
prach_config_pdu
.
ra_PreambleIndex
=
ra
->
ra_PreambleIndex
;
pdu
->
prach_config_pdu
.
prach_tx_power
=
get_prach_tx_power
(
mac
);
mac
->
ra
.
ra_rnti
=
nr_get_ra_rnti
(
pdu
->
prach_config_pdu
.
prach_start_symbol
,
pdu
->
prach_config_pdu
.
prach_slot
,
pdu
->
prach_config_pdu
.
num_ra
,
0
);
unsigned
int
slot_RA
;
// 3GPP TS 38.321 Section 5.1.3 says t_id for RA-RNTI depends on mu as specified in clause 5.3.2 in TS 38.211
// so mu = 0 for prach format < 4.
if
(
pdu
->
prach_config_pdu
.
prach_format
<
4
)
{
unsigned
int
slots_per_sf
=
(
1
<<
mac
->
current_UL_BWP
->
scs
);
slot_RA
=
pdu
->
prach_config_pdu
.
prach_slot
/
slots_per_sf
;
}
else
{
slot_RA
=
pdu
->
prach_config_pdu
.
prach_slot
;
}
mac
->
ra
.
ra_rnti
=
nr_get_ra_rnti
(
pdu
->
prach_config_pdu
.
prach_start_symbol
,
slot_RA
,
pdu
->
prach_config_pdu
.
num_ra
,
0
);
release_ul_config
(
pdu
,
false
);
nr_scheduled_response_t
scheduled_response
=
{.
ul_config
=
mac
->
ul_config_request
+
slotP
,
.
mac
=
mac
,
...
...
@@ -3007,7 +3013,7 @@ static void nr_ue_prach_scheduler(NR_UE_MAC_INST_t *mac, frame_t frameP, sub_fra
// Compute MsgB RNTI
ra
->
MsgB_rnti
=
nr_get_MsgB_rnti
(
prach_occasion_info_p
->
start_symbol
,
prach_occasion_info_p
->
slot
,
prach_occasion_info_p
->
fdm
,
0
);
nr_get_MsgB_rnti
(
prach_occasion_info_p
->
start_symbol
,
slot_RA
,
prach_occasion_info_p
->
fdm
,
0
);
LOG_D
(
NR_MAC
,
"ra->ra_state %s
\n
"
,
nrra_ue_text
[
ra
->
ra_state
]);
ra
->
ra_state
=
nrRA_WAIT_MSGB
;
ra
->
t_crnti
=
0
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
4814443b
...
...
@@ -761,17 +761,37 @@ void nr_initiate_ra_proc(module_id_t module_idP,
ra
->
preamble_index
=
preamble_index
;
ra
->
timing_offset
=
timing_offset
;
ra
->
msg3_TPC
=
nr_get_msg3_tpc
(
preamble_power
);
uint8_t
ul_carrier_id
=
0
;
// 0 for NUL 1 for SUL
ra
->
RA_rnti
=
nr_get_ra_rnti
(
symbol
,
slotP
,
freq_index
,
ul_carrier_id
);
NR_ServingCellConfigCommon_t
*
scc
=
cc
->
ServingCellConfigCommon
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
ext1
&&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
ext1
->
msgA_ConfigCommon_r16
)
{
ra
->
ra_type
=
RA_2_STEP
;
ra
->
ra_state
=
nrRA_WAIT_MsgA_PUSCH
;
ra
->
MsgB_rnti
=
nr_get_MsgB_rnti
(
symbol
,
slotP
,
freq_index
,
ul_carrier_id
);
}
else
{
ra
->
ra_type
=
RA_4_STEP
;
ra
->
ra_state
=
nrRA_Msg2
;
{
// 3GPP TS 38.321 Section 5.1.3(a) says t_id for RA-RNTI depends on mu as specified in clause 5.3.2 in TS 38.211
// so mu = 0 for prach format < 4.
NR_RACH_ConfigCommon_t
*
rach_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
;
NR_MsgA_ConfigCommon_r16_t
*
msgacc
=
NULL
;
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
ext1
&&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
ext1
->
msgA_ConfigCommon_r16
)
msgacc
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
ext1
->
msgA_ConfigCommon_r16
->
choice
.
setup
;
const
int
ul_mu
=
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
scs_SpecificCarrierList
.
list
.
array
[
0
]
->
subcarrierSpacing
;
const
int
mu
=
nr_get_prach_or_ul_mu
(
msgacc
,
rach_ConfigCommon
,
ul_mu
);
uint8_t
index
=
rach_ConfigCommon
->
rach_ConfigGeneric
.
prach_ConfigurationIndex
;
uint16_t
prach_format
=
get_nr_prach_format_from_index
(
index
,
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
,
cc
->
frame_type
);
unsigned
int
slot_RA
;
if
((
prach_format
&
0xff
)
<
4
)
{
unsigned
int
slots_per_sf
=
(
1
<<
mu
);
slot_RA
=
slotP
/
slots_per_sf
;
}
else
{
slot_RA
=
slotP
;
}
uint8_t
ul_carrier_id
=
0
;
// 0 for NUL 1 for SUL
ra
->
RA_rnti
=
nr_get_ra_rnti
(
symbol
,
slot_RA
,
freq_index
,
ul_carrier_id
);
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
ext1
&&
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
ext1
->
msgA_ConfigCommon_r16
)
{
ra
->
ra_type
=
RA_2_STEP
;
ra
->
ra_state
=
nrRA_WAIT_MsgA_PUSCH
;
ra
->
MsgB_rnti
=
nr_get_MsgB_rnti
(
symbol
,
slot_RA
,
freq_index
,
ul_carrier_id
);
}
else
{
ra
->
ra_type
=
RA_4_STEP
;
ra
->
ra_state
=
nrRA_Msg2
;
}
}
int
index
=
ra
-
cc
->
ra
;
...
...
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