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
常顺宇
OpenXG-RAN
Commits
986a9fac
Commit
986a9fac
authored
Mar 16, 2021
by
rmagueta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed issues to allow coexistence of CFRA and CBRA implementations
parent
8646dd0b
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
191 additions
and
204 deletions
+191
-204
openair2/LAYER2/NR_MAC_UE/nr_l1_helpers.c
openair2/LAYER2/NR_MAC_UE/nr_l1_helpers.c
+4
-10
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
+102
-122
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
+2
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+4
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+27
-16
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+52
-52
No files found.
openair2/LAYER2/NR_MAC_UE/nr_l1_helpers.c
View file @
986a9fac
...
...
@@ -146,17 +146,11 @@ int nr_get_Po_NOMINAL_PUSCH(NR_PRACH_RESOURCES_t *prach_resources, module_id_t m
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
mod_id
);
NR_ServingCellConfigCommon_t
*
scc
=
mac
->
scc
;
int8_t
receivedTargerPower
,
delta_preamble
;
long
preambleReceivedTargetPower
=
0
;
int8_t
receivedTargerPower
;
int8_t
delta_preamble
;
if
(
prach_resources
->
RA_TYPE
==
RA_4STEP
){
NR_RACH_ConfigCommon_t
*
nr_rach_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
;
preambleReceivedTargetPower
=
nr_rach_ConfigCommon
->
rach_ConfigGeneric
.
preambleReceivedTargetPower
;
}
else
if
(
prach_resources
->
RA_TYPE
==
RA_2STEP
){
// msgA-PreambleReceivedTargetPower
LOG_E
(
MAC
,
"In %s:%d: missing implementation for 2-step RA...
\n
"
,
__FUNCTION__
,
__LINE__
);
}
long
preambleReceivedTargetPower
=
nr_rach_ConfigCommon
->
rach_ConfigGeneric
.
preambleReceivedTargetPower
;
delta_preamble
=
nr_get_DELTA_PREAMBLE
(
mod_id
,
CC_id
,
prach_resources
->
prach_format
);
receivedTargerPower
=
preambleReceivedTargetPower
+
delta_preamble
+
(
prach_resources
->
RA_PREAMBLE_POWER_RAMPING_COUNTER
-
1
)
*
prach_resources
->
RA_PREAMBLE_POWER_RAMPING_STEP
+
prach_resources
->
POWER_OFFSET_2STEP_RA
;
...
...
openair2/LAYER2/NR_MAC_UE/nr_ra_procedures.c
View file @
986a9fac
...
...
@@ -103,10 +103,6 @@ void init_RA(module_id_t mod_id,
LOG_E
(
MAC
,
"In %s: config not handled
\n
"
,
__FUNCTION__
);
}
if
(
prach_resources
->
RA_TYPE
==
RA_2STEP
){
LOG_E
(
MAC
,
"Missing implementation of initialization of 2-step RA specific variables...
\n
"
);
}
else
if
(
prach_resources
->
RA_TYPE
==
RA_4STEP
){
LOG_D
(
MAC
,
"Initialization of 4-step RA specific variables...
\n
"
);
switch
(
rach_ConfigGeneric
->
powerRampingStep
){
// in dB
case
0
:
prach_resources
->
RA_PREAMBLE_POWER_RAMPING_STEP
=
0
;
...
...
@@ -157,22 +153,19 @@ void init_RA(module_id_t mod_id,
ra
->
preambleTransMax
=
200
;
break
;
}
if
(
nr_rach_ConfigCommon
->
ext1
)
{
if
(
nr_rach_ConfigCommon
->
ext1
->
ra_PrioritizationForAccessIdentity
){
LOG_D
(
MAC
,
"In %s:%d: Missing implementation for Access Identity initialization procedures
\n
"
,
__FUNCTION__
,
__LINE__
);
}
}
}
return
;
}
void
ssb_rach_config
(
RA_config_t
*
ra
,
NR_PRACH_RESOURCES_t
*
prach_resources
,
NR_RACH_ConfigCommon_t
*
nr_rach_ConfigCommon
,
fapi_nr_ul_config_prach_pdu
*
prach_pdu
){
// Determine the SSB to RACH mapping ratio
// =======================================
if
(
prach_resources
->
RA_TYPE
==
RA_4STEP
){
NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
ssb_perRACH_config
=
nr_rach_ConfigCommon
->
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
->
present
;
boolean_t
multiple_ssb_per_ro
;
// true if more than one or exactly one SSB per RACH occasion, false if more than one RO per SSB
uint8_t
ssb_rach_ratio
;
// Nb of SSBs per RACH or RACHs per SSB
...
...
@@ -223,30 +216,24 @@ void ssb_rach_config(RA_config_t *ra, NR_PRACH_RESOURCES_t *prach_resources, NR_
break
;
default:
AssertFatal
(
1
==
0
,
"Unsupported ssb_perRACH_config %d
\n
"
,
ssb_perRACH_config
);
break
;
}
if
(
nr_rach_ConfigCommon
->
totalNumberOfRA_Preambles
)
numberOfRA_Preambles
=
*
(
nr_rach_ConfigCommon
->
totalNumberOfRA_Preambles
);
// Compute the proper Preamble selection params according to the selected SSB and the ssb_perRACH_OccasionAndCB_PreamblesPerSSB configuration
if
((
true
==
multiple_ssb_per_ro
)
&&
(
ssb_rach_ratio
>
1
))
{
if
((
true
==
multiple_ssb_per_ro
)
&&
(
ssb_rach_ratio
>
1
))
{
total_preambles_per_ssb
=
numberOfRA_Preambles
/
ssb_rach_ratio
;
ssb_nb_in_ro
=
prach_pdu
->
ssb_nb_in_ro
;
ra
->
starting_preamble_nb
=
total_preambles_per_ssb
*
ssb_nb_in_ro
;
}
else
{
}
else
{
total_preambles_per_ssb
=
numberOfRA_Preambles
;
ra
->
starting_preamble_nb
=
0
;
}
}
else
{
LOG_E
(
MAC
,
"In %s:%d: missing implementation for 2-step RA...
\n
"
,
__FUNCTION__
,
__LINE__
);
}
}
// This routine implements RA pre
ma
ble configuration according to
// This routine implements RA pre
am
ble configuration according to
// section 5.1 (Random Access procedure) of 3GPP TS 38.321 version 16.2.1 Release 16
void
ra_preambles_config
(
NR_PRACH_RESOURCES_t
*
prach_resources
,
NR_UE_MAC_INST_t
*
mac
,
int16_t
dl_pathloss
){
...
...
@@ -261,8 +248,6 @@ void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t
NR_RACH_ConfigCommon_t
*
nr_rach_ConfigCommon
=
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
rach_ConfigCommon
->
choice
.
setup
;
NR_RACH_ConfigGeneric_t
*
rach_ConfigGeneric
=
&
nr_rach_ConfigCommon
->
rach_ConfigGeneric
;
if
(
prach_resources
->
RA_TYPE
==
RA_4STEP
){
if
(
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
msg3_DeltaPreamble
){
deltaPreamble_Msg3
=
(
*
scc
->
uplinkConfigCommon
->
initialUplinkBWP
->
pusch_ConfigCommon
->
choice
.
setup
->
msg3_DeltaPreamble
)
*
2
;
// dB
LOG_D
(
MAC
,
"In %s: deltaPreamble_Msg3 set to %ld
\n
"
,
__FUNCTION__
,
deltaPreamble_Msg3
);
...
...
@@ -348,12 +333,7 @@ void ra_preambles_config(NR_PRACH_RESOURCES_t *prach_resources, NR_UE_MAC_INST_t
PLThreshold
=
prach_resources
->
RA_PCMAX
-
rach_ConfigGeneric
->
preambleReceivedTargetPower
-
deltaPreamble_Msg3
-
messagePowerOffsetGroupB
;
}
}
else
{
// todo:
// - groupB-ConfiguredTwoStepRA
// - msgA-DeltaPreamble
LOG_E
(
MAC
,
"In %s:%d: missing implementation for 2-step RA...
\n
"
,
__FUNCTION__
,
__LINE__
);
}
/* Msg3 has not been transmitted yet */
if
(
ra
->
first_Msg3
)
{
if
(
ra
->
ra_PreambleIndex
<
0
||
ra
->
ra_PreambleIndex
>
63
)
{
...
...
openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c
View file @
986a9fac
...
...
@@ -891,13 +891,12 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
uint16_t
TBS_bytes
=
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
tb_size
;
if
(
ra
->
ra_state
==
WAIT_RAR
){
if
(
ra
->
ra_state
==
WAIT_RAR
&&
!
ra
->
cfra
){
memcpy
(
ulsch_input_buffer
,
mac
->
ulsch_pdu
.
payload
,
TBS_bytes
);
LOG_D
(
NR_MAC
,
"[RAPROC] Msg3 to be transmitted:
\n
"
);
for
(
int
k
=
0
;
k
<
TBS_bytes
;
k
++
)
{
LOG_D
(
NR_MAC
,
"(%i): 0x%x
\n
"
,
k
,
mac
->
ulsch_pdu
.
payload
[
k
]);
}
LOG_I
(
NR_MAC
,
"[RAPROC] RA-Msg3 transmitted
\n
"
);
}
else
{
if
(
IS_SOFTMODEM_NOS1
&&
(
mac
->
UL_ndi
[
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
harq_process_id
]
!=
ulcfg_pdu
->
pusch_config_pdu
.
pusch_data
.
new_data_indicator
)){
// Getting IP traffic to be transmitted
...
...
@@ -947,6 +946,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in
tx_req
.
tx_request_body
[
0
].
pdu
=
ulsch_input_buffer
;
if
(
ra
->
ra_state
!=
RA_SUCCEEDED
&&
!
ra
->
cfra
){
LOG_I
(
NR_MAC
,
"[RAPROC] RA-Msg3 transmitted
\n
"
);
nr_Msg3_transmitted
(
ul_info
->
module_id
,
ul_info
->
cc_id
,
ul_info
->
frame_tx
,
ul_info
->
gNB_index
);
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
986a9fac
...
...
@@ -1033,7 +1033,9 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
nr_get_Msg3alloc
(
module_idP
,
CC_id
,
scc
,
ubwp
,
slotP
,
frameP
,
ra
);
nr_add_msg3
(
module_idP
,
CC_id
,
frameP
,
slotP
,
ra
,
(
uint8_t
*
)
&
tx_req
->
TLVs
[
0
].
value
.
direct
[
0
]);
if
(
ra
->
cfra
)
{
LOG_I
(
MAC
,
"Frame %d, Subframe %d: Setting RA-Msg3 reception for Frame %d Subframe %d
\n
"
,
frameP
,
slotP
,
ra
->
Msg3_frame
,
ra
->
Msg3_slot
);
}
T
(
T_GNB_MAC_DL_RAR_PDU_WITH_DATA
,
T_INT
(
module_idP
),
T_INT
(
CC_id
),
T_INT
(
ra
->
RA_rnti
),
T_INT
(
frameP
),
T_INT
(
slotP
),
T_INT
(
0
),
T_BUFFER
(
&
tx_req
->
TLVs
[
0
].
value
.
direct
[
0
],
tx_req
->
TLVs
[
0
].
length
));
...
...
@@ -1364,7 +1366,7 @@ void nr_check_Msg4_Ack(module_id_t module_id, int CC_id, frame_t frame, sub_fram
nr_clear_ra_proc
(
module_id
,
CC_id
,
frame
,
ra
);
free
(
ra
->
preambles
.
preamble_list
);
UE_info
->
active
[
UE_id
]
=
true
;
LOG_I
(
NR_MAC
,
"(ue %i, rnti 0x%04x) Received Ack of RA-Msg4. RA procedure succeeded!
\n
"
,
UE_id
,
ra
->
rnti
);
LOG_I
(
NR_MAC
,
"(ue %i, rnti 0x%04x) Received Ack of RA-Msg4.
CB
RA procedure succeeded!
\n
"
,
UE_id
,
ra
->
rnti
);
}
else
{
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
986a9fac
...
...
@@ -513,10 +513,19 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
UE_id
,
ra
->
rnti
);
if
(
ra
->
cfra
)
{
LOG_I
(
NR_MAC
,
"(ue %i, rnti 0x%04x) CFRA procedure succeeded!
\n
"
,
UE_id
,
ra
->
rnti
);
nr_clear_ra_proc
(
gnb_mod_idP
,
CC_idP
,
frameP
,
ra
);
free
(
ra
->
preambles
.
preamble_list
);
UE_info
->
active
[
UE_id
]
=
true
;
}
else
{
LOG_I
(
NR_MAC
,
"[RAPROC] RA-Msg3 received
\n
"
);
LOG_D
(
NR_MAC
,
"[RAPROC] Received Msg3:
\n
"
);
LOG_I
(
NR_MAC
,
"[RAPROC] Received Msg3:
\n
"
);
for
(
int
k
=
0
;
k
<
sdu_lenP
;
k
++
)
{
LOG_D
(
NR_MAC
,
"(%i): 0x%x
\n
"
,
k
,
sduP
[
k
]);
LOG_I
(
NR_MAC
,
"(%i): 0x%x
\n
"
,
k
,
sduP
[
k
]);
}
// UE Contention Resolution Identity
...
...
@@ -533,6 +542,8 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
ra
->
Msg4_frame
=
(
frameP
+
2
)
%
1024
;
ra
->
Msg4_slot
=
1
;
LOG_I
(
MAC
,
"Scheduling RA-Msg4 for TC-RNTI %04x (state %d, frame %d, slot %d)
\n
"
,
ra
->
rnti
,
ra
->
state
,
ra
->
Msg4_frame
,
ra
->
Msg4_slot
);
}
return
;
}
...
...
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
986a9fac
...
...
@@ -228,7 +228,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
ext1
=
NULL
;
// For 2-step contention-free random access procedure
#if 0
if
(
get_softmodem_params
()
->
sa
==
0
)
{
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
rach_ConfigDedicated
=
calloc
(
1
,
sizeof
(
struct
NR_ReconfigurationWithSync__rach_ConfigDedicated
));
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
rach_ConfigDedicated
->
present
=
NR_ReconfigurationWithSync__rach_ConfigDedicated_PR_uplink
;
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
rach_ConfigDedicated
->
choice
.
uplink
=
calloc
(
1
,
sizeof
(
struct
NR_RACH_ConfigDedicated
));
...
...
@@ -279,7 +279,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
ASN_SEQUENCE_ADD
(
&
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
rach_ConfigDedicated
->
choice
.
uplink
->
cfra
->
resources
.
choice
.
ssb
->
ssb_ResourceList
.
list
,
ssbElem
[
7
]);
secondaryCellGroup
->
spCellConfig
->
reconfigurationWithSync
->
rach_ConfigDedicated
->
choice
.
uplink
->
cfra
->
ext1
=
NULL
;
#endif
}
secondaryCellGroup
->
spCellConfig
->
rlf_TimersAndConstants
=
calloc
(
1
,
sizeof
(
*
secondaryCellGroup
->
spCellConfig
->
rlf_TimersAndConstants
));
secondaryCellGroup
->
spCellConfig
->
rlf_TimersAndConstants
->
present
=
NR_SetupRelease_RLF_TimersAndConstants_PR_setup
;
...
...
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