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
c522caf4
Commit
c522caf4
authored
Sep 18, 2021
by
Masayuki Harada
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'remotes/oai/develop' into develop-NR_SA_nrUE_security_update
parents
edd179c2
de553cd1
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
139 additions
and
56 deletions
+139
-56
common/utils/T/T_messages.txt
common/utils/T/T_messages.txt
+1
-1
docker/Dockerfile.nrUE.rhel8.2
docker/Dockerfile.nrUE.rhel8.2
+1
-0
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+3
-1
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+3
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+17
-22
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+3
-2
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
+36
-5
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+3
-1
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+2
-3
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
+1
-1
openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
+1
-1
openair2/LAYER2/nr_rlc/tests/run_tests.sh
openair2/LAYER2/nr_rlc/tests/run_tests.sh
+1
-1
openair2/LAYER2/nr_rlc/tests/test.c
openair2/LAYER2/nr_rlc/tests/test.c
+8
-8
openair2/LAYER2/nr_rlc/tests/test16.h
openair2/LAYER2/nr_rlc/tests/test16.h
+19
-0
openair2/LAYER2/nr_rlc/tests/test16.txt.gz
openair2/LAYER2/nr_rlc/tests/test16.txt.gz
+0
-0
openair2/LAYER2/nr_rlc/tests/test17.h
openair2/LAYER2/nr_rlc/tests/test17.h
+18
-0
openair2/LAYER2/nr_rlc/tests/test17.txt.gz
openair2/LAYER2/nr_rlc/tests/test17.txt.gz
+0
-0
openair2/RRC/NR/MESSAGES/asn1_msg.c
openair2/RRC/NR/MESSAGES/asn1_msg.c
+22
-8
No files found.
common/utils/T/T_messages.txt
View file @
c522caf4
...
...
@@ -16,7 +16,7 @@ ID = ENB_PHY_DL_TICK
ID = ENB_PHY_DLSCH_UE_DCI
DESC = eNodeB downlink UE specific DCI as sent by the PHY layer
GROUP = ALL:PHY:GRAPHIC:ENB
FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS
FORMAT = int,eNB_ID : int,frame : int,subframe : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS
: int,ndi : int,rv : int,rbc : int,nb_rb : int,rb_alloc
ID = ENB_PHY_DLSCH_UE_ACK
DESC = eNodeB downlink UE ACK as seen by the PHY layer in process_HARQ_feedback
GROUP = ALL:PHY:GRAPHIC:ENB
...
...
docker/Dockerfile.nrUE.rhel8.2
View file @
c522caf4
...
...
@@ -49,6 +49,7 @@ RUN yum update -y && \
nettle \
net-tools \
iputils \
iproute \
atlas \
libXpm \
libX11 \
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
c522caf4
...
...
@@ -1527,7 +1527,9 @@ void fill_dci_and_dlsch(PHY_VARS_eNB *eNB,
if
(
dlsch0
->
active
)
T
(
T_ENB_PHY_DLSCH_UE_DCI
,
T_INT
(
0
),
T_INT
(
frame
),
T_INT
(
subframe
),
T_INT
(
rel8
->
rnti
),
T_INT
(
rel8
->
dci_format
),
T_INT
(
rel8
->
harq_process
),
T_INT
(
rel8
->
mcs_1
),
T_INT
(
dlsch0_harq
->
TBS
));
T_INT
(
rel8
->
mcs_1
),
T_INT
(
dlsch0_harq
->
TBS
),
T_INT
(
rel8
->
new_data_indicator_1
),
T_INT
(
rel8
->
redundancy_version_1
),
T_INT
(
rel8
->
resource_block_coding
),
T_INT
(
dlsch0_harq
->
nb_rb
),
T_INT
(
dlsch0_harq
->
rb_alloc
[
0
]));
#endif
}
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
c522caf4
...
...
@@ -267,6 +267,8 @@ void nr_dlsim_preprocessor(module_id_t module_id,
NR_pdsch_semi_static_t
*
ps
=
&
sched_ctrl
->
pdsch_semi_static
;
ps
->
nrOfLayers
=
g_nrOfLayers
;
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
0
],
sched_ctrl
->
active_bwp
,
...
...
@@ -282,7 +284,6 @@ void nr_dlsim_preprocessor(module_id_t module_id,
* configuration */
ps
->
mcsTableIdx
=
g_mcsTableIdx
;
sched_pdsch
->
nrOfLayers
=
g_nrOfLayers
;
sched_pdsch
->
Qm
=
nr_get_Qm_dl
(
sched_pdsch
->
mcs
,
ps
->
mcsTableIdx
);
sched_pdsch
->
R
=
nr_get_code_rate_dl
(
sched_pdsch
->
mcs
,
ps
->
mcsTableIdx
);
sched_pdsch
->
tb_size
=
nr_compute_tbs
(
sched_pdsch
->
Qm
,
...
...
@@ -292,7 +293,7 @@ void nr_dlsim_preprocessor(module_id_t module_id,
ps
->
N_PRB_DMRS
*
ps
->
N_DMRS_SLOT
,
0
/* N_PRB_oh, 0 for initialBWP */
,
0
/* tb_scaling */
,
sched_pdsch
->
nrOfLayers
)
ps
->
nrOfLayers
)
>>
3
;
/* the simulator assumes the HARQ PID is equal to the slot number */
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
c522caf4
...
...
@@ -455,9 +455,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
int
rbStart
=
NRRIV2PRBOFFSET
(
genericParameters
->
locationAndBandwidth
,
MAX_BWP_SIZE
);
NR_pdsch_semi_static_t
*
ps
=
&
sched_ctrl
->
pdsch_semi_static
;
const
long
f
=
sched_ctrl
->
search_space
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
;
const
uint8_t
num_dmrs_cdm_grps_no_data
=
sched_ctrl
->
active_bwp
?
(
f
?
1
:
(
ps
->
nrOfSymbols
==
2
?
1
:
2
))
:
(
ps
->
nrOfSymbols
==
2
?
1
:
2
);
const
long
f
=
sched_ctrl
->
active_bwp
?
sched_ctrl
->
search_space
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
:
0
;
int
rbSize
=
0
;
const
int
tda
=
sched_ctrl
->
active_bwp
?
RC
.
nrmac
[
module_id
]
->
preferred_dl_tda
[
sched_ctrl
->
active_bwp
->
bwp_Id
][
slot
]
:
1
;
if
(
tda
==
retInfo
->
time_domain_allocation
)
{
...
...
@@ -476,9 +474,8 @@ 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
||
ps
->
numDmrsCdmGrpsNoData
!=
num_dmrs_cdm_grps_no_data
)
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
if
(
ps
->
time_domain_allocation
!=
tda
)
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
tda
,
f
,
ps
);
}
else
{
/* the retransmission will use a different time domain allocation, check
* that we have enough resources */
...
...
@@ -487,8 +484,8 @@ bool allocate_dl_retransmission(module_id_t module_id,
while
(
rbStart
+
rbSize
<
bwpSize
&&
rballoc_mask
[
rbStart
+
rbSize
])
rbSize
++
;
NR_pdsch_semi_static_t
temp_ps
;
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
tda
,
num_dmrs_cdm_grps_no_data
,
&
temp_ps
);
temp_ps
.
nrOfLayers
=
1
;
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
tda
,
f
,
&
temp_ps
);
uint32_t
new_tbs
;
uint16_t
new_rbSize
;
bool
success
=
nr_find_nb_rb
(
retInfo
->
Qm
,
...
...
@@ -604,7 +601,7 @@ void pf_dl(module_id_t module_id,
/* Calculate coeff */
sched_pdsch
->
mcs
=
9
;
sched_pdsch
->
nrOfLayers
=
1
;
ps
->
nrOfLayers
=
1
;
uint32_t
tbs
=
pf_tbs
[
ps
->
mcsTableIdx
][
sched_pdsch
->
mcs
];
coeff_ue
[
UE_id
]
=
(
float
)
tbs
/
thr_ue
[
UE_id
];
LOG_D
(
NR_MAC
,
"b %d, thr_ue[%d] %f, tbs %d, coeff_ue[%d] %f
\n
"
,
...
...
@@ -684,11 +681,9 @@ void pf_dl(module_id_t module_id,
const
int
tda
=
sched_ctrl
->
active_bwp
?
RC
.
nrmac
[
module_id
]
->
preferred_dl_tda
[
sched_ctrl
->
active_bwp
->
bwp_Id
][
slot
]
:
1
;
NR_sched_pdsch_t
*
sched_pdsch
=
&
sched_ctrl
->
sched_pdsch
;
NR_pdsch_semi_static_t
*
ps
=
&
sched_ctrl
->
pdsch_semi_static
;
const
long
f
=
sched_ctrl
->
search_space
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
;
const
uint8_t
num_dmrs_cdm_grps_no_data
=
sched_ctrl
->
active_bwp
?
(
f
?
1
:
(
ps
->
nrOfSymbols
==
2
?
1
:
2
))
:
(
ps
->
nrOfSymbols
==
2
?
1
:
2
);
if
(
ps
->
time_domain_allocation
!=
tda
||
ps
->
numDmrsCdmGrpsNoData
!=
num_dmrs_cdm_grps_no_data
)
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
const
long
f
=
sched_ctrl
->
active_bwp
?
sched_ctrl
->
search_space
->
searchSpaceType
->
choice
.
ue_Specific
->
dci_Formats
:
0
;
if
(
ps
->
time_domain_allocation
!=
tda
)
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
tda
,
f
,
ps
);
sched_pdsch
->
Qm
=
nr_get_Qm_dl
(
sched_pdsch
->
mcs
,
ps
->
mcsTableIdx
);
sched_pdsch
->
R
=
nr_get_code_rate_dl
(
sched_pdsch
->
mcs
,
ps
->
mcsTableIdx
);
sched_pdsch
->
pucch_allocation
=
alloc
;
...
...
@@ -822,17 +817,17 @@ void nr_schedule_ue_spec(module_id_t module_id,
const
rnti_t
rnti
=
UE_info
->
rnti
[
UE_id
];
/* POST processing */
const
uint8_t
nrOfLayers
=
sched_pdsch
->
nrOfLayers
;
const
uint16_t
R
=
sched_pdsch
->
R
;
const
uint8_t
Qm
=
sched_pdsch
->
Qm
;
const
uint32_t
TBS
=
sched_pdsch
->
tb_size
;
/* pre-computed PDSCH values that only change if time domain
* allocation/DMRS parameters change. Updated in the preprocessor through
* nr_set_pdsch_semi_static() */
NR_pdsch_semi_static_t
*
ps
=
&
sched_ctrl
->
pdsch_semi_static
;
/* POST processing */
const
uint8_t
nrOfLayers
=
ps
->
nrOfLayers
;
const
uint16_t
R
=
sched_pdsch
->
R
;
const
uint8_t
Qm
=
sched_pdsch
->
Qm
;
const
uint32_t
TBS
=
sched_pdsch
->
tb_size
;
int8_t
current_harq_pid
=
sched_pdsch
->
dl_harq_pid
;
if
(
current_harq_pid
<
0
)
{
/* PP has not selected a specific HARQ Process, get a new one */
...
...
@@ -943,7 +938,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
pdsch_pdu
->
dlDmrsScramblingId
=
*
scc
->
physCellId
;
pdsch_pdu
->
SCID
=
0
;
pdsch_pdu
->
numDmrsCdmGrpsNoData
=
ps
->
numDmrsCdmGrpsNoData
;
pdsch_pdu
->
dmrsPorts
=
1
;
pdsch_pdu
->
dmrsPorts
=
(
1
<<
nrOfLayers
)
-
1
;
// FIXME with a better implementation
// Pdsch Allocation in frequency domain
pdsch_pdu
->
resourceAlloc
=
1
;
...
...
@@ -1025,7 +1020,7 @@ void nr_schedule_ue_spec(module_id_t module_id,
dci_payload
.
tpc
=
sched_ctrl
->
tpc1
;
// TPC for PUCCH: table 7.2.1-1 in 38.213
dci_payload
.
pucch_resource_indicator
=
pucch
->
resource_indicator
;
dci_payload
.
pdsch_to_harq_feedback_timing_indicator
.
val
=
pucch
->
timing_indicator
;
// PDSCH to HARQ TI
dci_payload
.
antenna_ports
.
val
=
0
;
// nb of cdm groups w/o data 1 and dmrs port 0
dci_payload
.
antenna_ports
.
val
=
ps
->
dmrs_ports_id
;
dci_payload
.
dmrs_sequence_initialization
.
val
=
pdsch_pdu
->
SCID
;
LOG_D
(
NR_MAC
,
"%4d.%2d DCI type 1 payload: freq_alloc %d (%d,%d,%d), "
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
c522caf4
...
...
@@ -369,11 +369,12 @@ void nr_preprocessor_phytest(module_id_t module_id,
sched_pdsch
->
rbSize
=
rbSize
;
const
int
tda
=
sched_ctrl
->
active_bwp
?
RC
.
nrmac
[
module_id
]
->
preferred_dl_tda
[
sched_ctrl
->
active_bwp
->
bwp_Id
][
slot
]
:
1
;
const
uint8_t
num_dmrs_cdm_grps_no_data
=
1
;
ps
->
nrOfLayers
=
target_dl_Nl
;
if
(
ps
->
time_domain_allocation
!=
tda
||
ps
->
numDmrsCdmGrpsNoData
!=
num_dmrs_cdm_grps_no_data
)
nr_set_pdsch_semi_static
(
scc
,
UE_info
->
CellGroup
[
UE_id
],
sched_ctrl
->
active_bwp
,
tda
,
num_dmrs_cdm_grps_no_data
,
ps
);
sched_pdsch
->
nrOfLayers
=
target_dl_Nl
;
sched_pdsch
->
mcs
=
target_dl_mcs
;
sched_pdsch
->
Qm
=
nr_get_Qm_dl
(
sched_pdsch
->
mcs
,
ps
->
mcsTableIdx
);
sched_pdsch
->
R
=
nr_get_code_rate_dl
(
sched_pdsch
->
mcs
,
ps
->
mcsTableIdx
);
...
...
@@ -384,7 +385,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
ps
->
N_PRB_DMRS
*
ps
->
N_DMRS_SLOT
,
0
/* N_PRB_oh, 0 for initialBWP */
,
0
/* tb_scaling */
,
sched_pdsch
->
nrOfLayers
)
ps
->
nrOfLayers
)
>>
3
;
/* get the PID of a HARQ process awaiting retransmission, or -1 otherwise */
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c
View file @
c522caf4
...
...
@@ -122,6 +122,36 @@ static inline uint8_t get_max_cces(uint8_t scs) {
return
(
nr_max_number_of_cces_per_slot
[
scs
]);
}
void
set_dl_dmrs_ports
(
NR_pdsch_semi_static_t
*
ps
)
{
//TODO first basic implementation of dmrs port selection
// only vaild for a single codeword
// for now it assumes a selection of Nl consecutive dmrs ports
// and a single front loaded symbol
// dmrs_ports_id is the index of Tables 7.3.1.2.2-1/2/3/4
switch
(
ps
->
nrOfLayers
)
{
case
1
:
ps
->
dmrs_ports_id
=
0
;
ps
->
numDmrsCdmGrpsNoData
=
1
;
break
;
case
2
:
ps
->
dmrs_ports_id
=
2
;
ps
->
numDmrsCdmGrpsNoData
=
1
;
break
;
case
3
:
ps
->
dmrs_ports_id
=
9
;
ps
->
numDmrsCdmGrpsNoData
=
2
;
break
;
case
4
:
ps
->
dmrs_ports_id
=
10
;
ps
->
numDmrsCdmGrpsNoData
=
2
;
break
;
default:
AssertFatal
(
1
==
0
,
"Number of layers %d
\n
not supported or not valid
\n
"
,
ps
->
nrOfLayers
);
}
}
NR_ControlResourceSet_t
*
get_coreset
(
NR_ServingCellConfigCommon_t
*
scc
,
NR_BWP_Downlink_t
*
bwp
,
NR_SearchSpace_t
*
ss
,
...
...
@@ -266,7 +296,7 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
const
NR_CellGroupConfig_t
*
secondaryCellGroup
,
const
NR_BWP_Downlink_t
*
bwp
,
int
tda
,
uint8_t
num_dmrs_cdm_grps_no_data
,
const
long
dci_format
,
NR_pdsch_semi_static_t
*
ps
)
{
ps
->
time_domain_allocation
=
tda
;
...
...
@@ -292,12 +322,13 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
}
else
ps
->
mcsTableIdx
=
0
;
ps
->
numDmrsCdmGrpsNoData
=
num_dmrs_cdm_grps_no_data
;
if
(
dci_format
==
0
)
// format 1_0
ps
->
numDmrsCdmGrpsNoData
=
(
ps
->
nrOfSymbols
==
2
?
1
:
2
);
else
set_dl_dmrs_ports
(
ps
);
ps
->
dmrsConfigType
=
bwp
!=
NULL
?
(
bwp
->
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
dmrs_DownlinkForPDSCH_MappingTypeA
->
choice
.
setup
->
dmrs_Type
==
NULL
?
0
:
1
)
:
0
;
// if no data in dmrs cdm group is 1 only even REs have no data
// if no data in dmrs cdm group is 2 both odd and even REs have no data
ps
->
N_PRB_DMRS
=
num_dmrs_cdm_grps_no_data
*
(
ps
->
dmrsConfigType
==
NFAPI_NR_DMRS_TYPE1
?
6
:
4
);
ps
->
N_PRB_DMRS
=
ps
->
numDmrsCdmGrpsNoData
*
(
ps
->
dmrsConfigType
==
NFAPI_NR_DMRS_TYPE1
?
6
:
4
);
ps
->
dl_dmrs_symb_pos
=
fill_dmrs_mask
(
bwp
?
bwp
->
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
:
NULL
,
scc
->
dmrs_TypeA_Position
,
ps
->
nrOfSymbols
,
ps
->
startSymbolIndex
,
mapping_type
);
ps
->
N_DMRS_SLOT
=
get_num_dmrs
(
ps
->
dl_dmrs_symb_pos
);
}
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
c522caf4
...
...
@@ -283,7 +283,7 @@ void nr_set_pdsch_semi_static(const NR_ServingCellConfigCommon_t *scc,
const
NR_CellGroupConfig_t
*
secondaryCellGroup
,
const
NR_BWP_Downlink_t
*
bwp
,
int
tda
,
uint8_t
num_dmrs_cdm_grps_no_data
,
const
long
dci_format
,
NR_pdsch_semi_static_t
*
ps
);
void
nr_set_pusch_semi_static
(
const
NR_ServingCellConfigCommon_t
*
scc
,
...
...
@@ -417,6 +417,8 @@ int16_t ssb_index_from_prach(module_id_t module_idP,
void
find_SSB_and_RO_available
(
module_id_t
module_idP
);
void
set_dl_dmrs_ports
(
NR_pdsch_semi_static_t
*
ps
);
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 @
c522caf4
...
...
@@ -368,9 +368,9 @@ typedef struct NR_pdsch_semi_static {
int
startSymbolIndex
;
int
nrOfSymbols
;
uint8_t
nrOfLayers
;
uint8_t
mcsTableIdx
;
uint8_t
dmrs_ports_id
;
uint8_t
N_PRB_DMRS
;
uint8_t
N_DMRS_SLOT
;
uint16_t
dl_dmrs_symb_pos
;
...
...
@@ -386,7 +386,6 @@ typedef struct NR_sched_pdsch {
uint8_t
mcs
;
/// TBS-related info
uint8_t
nrOfLayers
;
uint16_t
R
;
uint8_t
Qm
;
uint32_t
tb_size
;
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c
View file @
c522caf4
...
...
@@ -218,7 +218,7 @@ static void reassemble_and_deliver(nr_rlc_entity_am_t *entity, int sn)
bad_sdu
=
1
;
}
if
(
!
bad_sdu
&&
len
>
0
)
{
memcpy
(
sdu
+
so
,
pdu
->
data
,
len
);
memcpy
(
sdu
+
so
,
pdu
->
data
+
so
-
pdu
->
so
,
len
);
so
+=
len
;
}
free
(
pdu
->
data
);
...
...
openair2/LAYER2/nr_rlc/nr_rlc_entity_um.c
View file @
c522caf4
...
...
@@ -148,7 +148,7 @@ static void reassemble_and_deliver(nr_rlc_entity_um_t *entity, int sn)
bad_sdu
=
1
;
}
if
(
!
bad_sdu
&&
len
>
0
)
{
memcpy
(
sdu
+
so
,
pdu
->
data
,
len
);
memcpy
(
sdu
+
so
,
pdu
->
data
+
so
-
pdu
->
so
,
len
);
so
+=
len
;
}
free
(
pdu
->
data
);
...
...
openair2/LAYER2/nr_rlc/tests/run_tests.sh
View file @
c522caf4
#!/bin/sh
test_count
=
1
5
test_count
=
1
7
for
i
in
`
seq
$test_count
`
do
...
...
openair2/LAYER2/nr_rlc/tests/test.c
View file @
c522caf4
...
...
@@ -22,13 +22,13 @@
* create the UE RLC AM entity with given parameters
*
* GNB_UM <rx_maxsize> <tx_maxsize> <t_reassembly> <sn_field_length>
* create the
e
NB RLC UM entity with given parameters
* create the
g
NB RLC UM entity with given parameters
*
* UE_UM <rx_maxsize> <tx_maxsize> <t_reassembly> <sn_field_length>
* create the UE RLC UM entity with given parameters
*
* GNB_TM <tx_maxsize>
* create the
e
NB RLC TM entity with given parameters
* create the
g
NB RLC TM entity with given parameters
*
* UE_UM <tx_maxsize>
* create the UE RLC TM entity with given parameters
...
...
@@ -39,7 +39,7 @@
* You must end your test definition with a line 'TIME, -1'.
*
* GNB_SDU <id> <size>
* send an SDU to
e
NB with id <i> and size <size>
* send an SDU to
g
NB with id <i> and size <size>
* the SDU is [00 01 ... ff 01 ...]
* (ie. start byte is 00 then we increment for each byte, loop if needed)
*
...
...
@@ -47,10 +47,10 @@
* same as GNB_SDU but the SDU is sent to the UE
*
* GNB_PDU <size> <'size' bytes>
* send a custom PDU from
eNB to UE (e
NB does not see this PDU at all)
* send a custom PDU from
gNB to UE (g
NB does not see this PDU at all)
*
* UE_PDU <size> <'size' bytes>
* send a custom PDU from UE to
e
NB (UE does not see this PDU at all)
* send a custom PDU from UE to
g
NB (UE does not see this PDU at all)
*
* GNB_PDU_SIZE <size>
* set 'gnb_pdu_size'
...
...
@@ -70,7 +70,7 @@
* that the test must fail (ie. exit with non zero, crash not allowed)
*
* GNB_BUFFER_STATUS
* call buffer_status for
e
NB and print result
* call buffer_status for
g
NB and print result
*
* UE_BUFFER_STATUS
* call buffer_status for UE and print result
...
...
@@ -82,7 +82,7 @@
* discards given SDU
*
* RE_ESTABLISH
* re-establish both
e
NB and UE
* re-establish both
g
NB and UE
*/
enum
action
{
...
...
@@ -368,7 +368,7 @@ int test_main(void)
pos
+=
2
;
break
;
case
RE_ESTABLISH
:
printf
(
"TEST: %d: re-establish
e
NB and UE
\n
"
,
i
);
printf
(
"TEST: %d: re-establish
g
NB and UE
\n
"
,
i
);
gnb
->
reestablishment
(
gnb
);
ue
->
reestablishment
(
ue
);
pos
++
;
...
...
openair2/LAYER2/nr_rlc/tests/test16.h
0 → 100644
View file @
c522caf4
/*
* am test (SN field size 18):
* there was a bug when we receive a full PDU after receiving only the
* beginning of it; the data was copied at the end but from the start of the
* full PDU instead of the correct offset. This test captures this case.
* Gnb sends the start of a PDU then the full PDU. That is the SDU is
* [00 .. 09]. First gnb sends [00 .. 08] then it sends [00 .. 09].
*/
TIME
,
1
,
GNB_AM
,
100000
,
100000
,
45
,
35
,
0
,
-
1
,
-
1
,
8
,
18
,
UE_AM
,
100000
,
100000
,
45
,
35
,
0
,
-
1
,
-
1
,
8
,
18
,
GNB_PDU_SIZE
,
12
,
UE_PDU_SIZE
,
20
,
GNB_PDU
,
12
,
0x90
,
0x00
,
0x00
,
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
TIME
,
2
,
GNB_PDU_SIZE
,
20
,
GNB_PDU
,
13
,
0xc0
,
0x00
,
0x00
,
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
TIME
,
-
1
openair2/LAYER2/nr_rlc/tests/test16.txt.gz
0 → 100644
View file @
c522caf4
File added
openair2/LAYER2/nr_rlc/tests/test17.h
0 → 100644
View file @
c522caf4
/*
* um test (SN field size 12):
* same problem as for test16, but we test by sending [00 .. 08] then
* [02 .. 09] (they overlap, the full SDU is [00 .. 09]), which probably
* never occurs in practice but triggers the bug. Doing as for test16 does
* not trigger the bug.
*/
TIME
,
1
,
GNB_UM
,
100000
,
100000
,
35
,
12
,
UE_UM
,
100000
,
100000
,
35
,
12
,
GNB_PDU_SIZE
,
8
,
UE_PDU_SIZE
,
20
,
GNB_PDU
,
11
,
0x40
,
0x00
,
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
TIME
,
2
,
GNB_PDU_SIZE
,
20
,
GNB_PDU
,
12
,
0x80
,
0x00
,
0x00
,
0x02
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
TIME
,
-
1
openair2/LAYER2/nr_rlc/tests/test17.txt.gz
0 → 100644
View file @
c522caf4
File added
openair2/RRC/NR/MESSAGES/asn1_msg.c
View file @
c522caf4
...
...
@@ -419,14 +419,28 @@ uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,
nrMultiBandInfo
->
freqBandIndicatorNR
=
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
frequencyBandList
.
list
.
array
[
i
];
ASN_SEQUENCE_ADD
(
&
sib1
->
servingCellConfigCommon
->
downlinkConfigCommon
.
frequencyInfoDL
.
frequencyBandList
.
list
,
nrMultiBandInfo
);
}
int
ref_scs
;
if
(
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
<
600000
)
ref_scs
=
0
;
// 15 khz
if
(
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
>
2016666
)
ref_scs
=
3
;
// 60 khz
uint32_t
absolute_diff
=
(
*
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
-
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
sib1
->
servingCellConfigCommon
->
downlinkConfigCommon
.
frequencyInfoDL
.
offsetToPointA
=
(
absolute_diff
/
12
)
-
(
10
<<
(
configuration
->
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
-
ref_scs
));
int
scs_scaling0
=
1
<<
(
configuration
->
scc
->
downlinkConfigCommon
->
initialDownlinkBWP
->
genericParameters
.
subcarrierSpacing
);
int
scs_scaling
=
scs_scaling0
;
int
scs_scaling2
=
scs_scaling0
;
if
(
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
<
600000
)
{
scs_scaling
=
scs_scaling0
*
3
;
}
if
(
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
>
2016666
)
{
scs_scaling
=
scs_scaling0
>>
2
;
scs_scaling2
=
scs_scaling0
>>
2
;
}
uint32_t
absolute_diff
=
(
*
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
-
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
sib1
->
servingCellConfigCommon
->
downlinkConfigCommon
.
frequencyInfoDL
.
offsetToPointA
=
scs_scaling2
*
(
absolute_diff
/
(
12
*
scs_scaling
)
-
10
);
LOG_I
(
NR_RRC
,
"SIB1 freq: absoluteFrequencySSB %ld, absoluteFrequencyPointA %ld
\n
"
,
*
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencySSB
,
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
);
LOG_I
(
NR_RRC
,
"SIB1 freq: absolute_diff %d, %d*(absolute_diff/(12*%d) - 10) %d
\n
"
,
absolute_diff
,
scs_scaling2
,
scs_scaling
,(
int
)
sib1
->
servingCellConfigCommon
->
downlinkConfigCommon
.
frequencyInfoDL
.
offsetToPointA
);
for
(
int
i
=
0
;
i
<
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
count
;
i
++
)
{
ASN_SEQUENCE_ADD
(
&
sib1
->
servingCellConfigCommon
->
downlinkConfigCommon
.
frequencyInfoDL
.
scs_SpecificCarrierList
.
list
,
configuration
->
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
scs_SpecificCarrierList
.
list
.
array
[
i
]);
}
...
...
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