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
94aeb438
Commit
94aeb438
authored
May 04, 2022
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_RRC_processing_timer' into integration_2022_wk18
parents
ada4be08
114dcc6a
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
217 additions
and
106 deletions
+217
-106
doc/RUNMODEM.md
doc/RUNMODEM.md
+2
-2
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+1
-2
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+21
-4
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+2
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
+7
-0
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+32
-30
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+76
-9
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c
+1
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
+3
-1
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+5
-10
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+10
-0
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+2
-3
openair2/RRC/NR/nr_rrc_defs.h
openair2/RRC/NR/nr_rrc_defs.h
+5
-1
openair2/RRC/NR/rrc_gNB.c
openair2/RRC/NR/rrc_gNB.c
+35
-0
openair2/RRC/NR/rrc_gNB_nsa.c
openair2/RRC/NR/rrc_gNB_nsa.c
+2
-3
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
+0
-1
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
+0
-1
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf
...-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf
+0
-1
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
...ENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
+4
-10
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf
...ENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf
+0
-1
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
...IC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
+1
-7
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
...ENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
+4
-10
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
...IC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
+4
-9
No files found.
doc/RUNMODEM.md
View file @
94aeb438
...
...
@@ -165,7 +165,7 @@ From the `cmake_targets/ran_build/build` folder:
gNB on machine 1:
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --sa`
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --
gNBs.[0].min_rxtxtime 6 --
sa`
UE on machine 2:
...
...
@@ -173,7 +173,7 @@ UE on machine 2:
With the RF simulator (on the same machine):
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --rfsim --sa`
`sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --
gNBs.[0].min_rxtxtime 6 --
rfsim --sa`
`sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 -s 516 --rfsim --sa`
...
...
openair2/GNB_APP/gnb_config.c
View file @
94aeb438
...
...
@@ -2065,8 +2065,7 @@ void configure_gnb_du_mac(int inst) {
NULL
,
0
,
0
,
// rnti
(
NR_CellGroupConfig_t
*
)
NULL
);
NULL
);
}
...
...
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
94aeb438
...
...
@@ -451,6 +451,26 @@ void config_common(int Mod_idP, int ssb_SubcarrierOffset, rrc_pdsch_AntennaPorts
}
int
nr_mac_enable_ue_rrc_processing_timer
(
module_id_t
Mod_idP
,
rnti_t
rnti
,
NR_SubcarrierSpacing_t
subcarrierSpacing
,
uint32_t
rrc_reconfiguration_delay
)
{
if
(
rrc_reconfiguration_delay
==
0
)
{
return
-
1
;
}
const
int
UE_id
=
find_nr_UE_id
(
Mod_idP
,
rnti
);
if
(
UE_id
<
0
)
{
LOG_W
(
NR_MAC
,
"Could not find UE for RNTI 0x%04x
\n
"
,
rnti
);
return
-
1
;
}
NR_UE_info_t
*
UE_info
=
&
RC
.
nrmac
[
Mod_idP
]
->
UE_info
;
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
const
uint16_t
sf_ahead
=
6
/
(
0x01
<<
subcarrierSpacing
)
+
((
6
%
(
0x01
<<
subcarrierSpacing
))
>
0
);
const
uint16_t
sl_ahead
=
sf_ahead
*
(
0x01
<<
subcarrierSpacing
);
sched_ctrl
->
rrc_processing_timer
=
(
rrc_reconfiguration_delay
<<
subcarrierSpacing
)
+
sl_ahead
;
LOG_I
(
NR_MAC
,
"Activating RRC processing timer for UE %d
\n
"
,
UE_id
);
return
0
;
}
int
rrc_mac_config_req_gNB
(
module_id_t
Mod_idP
,
int
ssb_SubcarrierOffset
,
...
...
@@ -653,8 +673,6 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP,
LOG_I
(
NR_MAC
,
"Modified UE_id %d/%x with CellGroup
\n
"
,
UE_id
,
rnti
);
process_CellGroup
(
CellGroup
,
&
UE_info
->
UE_sched_ctrl
[
UE_id
]);
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
sched_ctrl
->
update_pdsch_ps
=
true
;
sched_ctrl
->
update_pusch_ps
=
true
;
const
NR_PDSCH_ServingCellConfig_t
*
pdsch
=
servingCellConfig
?
servingCellConfig
->
pdsch_ServingCellConfig
->
choice
.
setup
:
NULL
;
if
(
get_softmodem_params
()
->
sa
)
{
// add all available DL HARQ processes for this UE in SA
...
...
@@ -694,7 +712,6 @@ int rrc_mac_config_req_gNB(module_id_t Mod_idP,
}
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG
,
VCD_FUNCTION_OUT
);
return
(
0
);
return
0
;
}
// END rrc_mac_config_req_gNB
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
View file @
94aeb438
...
...
@@ -346,6 +346,8 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
LOG_I
(
NR_MAC
,
"Frame.Slot %d.%d
\n
%s
\n
"
,
frame
,
slot
,
stats_output
);
}
nr_mac_update_timers
(
module_idP
,
frame
,
slot
);
// This schedules MIB
schedule_nr_mib
(
module_idP
,
frame
,
slot
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c
View file @
94aeb438
...
...
@@ -1956,6 +1956,13 @@ void nr_check_Msg4_Ack(module_id_t module_id, int CC_id, frame_t frame, sub_fram
LOG_I
(
NR_MAC
,
"(ue %i, rnti 0x%04x) Received Ack of RA-Msg4. CBRA procedure succeeded!
\n
"
,
UE_id
,
ra
->
rnti
);
UE_info
->
active
[
UE_id
]
=
true
;
UE_info
->
Msg4_ACKed
[
UE_id
]
=
true
;
const
NR_SIB1_t
*
sib1
=
RC
.
nrmac
[
module_id
]
->
common_channels
[
0
].
sib1
?
RC
.
nrmac
[
module_id
]
->
common_channels
[
0
].
sib1
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
:
NULL
;
NR_BWP_t
*
genericParameters
=
get_dl_bwp_genericParameters
(
sched_ctrl
->
active_bwp
,
RC
.
nrmac
[
module_id
]
->
common_channels
[
0
].
ServingCellConfigCommon
,
sib1
);
// 3GPP TS 38.331 Section 12 Table 12.1-1: UE performance requirements for RRC procedures for UEs
sched_ctrl
->
rrc_processing_timer
=
(
NR_RRC_SETUP_DELAY_MS
<<
genericParameters
->
subcarrierSpacing
);
// RRCSetup 10 ms
}
else
{
LOG_I
(
NR_MAC
,
"(ue %i, rnti 0x%04x) RA Procedure failed at Msg4!
\n
"
,
UE_id
,
ra
->
rnti
);
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
94aeb438
...
...
@@ -488,17 +488,22 @@ void nr_store_dlsch_buffer(module_id_t module_id,
const
int
lcid
=
sched_ctrl
->
dl_lc_ids
[
i
];
const
uint16_t
rnti
=
UE_info
->
rnti
[
UE_id
];
LOG_D
(
NR_MAC
,
"In %s: UE %d/%x: LCID %d
\n
"
,
__FUNCTION__
,
UE_id
,
rnti
,
lcid
);
if
(
lcid
==
DL_SCH_LCID_DTCH
&&
sched_ctrl
->
rrc_processing_timer
>
0
)
{
continue
;
}
start_meas
(
&
RC
.
nrmac
[
module_id
]
->
rlc_status_ind
);
sched_ctrl
->
rlc_status
[
lcid
]
=
mac_rlc_status_ind
(
module_id
,
rnti
,
module_id
,
frame
,
slot
,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
lcid
,
0
,
0
);
rnti
,
module_id
,
frame
,
slot
,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
lcid
,
0
,
0
);
stop_meas
(
&
RC
.
nrmac
[
module_id
]
->
rlc_status_ind
);
if
(
sched_ctrl
->
rlc_status
[
lcid
].
bytes_in_buffer
==
0
)
...
...
@@ -588,7 +593,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
/* check whether we need to switch the TDA allocation since the last
* (re-)transmission */
if
(
ps
->
time_domain_allocation
!=
tda
||
sched_ctrl
->
update_pdsch_ps
)
{
if
(
ps
->
time_domain_allocation
!=
tda
)
{
nr_set_pdsch_semi_static
(
sib1
,
scc
,
cg
,
...
...
@@ -598,7 +603,6 @@ bool allocate_dl_retransmission(module_id_t module_id,
ps
->
nrOfLayers
,
sched_ctrl
,
ps
);
sched_ctrl
->
update_pdsch_ps
=
false
;
}
}
else
{
/* the retransmission will use a different time domain allocation, check
...
...
@@ -914,7 +918,7 @@ void pf_dl(module_id_t module_id,
NR_sched_pdsch_t
*
sched_pdsch
=
&
sched_ctrl
->
sched_pdsch
;
NR_pdsch_semi_static_t
*
ps
=
&
sched_ctrl
->
pdsch_semi_static
;
if
(
ps
->
nrOfLayers
!=
layers
[
UE_id
]
||
ps
->
time_domain_allocation
!=
tda
||
sched_ctrl
->
update_pdsch_ps
)
{
if
(
ps
->
nrOfLayers
!=
layers
[
UE_id
]
||
ps
->
time_domain_allocation
!=
tda
)
{
nr_set_pdsch_semi_static
(
sib1
,
scc
,
UE_info
->
CellGroup
[
UE_id
],
...
...
@@ -924,7 +928,6 @@ void pf_dl(module_id_t module_id,
layers
[
UE_id
],
sched_ctrl
,
ps
);
sched_ctrl
->
update_pdsch_ps
=
false
;
}
const
uint16_t
slbitmap
=
SL_to_bitmap
(
ps
->
startSymbolIndex
,
ps
->
nrOfSymbols
);
...
...
@@ -1057,14 +1060,13 @@ nr_pp_impl_dl nr_init_fr1_dlsch_preprocessor(module_id_t module_id, int CC_id) {
const
uint8_t
Qm
=
nr_get_Qm_dl
(
mcs
,
mcsTableIdx
);
const
uint16_t
R
=
nr_get_code_rate_dl
(
mcs
,
mcsTableIdx
);
pf_tbs
[
mcsTableIdx
][
mcs
]
=
nr_compute_tbs
(
Qm
,
R
,
1
,
/* rbSize */
10
,
/* hypothetical number of slots */
0
,
/* N_PRB_DMRS * N_DMRS_SLOT */
0
/* N_PRB_oh, 0 for initialBWP */
,
0
/* tb_scaling */
,
1
/* nrOfLayers */
)
>>
3
;
R
,
1
,
/* rbSize */
10
,
/* hypothetical number of slots */
0
,
/* N_PRB_DMRS * N_DMRS_SLOT */
0
/* N_PRB_oh, 0 for initialBWP */
,
0
/* tb_scaling */
,
1
/* nrOfLayers */
)
>>
3
;
}
}
...
...
@@ -1274,15 +1276,15 @@ void nr_schedule_ue_spec(module_id_t module_id,
if
(
phaseTrackingRS
)
{
bool
valid_ptrs_setup
=
set_dl_ptrs_values
(
phaseTrackingRS
->
choice
.
setup
,
pdsch_pdu
->
rbSize
,
pdsch_pdu
->
mcsIndex
[
0
],
pdsch_pdu
->
mcsTable
[
0
],
&
pdsch_pdu
->
PTRSFreqDensity
,
&
pdsch_pdu
->
PTRSTimeDensity
,
&
pdsch_pdu
->
PTRSPortIndex
,
&
pdsch_pdu
->
nEpreRatioOfPDSCHToPTRS
,
&
pdsch_pdu
->
PTRSReOffset
,
pdsch_pdu
->
NrOfSymbols
);
pdsch_pdu
->
rbSize
,
pdsch_pdu
->
mcsIndex
[
0
],
pdsch_pdu
->
mcsTable
[
0
],
&
pdsch_pdu
->
PTRSFreqDensity
,
&
pdsch_pdu
->
PTRSTimeDensity
,
&
pdsch_pdu
->
PTRSPortIndex
,
&
pdsch_pdu
->
nEpreRatioOfPDSCHToPTRS
,
&
pdsch_pdu
->
PTRSReOffset
,
pdsch_pdu
->
NrOfSymbols
);
if
(
valid_ptrs_setup
)
pdsch_pdu
->
pduBitmap
|=
0x1
;
// Bit 0: pdschPtrs - Indicates PTRS included (FR2)
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
94aeb438
...
...
@@ -580,16 +580,24 @@ void nr_set_pdsch_semi_static(const NR_SIB1_t *sib1,
bwpd
=
(
NR_BWP_DownlinkDedicated_t
*
)
bwpd0
;
}
if
(
bwpd
&&
bwpd
->
pdsch_Config
&&
bwpd
->
pdsch_Config
->
choice
.
setup
&&
bwpd
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
)
{
if
(
*
bwpd
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
==
0
)
ps
->
mcsTableIdx
=
1
;
else
ps
->
mcsTableIdx
=
2
;
// Prevent gNB to enable 256QAM table while the RRCProcessing timer is running.
// For example, after the RRC created RRC Reconfiguration message we need to prevent gNB to apply another MCS table
// before the RRC Reconfiguration being received by the UE, otherwise UE will not be able to decode PDSCH
// and the connection will drop.
if
(
sched_ctrl
->
rrc_processing_timer
==
0
)
{
if
(
bwpd
&&
bwpd
->
pdsch_Config
&&
bwpd
->
pdsch_Config
->
choice
.
setup
&&
bwpd
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
)
{
if
(
*
bwpd
->
pdsch_Config
->
choice
.
setup
->
mcs_Table
==
0
)
{
ps
->
mcsTableIdx
=
1
;
}
else
{
ps
->
mcsTableIdx
=
2
;
}
}
else
{
ps
->
mcsTableIdx
=
0
;
}
}
else
ps
->
mcsTableIdx
=
0
;
LOG_D
(
NR_MAC
,
"MCS Table Index: %d
\n
"
,
ps
->
mcsTableIdx
);
NR_PDSCH_Config_t
*
pdsch_Config
=
NULL
;
...
...
@@ -2614,6 +2622,11 @@ void nr_csirs_scheduling(int Mod_idP,
for
(
int
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
if
(
sched_ctrl
->
rrc_processing_timer
>
0
)
{
continue
;
}
NR_CellGroupConfig_t
*
CellGroup
=
UE_info
->
CellGroup
[
UE_id
];
if
(
!
CellGroup
||
!
CellGroup
->
spCellConfig
||
!
CellGroup
->
spCellConfig
->
spCellConfigDedicated
||
...
...
@@ -2802,6 +2815,60 @@ void nr_csirs_scheduling(int Mod_idP,
}
}
void
nr_mac_update_timers
(
module_id_t
module_id
,
frame_t
frame
,
sub_frame_t
slot
)
{
NR_UE_info_t
*
UE_info
=
&
RC
.
nrmac
[
module_id
]
->
UE_info
;
const
NR_list_t
*
UE_list
=
&
UE_info
->
list
;
for
(
int
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
if
(
sched_ctrl
->
rrc_processing_timer
>
0
)
{
sched_ctrl
->
rrc_processing_timer
--
;
if
(
sched_ctrl
->
rrc_processing_timer
==
0
)
{
LOG_I
(
NR_MAC
,
"(%d.%d) De-activating RRC processing timer for UE %d
\n
"
,
frame
,
slot
,
UE_id
);
const
NR_SIB1_t
*
sib1
=
RC
.
nrmac
[
module_id
]
->
common_channels
[
0
].
sib1
?
RC
.
nrmac
[
module_id
]
->
common_channels
[
0
].
sib1
->
message
.
choice
.
c1
->
choice
.
systemInformationBlockType1
:
NULL
;
NR_ServingCellConfigCommon_t
*
scc
=
RC
.
nrmac
[
module_id
]
->
common_channels
[
0
].
ServingCellConfigCommon
;
NR_BWP_DownlinkDedicated_t
*
bwpd
=
UE_info
->
CellGroup
[
UE_id
]
&&
UE_info
->
CellGroup
[
UE_id
]
->
spCellConfig
&&
UE_info
->
CellGroup
[
UE_id
]
->
spCellConfig
->
spCellConfigDedicated
?
UE_info
->
CellGroup
[
UE_id
]
->
spCellConfig
->
spCellConfigDedicated
->
initialDownlinkBWP
:
NULL
;
const
uint8_t
layers
=
set_dl_nrOfLayers
(
sched_ctrl
);
const
int
tda
=
RC
.
nrmac
[
module_id
]
->
preferred_dl_tda
[
sched_ctrl
->
active_bwp
?
sched_ctrl
->
active_bwp
->
bwp_Id
:
0
][
slot
];
nr_set_pdsch_semi_static
(
sib1
,
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
bwpd
,
tda
>=
0
?
tda
:
sched_ctrl
->
pdsch_semi_static
.
time_domain_allocation
,
layers
,
sched_ctrl
,
&
sched_ctrl
->
pdsch_semi_static
);
NR_BWP_UplinkDedicated_t
*
ubwpd
=
UE_info
->
CellGroup
[
UE_id
]
&&
UE_info
->
CellGroup
[
UE_id
]
->
spCellConfig
&&
UE_info
->
CellGroup
[
UE_id
]
->
spCellConfig
->
spCellConfigDedicated
&&
UE_info
->
CellGroup
[
UE_id
]
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
?
UE_info
->
CellGroup
[
UE_id
]
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
initialUplinkBWP
:
NULL
;
const
uint8_t
num_dmrs_cdm_grps_no_data
=
(
sched_ctrl
->
active_ubwp
||
ubwpd
)
?
1
:
2
;
int
dci_format
=
get_dci_format
(
sched_ctrl
);
const
int
utda
=
sched_ctrl
->
active_ubwp
?
RC
.
nrmac
[
module_id
]
->
preferred_ul_tda
[
sched_ctrl
->
active_ubwp
->
bwp_Id
][
slot
]
:
0
;
nr_set_pusch_semi_static
(
sib1
,
scc
,
sched_ctrl
->
active_ubwp
,
ubwpd
,
dci_format
,
utda
>=
0
?
utda
:
sched_ctrl
->
pusch_semi_static
.
time_domain_allocation
,
num_dmrs_cdm_grps_no_data
,
&
sched_ctrl
->
pusch_semi_static
);
}
}
}
}
/*void fill_nfapi_coresets_and_searchspaces(NR_CellGroupConfig_t *cg,
nfapi_nr_coreset_t *coreset,
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c
View file @
94aeb438
...
...
@@ -125,7 +125,7 @@ void nr_schedule_srs(int module_id, frame_t frame) {
sched_ctrl
->
sched_srs
.
slot
=
-
1
;
sched_ctrl
->
sched_srs
.
srs_scheduled
=
false
;
if
(
!
UE_info
->
Msg4_ACKed
[
UE_id
])
{
if
(
!
UE_info
->
Msg4_ACKed
[
UE_id
]
||
sched_ctrl
->
rrc_processing_timer
>
0
)
{
continue
;
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
View file @
94aeb438
...
...
@@ -705,7 +705,9 @@ void nr_csi_meas_reporting(int Mod_idP,
for
(
int
UE_id
=
UE_list
->
head
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next
[
UE_id
])
{
const
NR_CellGroupConfig_t
*
CellGroup
=
UE_info
->
CellGroup
[
UE_id
];
NR_UE_sched_ctrl_t
*
sched_ctrl
=
&
UE_info
->
UE_sched_ctrl
[
UE_id
];
if
(
sched_ctrl
->
ul_failure
==
1
&&
get_softmodem_params
()
->
phy_test
==
0
)
continue
;
if
((
sched_ctrl
->
rrc_processing_timer
>
0
)
||
(
sched_ctrl
->
ul_failure
==
1
&&
get_softmodem_params
()
->
phy_test
==
0
))
{
continue
;
}
if
(
!
CellGroup
||
!
CellGroup
->
spCellConfig
||
!
CellGroup
->
spCellConfig
->
spCellConfigDedicated
||
!
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
)
continue
;
const
NR_CSI_MeasConfig_t
*
csi_measconfig
=
CellGroup
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
View file @
94aeb438
...
...
@@ -992,8 +992,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
if
(
ps
->
time_domain_allocation
!=
tda
||
ps
->
dci_format
!=
dci_format
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
||
sched_ctrl
->
update_pusch_ps
)
{
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
)
{
nr_set_pusch_semi_static
(
sib1
,
scc
,
sched_ctrl
->
active_ubwp
,
...
...
@@ -1002,7 +1001,6 @@ bool allocate_ul_retransmission(module_id_t module_id,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
sched_ctrl
->
update_pusch_ps
=
false
;
}
/* Check the resource is enough for retransmission */
...
...
@@ -1205,8 +1203,9 @@ void pf_ul(module_id_t module_id,
const
bool
do_sched
=
nr_UE_is_to_be_scheduled
(
module_id
,
0
,
UE_id
,
sched_pusch
->
frame
,
sched_pusch
->
slot
);
LOG_D
(
NR_MAC
,
"pf_ul: do_sched UE %d => %s
\n
"
,
UE_id
,
do_sched
?
"yes"
:
"no"
);
if
(
B
==
0
&&
!
do_sched
)
if
(
(
B
==
0
&&
!
do_sched
)
||
(
sched_ctrl
->
rrc_processing_timer
>
0
))
{
continue
;
}
/* Schedule UE on SR or UL inactivity and no data (otherwise, will be scheduled
* based on data to transmit) */
...
...
@@ -1250,8 +1249,7 @@ void pf_ul(module_id_t module_id,
const
int
tda
=
sched_ctrl
->
active_ubwp
?
nrmac
->
preferred_ul_tda
[
sched_ctrl
->
active_ubwp
->
bwp_Id
][
slot
]
:
0
;
if
(
ps
->
time_domain_allocation
!=
tda
||
ps
->
dci_format
!=
dci_format
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
||
sched_ctrl
->
update_pusch_ps
)
{
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
)
{
nr_set_pusch_semi_static
(
sib1
,
scc
,
sched_ctrl
->
active_ubwp
,
...
...
@@ -1260,7 +1258,6 @@ void pf_ul(module_id_t module_id,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
sched_ctrl
->
update_pusch_ps
=
false
;
}
LOG_D
(
NR_MAC
,
"Looking for min_rb %d RBs, starting at %d
\n
"
,
min_rb
,
rbStart
);
...
...
@@ -1388,8 +1385,7 @@ void pf_ul(module_id_t module_id,
const
int
tda
=
sched_ctrl
->
active_ubwp
?
nrmac
->
preferred_ul_tda
[
sched_ctrl
->
active_ubwp
->
bwp_Id
][
slot
]
:
0
;
if
(
ps
->
time_domain_allocation
!=
tda
||
ps
->
dci_format
!=
dci_format
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
||
sched_ctrl
->
update_pusch_ps
)
{
||
ps
->
num_dmrs_cdm_grps_no_data
!=
num_dmrs_cdm_grps_no_data
)
{
nr_set_pusch_semi_static
(
sib1
,
scc
,
sched_ctrl
->
active_ubwp
,
...
...
@@ -1398,7 +1394,6 @@ void pf_ul(module_id_t module_id,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
sched_ctrl
->
update_pusch_ps
=
false
;
}
update_ul_ue_R_Qm
(
sched_pusch
,
ps
);
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
94aeb438
...
...
@@ -46,6 +46,11 @@ void config_common(int Mod_idP,
int
pusch_AntennaPorts
,
NR_ServingCellConfigCommon_t
*
scc
);
int
nr_mac_enable_ue_rrc_processing_timer
(
module_id_t
Mod_idP
,
rnti_t
rnti
,
NR_SubcarrierSpacing_t
subcarrierSpacing
,
uint32_t
rrc_reconfiguration_delay
);
int
rrc_mac_config_req_gNB
(
module_id_t
Mod_idP
,
int
ssb_SubcarrierOffset
,
rrc_pdsch_AntennaPorts_t
pdsch_AntennaPorts
,
...
...
@@ -64,6 +69,10 @@ void clear_nr_nfapi_information(gNB_MAC_INST * gNB,
frame_t
frameP
,
sub_frame_t
subframeP
);
void
nr_mac_update_timers
(
module_id_t
module_id
,
frame_t
frame
,
sub_frame_t
slot
);
void
gNB_dlsch_ulsch_scheduler
(
module_id_t
module_idP
,
frame_t
frame_rxP
,
sub_frame_t
slot_rxP
);
...
...
@@ -500,6 +509,7 @@ void set_dl_mcs(NR_sched_pdsch_t *sched_pdsch,
uint8_t
set_dl_nrOfLayers
(
NR_UE_sched_ctrl_t
*
sched_ctrl
);
int
get_dci_format
(
NR_UE_sched_ctrl_t
*
sched_ctrl
);
void
calculate_preferred_dl_tda
(
module_id_t
module_id
,
const
NR_BWP_Downlink_t
*
bwp
);
void
calculate_preferred_ul_tda
(
module_id_t
module_id
,
const
NR_BWP_Uplink_t
*
ubwp
);
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
94aeb438
...
...
@@ -626,8 +626,6 @@ typedef struct {
int
ul_failure
;
struct
CSI_Report
CSI_report
;
bool
SR
;
bool
update_pdsch_ps
;
bool
update_pusch_ps
;
bool
set_mcs
;
/// information about every HARQ process
NR_UE_harq_t
harq_processes
[
NR_MAX_NB_HARQ_PROCESSES
];
...
...
@@ -646,12 +644,13 @@ typedef struct {
/// UL HARQ processes that await retransmission
NR_list_t
retrans_ul_harq
;
NR_UE_mac_ce_ctrl_t
UE_mac_ce_ctrl
;
// MAC CE related information
/// number of active DL LCs
uint8_t
dl_lc_num
;
/// order in which DLSCH scheduler should allocate LCs
uint8_t
dl_lc_ids
[
NR_MAX_NUM_LCID
];
/// Timer for RRC processing procedures
uint32_t
rrc_processing_timer
;
}
NR_UE_sched_ctrl_t
;
typedef
struct
{
...
...
openair2/RRC/NR/nr_rrc_defs.h
View file @
94aeb438
...
...
@@ -96,6 +96,10 @@ typedef struct nr_uid_linear_allocator_s {
#define PROTOCOL_NR_RRC_CTXT_FMT PROTOCOL_CTXT_FMT
#define PROTOCOL_NR_RRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_NR_CTXT_ARGS(CTXT_Pp)
// 3GPP TS 38.331 Section 12 Table 12.1-1: UE performance requirements for RRC procedures for UEs
#define NR_RRC_SETUP_DELAY_MS 10
#define NR_RRC_RECONFIGURATION_DELAY_MS 10
#define NR_RRC_BWP_SWITCHING_DELAY_MS 6
#define NR_UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!!
#define NR_UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
...
...
@@ -372,7 +376,7 @@ typedef struct gNB_RRC_UE_s {
rb_id_t
gnb_gtp_ebi
[
S1AP_MAX_E_RAB
];
rb_id_t
gnb_gtp_psi
[
S1AP_MAX_E_RAB
];
//GTPV1 F1-U TUNNELS
uint32_t
incoming_teid
[
S1AP_MAX_E_RAB
];
uint32_t
incoming_teid
[
S1AP_MAX_E_RAB
];
uint32_t
ul_failure_timer
;
uint32_t
ue_release_timer
;
...
...
openair2/RRC/NR/rrc_gNB.c
View file @
94aeb438
...
...
@@ -797,6 +797,13 @@ rrc_gNB_generate_defaultRRCReconfiguration(
default
:
LOG_W
(
NR_RRC
,
"Unknown node type %d
\n
"
,
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
);
}
if
(
NODE_IS_DU
(
rrc
->
node_type
)
||
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
nr_mac_enable_ue_rrc_processing_timer
(
ctxt_pP
->
module_id
,
ue_context_pP
->
ue_context
.
rnti
,
*
rrc
->
carrier
.
servingcellconfigcommon
->
ssbSubcarrierSpacing
,
NR_RRC_RECONFIGURATION_DELAY_MS
);
}
}
//-----------------------------------------------------------------------------
...
...
@@ -1032,6 +1039,13 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
buffer
,
PDCP_TRANSMISSION_MODE_CONTROL
);
#endif
if
(
NODE_IS_DU
(
rrc
->
node_type
)
||
NODE_IS_MONOLITHIC
(
rrc
->
node_type
))
{
nr_mac_enable_ue_rrc_processing_timer
(
ctxt_pP
->
module_id
,
ue_context_pP
->
ue_context
.
rnti
,
*
rrc
->
carrier
.
servingcellconfigcommon
->
ssbSubcarrierSpacing
,
NR_RRC_RECONFIGURATION_DELAY_MS
);
}
}
//-----------------------------------------------------------------------------
...
...
@@ -1205,6 +1219,13 @@ rrc_gNB_modify_dedicatedRRCReconfiguration(
buffer
,
PDCP_TRANSMISSION_MODE_CONTROL
);
#endif
if
(
NODE_IS_DU
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
||
NODE_IS_MONOLITHIC
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
nr_mac_enable_ue_rrc_processing_timer
(
ctxt_pP
->
module_id
,
ue_context_pP
->
ue_context
.
rnti
,
*
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
carrier
.
servingcellconfigcommon
->
ssbSubcarrierSpacing
,
NR_RRC_RECONFIGURATION_DELAY_MS
);
}
}
//-----------------------------------------------------------------------------
...
...
@@ -1305,6 +1326,13 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release(
buffer
,
PDCP_TRANSMISSION_MODE_CONTROL
);
#endif
if
(
NODE_IS_DU
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
||
NODE_IS_MONOLITHIC
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
nr_mac_enable_ue_rrc_processing_timer
(
ctxt_pP
->
module_id
,
ue_context_pP
->
ue_context
.
rnti
,
*
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
carrier
.
servingcellconfigcommon
->
ssbSubcarrierSpacing
,
NR_RRC_RECONFIGURATION_DELAY_MS
);
}
}
//-----------------------------------------------------------------------------
...
...
@@ -1863,6 +1891,13 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
PDCP_TRANSMISSION_MODE_CONTROL
);
#endif
}
if
(
NODE_IS_DU
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
)
||
NODE_IS_MONOLITHIC
(
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
nr_mac_enable_ue_rrc_processing_timer
(
ctxt_pP
->
module_id
,
ue_context_pP
->
ue_context
.
rnti
,
*
RC
.
nrrrc
[
ctxt_pP
->
module_id
]
->
carrier
.
servingcellconfigcommon
->
ssbSubcarrierSpacing
,
NR_RRC_RECONFIGURATION_DELAY_MS
);
}
}
//-----------------------------------------------------------------------------
...
...
openair2/RRC/NR/rrc_gNB_nsa.c
View file @
94aeb438
...
...
@@ -241,9 +241,8 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_
cipher_algo
,
NR_SecurityConfig__keyToUse_secondary
);
}
NR_ServingCellConfig_t
*
scc
=
ue_context_p
->
ue_context
.
spCellConfig
?
ue_context_p
->
ue_context
.
spCellConfig
->
spCellConfigDedicated
:
NULL
;
NR_ServingCellConfig_t
*
scc
=
ue_context_p
->
ue_context
.
spCellConfig
?
ue_context_p
->
ue_context
.
spCellConfig
->
spCellConfigDedicated
:
NULL
;
fill_default_reconfig
(
carrier
->
servingcellconfigcommon
,
scc
,
reconfig_ies
,
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb.conf
View file @
94aeb438
...
...
@@ -48,7 +48,6 @@ gNBs =
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
min_rxtxtime
=
6
;
sib1_tda
=
0
;
pdcch_ConfigSIB1
= (
{
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb.conf
View file @
94aeb438
...
...
@@ -38,7 +38,6 @@ gNBs =
ssb_SubcarrierOffset
=
0
;
min_rxtxtime
=
6
;
sib1_tda
=
0
;
pdcch_ConfigSIB1
= (
{
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.band78.tm1.106PRB.usrpn300.gtp-itti.conf
View file @
94aeb438
...
...
@@ -37,7 +37,6 @@ gNBs =
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
0
;
sib1_tda
=
0
;
servingCellConfigCommon
= (
{
#spCellConfigCommon
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band41.fr1.106PRB.usrpb210.conf
View file @
94aeb438
...
...
@@ -19,10 +19,6 @@ gNBs =
{
sst
=
1
;
sd
=
0
x1
; //
0
false
,
else
true
},
{
sst
=
1
;
sd
=
0
x112233
; //
0
false
,
else
true
}
);
...
...
@@ -33,8 +29,7 @@ gNBs =
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
0
;
min_rxtxtime
=
6
;
sib1_tda
=
0
;
min_rxtxtime
=
2
;
do_SRS
=
1
;
pdcch_ConfigSIB1
= (
...
...
@@ -219,7 +214,7 @@ L1s = (
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
prach_dtx_threshold
=
120
;
pucch0_dtx_threshold
=
1
5
0
;
pucch0_dtx_threshold
=
1
0
0
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
}
);
...
...
@@ -229,12 +224,11 @@ RUs = (
local_rf
=
"yes"
nb_tx
=
1
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
att_tx
=
6
;
att_rx
=
6
;
bands
= [
41
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
114
;
sf_extension
=
0
;
eNB_instances
= [
0
];
#beamforming 1x4 matrix:
bf_weights
= [
0
x00007fff
,
0
x0000
,
0
x0000
,
0
x0000
];
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.106PRB.usrpn300.conf
View file @
94aeb438
...
...
@@ -36,7 +36,6 @@ gNBs =
pdsch_AntennaPorts
=
1
;
pusch_AntennaPorts
=
1
;
min_rxtxtime
=
6
;
sib1_tda
=
0
;
pdcch_ConfigSIB1
= (
{
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf
View file @
94aeb438
...
...
@@ -19,10 +19,6 @@ gNBs =
{
sst
=
1
;
sd
=
0
x1
; //
0
false
,
else
true
},
{
sst
=
1
;
sd
=
0
x112233
; //
0
false
,
else
true
}
);
...
...
@@ -35,13 +31,12 @@ gNBs =
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts_N1
=
2
;
pusch_AntennaPorts
=
2
;
sib1_tda
=
0
;
do_SRS
=
1
;
ul_prbblacklist
=
"51,52,53,54"
pdcch_ConfigSIB1
= (
{
controlResourceSetZero
=
1
1
;
controlResourceSetZero
=
1
2
;
searchSpaceZero
=
0
;
}
);
...
...
@@ -235,7 +230,6 @@ RUs = (
bands
= [
78
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
75
;
sf_extension
=
0
;
eNB_instances
= [
0
];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights
= [
0
x00007fff
,
0
x0000
];
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf
View file @
94aeb438
...
...
@@ -19,10 +19,6 @@ gNBs =
{
sst
=
1
;
sd
=
0
x1
; //
0
false
,
else
true
},
{
sst
=
1
;
sd
=
0
x112233
; //
0
false
,
else
true
}
);
...
...
@@ -33,8 +29,7 @@ gNBs =
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
0
;
min_rxtxtime
=
6
;
sib1_tda
=
0
;
min_rxtxtime
=
2
;
pdcch_ConfigSIB1
= (
{
...
...
@@ -218,7 +213,7 @@ L1s = (
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
prach_dtx_threshold
=
120
;
pucch0_dtx_threshold
=
1
5
0
;
pucch0_dtx_threshold
=
1
0
0
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
}
);
...
...
@@ -228,12 +223,11 @@ RUs = (
local_rf
=
"yes"
nb_tx
=
1
nb_rx
=
1
att_tx
=
0
att_rx
=
0
;
att_tx
=
6
;
att_rx
=
6
;
bands
= [
78
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
114
;
sf_extension
=
0
;
eNB_instances
= [
0
];
#beamforming 1x4 matrix:
bf_weights
= [
0
x00007fff
,
0
x0000
,
0
x0000
,
0
x0000
];
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.162PRB.2x2.usrpn300.conf
View file @
94aeb438
...
...
@@ -19,10 +19,6 @@ gNBs =
{
sst
=
1
;
sd
=
0
x1
; //
0
false
,
else
true
},
{
sst
=
1
;
sd
=
0
x112233
; //
0
false
,
else
true
}
);
...
...
@@ -33,12 +29,12 @@ gNBs =
//////////
Physical
parameters
:
ssb_SubcarrierOffset
=
0
;
pdsch_AntennaPorts_N1
=
2
;
pdsch_AntennaPorts_N1
=
1
;
pusch_AntennaPorts
=
2
;
ul_prbblacklist
=
"79,80,81,82"
pdcch_ConfigSIB1
= (
{
controlResourceSetZero
=
1
1
;
controlResourceSetZero
=
1
2
;
searchSpaceZero
=
10
;
}
);
...
...
@@ -236,7 +232,7 @@ MACRLCs = (
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"local_RRC"
;
pusch_TargetSNRx10
=
20
0
;
pusch_TargetSNRx10
=
15
0
;
pucch_TargetSNRx10
=
200
;
ulsch_max_frame_inactivity
=
0
;
}
...
...
@@ -247,7 +243,7 @@ L1s = (
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
prach_dtx_threshold
=
120
;
pucch0_dtx_threshold
=
1
2
0
;
pucch0_dtx_threshold
=
1
0
0
;
}
);
...
...
@@ -261,7 +257,6 @@ RUs = (
bands
= [
78
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
75
;
sf_extension
=
0
;
eNB_instances
= [
0
];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights
= [
0
x00007fff
,
0
x0000
];
...
...
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