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
db6eeb27
Commit
db6eeb27
authored
Dec 19, 2019
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixing mac pdu generation. to be checked by fraunhofer
parent
b1f224d1
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
53 deletions
+33
-53
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
+3
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+30
-50
No files found.
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
View file @
db6eeb27
...
...
@@ -164,13 +164,13 @@ int nr_generate_dlsch_pdu(module_id_t module_idP,
((
NR_MAC_SUBHEADER_FIXED
*
)
mac_pdu_ptr
)
->
LCID
=
DL_SCH_LCID_PADDING
;
mac_pdu_ptr
++
;
// compute final offset
offset
=
((
unsigned
char
*
)
mac_pdu_ptr
-
mac_pdu
);
}
else
{
// no MAC subPDU with padding
}
// compute final offset
offset
=
((
unsigned
char
*
)
mac_pdu_ptr
-
mac_pdu
);
//printf("Offset %d \n", ((unsigned char *) mac_pdu_ptr - mac_pdu));
return
offset
;
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
db6eeb27
...
...
@@ -37,7 +37,7 @@
extern
RAN_CONTEXT_t
RC
;
//#define ENABLE_MAC_PAYLOAD_DEBUG 1
uint8_t
mac_p
ayload
[
MAX_NR_DLSCH_PAYLOAD_BYTES
];
uint8_t
mac_p
du
[
MAX_NR_DLSCH_PAYLOAD_BYTES
];
/*Scheduling of DLSCH with associated DCI in common search space
* current version has only a DCI for type 1 PDCCH for C_RNTI*/
...
...
@@ -280,18 +280,11 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
int
padding
=
0
,
post_padding
=
0
,
ta_len
=
0
,
header_length_total
=
0
,
sdu_length_total
=
0
,
num_sdus
=
0
;
int
CC_id
,
lcid
,
offset
,
i
,
j
=
0
,
k
=
0
,
header_length_last
,
TBS_bytes
;
// hardcoded parameters to 30 kHz
// for DMRS configuration type 1
unsigned
char
dlsch_buffer
[
MAX_NR_DLSCH_PAYLOAD_BYTES
];
uint8_t
Qm
=
2
;
uint16_t
R
=
697
;
uint16_t
nb_rb
=
50
;
uint32_t
TBS
=
nr_compute_tbs
(
Qm
,
R
,
nb_rb
,
12
,
6
,
0
,
1
)
/
8
;
// this is in bits TODO use nr_get_tbs
int
UE_id
=
0
;
uint16_t
rnti
=
0x1234
;
uint16_t
sfn_sf
=
frameP
<<
7
|
slotP
;
printf
(
"TBS=%d
\n
"
,
TBS
)
;
uint8_t
mac_sdus
[
MAX_NR_DLSCH_PAYLOAD_BYTES
]
;
for
(
CC_id
=
0
;
CC_id
<
RC
.
nb_nr_mac_CC
[
module_idP
];
CC_id
++
)
{
...
...
@@ -301,31 +294,28 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
TX_req
=
&
gNB_mac
->
TX_req
[
CC_id
].
tx_request_body
.
tx_pdu_list
[
gNB_mac
->
TX_req
[
CC_id
].
tx_request_body
.
number_of_pdus
];
ta_len
=
gNB_mac
->
ta_len
;
TBS_bytes
=
configure_fapi_dl_Tx
(
dl_req
,
TX_req
,
cfg
,
&
gNB_mac
->
coreset
[
CC_id
][
1
],
&
gNB_mac
->
search_space
[
CC_id
][
1
],
gNB_mac
->
pdu_index
[
CC_id
],
dlsch_config
);
//printf("TBS_bytes=%d (bytes)\n",TBS_bytes);
//The --NOS1 use case currently schedules DLSCH transmissions only when there is IP traffic arriving
//through the LTE stack
if
(
IS_SOFTMODEM_NOS1
){
// Hardcode it for now
//TBS = 6784/8; //TBS in bytes
//nr_get_tbs_dl(&dl_config_dlsch_pdu->dlsch_pdu, dl_config_dci_pdu->dci_dl_pdu, *cfg);
//TBS = dl_config_dlsch_pdu->dlsch_pdu.dlsch_pdu_rel15.transport_block_size;
/* TODO
// RLC data on DCCH
if (TBS - ta_len - header_length_total - sdu_length_total - 3 > 0) {
if (TBS
_bytes
- ta_len - header_length_total - sdu_length_total - 3 > 0) {
}*/
/* TODO
// RLC data on DCCH1
if (TBS - ta_len - header_length_total - sdu_length_total - 3 > 0) {
if (TBS
_bytes
- ta_len - header_length_total - sdu_length_total - 3 > 0) {
}*/
for
(
lcid
=
NB_RB_MAX
-
1
;
lcid
>=
DTCH
;
lcid
--
)
{
LOG_D
(
MAC
,
"[gNB %d], Frame %d, DTCH%d->DLSCH, Checking RLC status (tbs %d, len %d)
\n
"
,
module_idP
,
frameP
,
lcid
,
TBS
,
TBS
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
);
module_idP
,
frameP
,
lcid
,
TBS
_bytes
,
TBS_bytes
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
);
if
(
TBS
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
>
0
)
{
if
(
TBS
_bytes
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
>
0
)
{
rlc_status
=
mac_rlc_status_ind
(
module_idP
,
rnti
,
module_idP
,
...
...
@@ -334,14 +324,14 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
lcid
,
TBS
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
,
TBS
_bytes
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
,
0
,
0
);
if
(
rlc_status
.
bytes_in_buffer
>
0
)
{
LOG_D
(
MAC
,
"[gNB %d][USER-PLANE DEFAULT DRB] Frame %d : DTCH->DLSCH, Requesting %d bytes from RLC (lcid %d total hdr len %d), TBS: %d
\n
\n
"
,
module_idP
,
frameP
,
TBS
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
,
lcid
,
header_length_total
,
TBS
);
LOG_D
(
MAC
,
"[gNB %d][USER-PLANE DEFAULT DRB] Frame %d : DTCH->DLSCH, Requesting %d bytes from RLC (lcid %d total hdr len %d), TBS
_bytes
: %d
\n
\n
"
,
module_idP
,
frameP
,
TBS
_bytes
-
ta_len
-
header_length_total
-
sdu_length_total
-
3
,
lcid
,
header_length_total
,
TBS
_bytes
);
sdu_lengths
[
num_sdus
]
=
mac_rlc_data_req
(
module_idP
,
rnti
,
...
...
@@ -350,8 +340,8 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
ENB_FLAG_YES
,
MBMS_FLAG_NO
,
lcid
,
TBS
,
(
char
*
)
&
dlsch_buffer
[
sdu_length_total
],
TBS
_bytes
,
(
char
*
)
&
mac_sdus
[
sdu_length_total
],
0
,
0
);
...
...
@@ -374,7 +364,7 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
//ue_sched_ctl->uplane_inactivity_timer = 0;
}
}
else
{
// no TBS left
}
else
{
// no TBS
_bytes
left
break
;
}
}
...
...
@@ -392,26 +382,17 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
// fill dlsch_buffer with random data
for
(
i
=
0
;
i
<
TBS
/
8
;
i
++
){
dlsch_buffer
[
i
]
=
(
unsigned
char
)
rand
();
//i&0xFF;
for
(
i
=
0
;
i
<
TBS
_bytes
;
i
++
){
mac_sdus
[
i
]
=
(
unsigned
char
)
rand
();
//i&0xFF;
}
//Sending SDUs with size 1
//Initialize elements of sdu_lcids and sdu_lengths
//TODO this will be eventually be removed
while
(
TBS
>=
3
+
header_length_total
+
sdu_length_total
+
ta_len
){
if
(
k
<
NR_MAX_NB_RB
&&
j
<
NR_MAX_NB_RB
){
sdu_lcids
[
j
]
=
0x05
;
// DRB
sdu_lengths
[
k
]
=
1
;
header_length_total
+=
2
;
sdu_length_total
+=
1
;
num_sdus
+=
1
;
k
++
,
j
++
;
}
else
{
break
;
}
}
sdu_lcids
[
0
]
=
0x05
;
// DRB
sdu_lengths
[
0
]
=
TBS_bytes
-
3
;
header_length_total
+=
2
;
sdu_length_total
+=
sdu_lengths
[
0
];
num_sdus
+=
1
;
}
// else IS_SOFTMODEM_NOS1
// there is at least one SDU or TA command
...
...
@@ -419,10 +400,10 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
if
(
ta_len
+
sdu_length_total
+
header_length_total
>
0
)
{
// Check if there is data from RLC or CE
if
(
TBS
>=
2
+
header_length_total
+
sdu_length_total
+
ta_len
)
{
if
(
TBS
_bytes
>=
2
+
header_length_total
+
sdu_length_total
+
ta_len
)
{
// we have to consider padding
// padding param currently not in use
padding
=
TBS
-
header_length_total
-
sdu_length_total
-
ta_len
-
1
;
padding
=
TBS
_bytes
-
header_length_total
-
sdu_length_total
-
ta_len
-
1
;
post_padding
=
1
;
}
else
{
padding
=
0
;
...
...
@@ -431,8 +412,8 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
offset
=
nr_generate_dlsch_pdu
(
module_idP
,
(
unsigned
char
*
)
dlsch_buffer
,
(
unsigned
char
*
)
mac_p
ayload
,
(
unsigned
char
*
)
mac_sdus
,
(
unsigned
char
*
)
mac_p
du
,
num_sdus
,
//num_sdus
sdu_lengths
,
sdu_lcids
,
...
...
@@ -442,15 +423,14 @@ void nr_schedule_uss_dlsch_phytest(module_id_t module_idP,
// Padding: fill remainder of DLSCH with 0
if
(
post_padding
>
0
){
for
(
int
j
=
0
;
j
<
(
TBS
-
offset
);
j
++
)
mac_p
ayload
[
offset
+
j
]
=
0
;
for
(
int
j
=
0
;
j
<
(
TBS
_bytes
-
offset
);
j
++
)
mac_p
du
[
offset
+
j
]
=
0
;
}
TBS_bytes
=
configure_fapi_dl_Tx
(
dl_req
,
TX_req
,
cfg
,
&
gNB_mac
->
coreset
[
CC_id
][
1
],
&
gNB_mac
->
search_space
[
CC_id
][
1
],
gNB_mac
->
pdu_index
[
CC_id
],
dlsch_config
);
//TX_req->segments[0].segment_length = 8;
TX_req
->
segments
[
0
].
segment_length
=
TBS_bytes
+
2
;
TX_req
->
segments
[
0
].
segment_data
=
mac_p
ayload
;
TX_req
->
segments
[
0
].
segment_data
=
mac_p
du
;
gNB_mac
->
TX_req
[
CC_id
].
tx_request_body
.
number_of_pdus
++
;
gNB_mac
->
TX_req
[
CC_id
].
sfn_sf
=
sfn_sf
;
...
...
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