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
wangjie
OpenXG-RAN
Commits
986a9fac
Commit
986a9fac
authored
3 years ago
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
;
...
...
This diff is collapsed.
Click to expand it.
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
)
{
...
...
This diff is collapsed.
Click to expand it.
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
);
}
...
...
This diff is collapsed.
Click to expand it.
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
{
...
...
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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