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
promise
OpenXG-RAN
Commits
f31174ee
Commit
f31174ee
authored
6 years ago
by
Nick Ho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fill Msg4 DCI and Data information in order to transmit at PHY
parent
d9d73306
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
45 additions
and
19 deletions
+45
-19
openair1/SCHED/IF_Module_L1_primitives_NB_IoT.c
openair1/SCHED/IF_Module_L1_primitives_NB_IoT.c
+6
-6
openair2/LAYER2/MAC/eNB_scheduler_RA_NB_IoT.c
openair2/LAYER2/MAC/eNB_scheduler_RA_NB_IoT.c
+34
-8
openair2/LAYER2/MAC/eNB_scheduler_ulsch_NB_IoT.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch_NB_IoT.c
+3
-3
openair2/LAYER2/MAC/proto_NB_IoT.h
openair2/LAYER2/MAC/proto_NB_IoT.h
+1
-1
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+1
-1
No files found.
openair1/SCHED/IF_Module_L1_primitives_NB_IoT.c
View file @
f31174ee
...
...
@@ -199,8 +199,8 @@ void handle_nfapi_dlsch_pdu_NB_IoT(PHY_VARS_eNB *eNB,
//printf("rel13->rnti: %d, eNB->ndlsch_RAR->rnti: %d\n",rel13->rnti,eNB->ndlsch_RAR->rnti);
//eNB->ndlsch_RAR->rnti = rel13->rnti;
//check if the PDU is for RAR
if
(
eNB
->
ndlsch_RAR
!=
NULL
&&
eNB
->
ndlsch_RAR
->
ndlsch_type
==
RAR
)
//rnti for the RAR should have been set priviously by the DCI
//
if(eNB->ndlsch_RAR != NULL && rel13->rnti == eNB->ndlsch_RAR->rnti) //rnti for the RAR should have been set priviously by the DCI
//
if(eNB->ndlsch_RAR != NULL && eNB->ndlsch_RAR->ndlsch_type == RAR) //rnti for the RAR should have been set priviously by the DCI
if
(
eNB
->
ndlsch_RAR
!=
NULL
&&
rel13
->
rnti
==
eNB
->
ndlsch_RAR
->
rnti
)
//rnti for the RAR should have been set priviously by the DCI
{
eNB
->
ndlsch_RAR
->
active
=
1
;
...
...
@@ -226,13 +226,13 @@ void handle_nfapi_dlsch_pdu_NB_IoT(PHY_VARS_eNB *eNB,
else
{
//this for ue data
//TODO
LOG_I
(
PHY
,
"handling MSG4 or ue-spec data"
);
LOG_I
(
PHY
,
"handling MSG4 or ue-spec data
\n
"
);
//program addition DLSCH parameters not from DCI (for the moment we only pass the pdu)
//int UE_id = find_dlsch(rel13->rnti,eNB,SEARCH_EXIST);
UE_id
=
find_ue_NB_IoT
(
rel13
->
rnti
,
eNB
);
AssertFatal
(
UE_id
==-
1
,
"no existing ue specific dlsch_context
\n
"
);
UE_id
=
0
;
//
UE_id = find_ue_NB_IoT(rel13->rnti,eNB);
//
AssertFatal(UE_id==-1,"no existing ue specific dlsch_context\n");
ndlsch
=
eNB
->
ndlsch
[(
uint8_t
)
UE_id
];
ndlsch_harq
=
eNB
->
ndlsch
[(
uint8_t
)
UE_id
]
->
harq_process
;
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/eNB_scheduler_RA_NB_IoT.c
View file @
f31174ee
...
...
@@ -677,7 +677,7 @@ void schedule_msg4_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
int
dci_subframe
,
dci_end_subframe
,
dci_first_subframe
,
num_dci_subframe
;
int
msg4_subframe
=
0
,
msg4_end_subframe
,
msg4_first_subframe
,
num_msg4_subframe
;
int
harq_subframe
,
harq_end_subframe
;
int
msg4_length
=
0
;
// return value of msg4 pdu (bits)
int
dci_candidate
,
num_candidate
;
int
msg4_i_delay
,
i
,
res
,
rep
;
int
end_flagHARQ
,
HARQ_delay
;
...
...
@@ -685,6 +685,11 @@ void schedule_msg4_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
schedule_result_t
*
dci_result
;
schedule_result_t
*
msg4_result
;
schedule_result_t
*
harq_result
;
uint32_t
I_tbs
,
I_sf
,
I_mcs
;
//Transport block size
int
TBS
;
int
n_sf
;
#if 0
// msg4 pre-processor
...
...
@@ -761,8 +766,22 @@ void schedule_msg4_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
}
// check msg4 resource
rep
=
dl_rep
[
msg4_nodes
->
ce_level
];
msg4_length
=
fill_msg4_NB_IoT
(
mac_inst
,
msg4_nodes
);
I_mcs
=
get_I_mcs
(
msg4_nodes
->
ce_level
);
I_tbs
=
I_mcs
;
TBS
=
get_max_tbs
(
I_tbs
);
if
(
TBS
>
msg4_length
)
{
TBS
=
get_tbs
(
msg4_length
,
I_tbs
,
&
I_sf
);
LOG_D
(
MAC
,
"TBS change to %d because data size is smaller than previous TBS
\n
"
,
TBS
);
}
else
LOG_E
(
MAC
,
"the size of MSG4 is bigger than max TBS
\n
"
);
//Get number of subframe this UE need per repetition
n_sf
=
get_num_sf
(
I_sf
);
LOG_D
(
MAC
,
"n_sf = %d
\n
"
,
n_sf
);
num_msg4_subframe
=
1
*
rep
;
// 4 subframe?
num_msg4_subframe
=
n_sf
*
rep
;
// 4 subframe?
msg4_i_delay
=
find_suit_i_delay
(
rmax
,
r
,
dci_candidate
);
for
(
i
=
msg4_i_delay
;
i
<
8
;
++
i
){
msg4_i_delay
=
(
msg4_i_delay
==
8
)
?
0
:
msg4_i_delay
;
...
...
@@ -794,7 +813,6 @@ void schedule_msg4_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
if
(
0
==
fail
){
LOG_D
(
MAC
,
"[%04d][RA scheduler][MSG4][CE%d] rnti: %d scheduling success
\n
"
,
abs_subframe
-
1
,
msg4_nodes
->
ce_level
,
msg4_nodes
->
ue_rnti
);
fill_msg4_NB_IoT
(
mac_inst
,
msg4_nodes
);
msg4_nodes
->
wait_msg4_ack
=
1
;
DCIFormatN1_t
*
dci_n1_msg4
=
(
DCIFormatN1_t
*
)
malloc
(
sizeof
(
DCIFormatN1_t
));
// dci entity
...
...
@@ -833,7 +851,7 @@ void schedule_msg4_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
msg4_result
=
(
schedule_result_t
*
)
malloc
(
sizeof
(
schedule_result_t
));
msg4_result
->
output_subframe
=
msg4_first_subframe
;
// msg4_subframe;
msg4_result
->
end_subframe
=
msg4_end_subframe
;
msg4_result
->
sdu_length
=
0
;
msg4_result
->
sdu_length
=
TBS
*
8
;
msg4_result
->
direction
=
DL
;
msg4_result
->
DCI_release
=
0
;
msg4_result
->
channel
=
NPDSCH
;
...
...
@@ -860,7 +878,7 @@ void schedule_msg4_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs_subframe){
harq_result
->
next
=
(
schedule_result_t
*
)
0
;
LOG_I
(
MAC
,
"[%04d][RA scheduler][MSG4] UE:%x MSG4DCI %d-%d MSG4 %d-%d HARQ %d-%d
\n
"
,
abs_subframe
-
1
,
msg4_nodes
->
ue_rnti
,
dci_first_subframe
,
dci_end_subframe
,
msg4_first_subframe
,
msg4_end_subframe
,
HARQ_info
.
sf_start
,
HARQ_info
.
sf_end
);
LOG_I
(
MAC
,
"[%04d][RA scheduler][MSG4] UE:%x MSG4DCI %d-%d MSG4 %d-%d HARQ %d-%d
, TBS = %d
\n
"
,
abs_subframe
-
1
,
msg4_nodes
->
ue_rnti
,
dci_first_subframe
,
dci_end_subframe
,
msg4_first_subframe
,
msg4_end_subframe
,
HARQ_info
.
sf_start
,
HARQ_info
.
sf_end
,
TBS
*
8
);
LOG_D
(
MAC
,
"[%04d][RA scheduler][MSG4][CE%d] MSG4 DCI %d-%d MSG4 %d-%d HARQ %d-%d
\n
"
,
abs_subframe
-
1
,
msg4_nodes
->
ce_level
,
dci_first_subframe
,
dci_end_subframe
,
msg4_first_subframe
,
msg4_end_subframe
,
HARQ_info
.
sf_start
,
HARQ_info
.
sf_end
);
msg4_nodes
->
msg4_retransmit_count
++
;
...
...
@@ -958,27 +976,31 @@ void fill_rar_NB_IoT(
// Generate MSG4 MAC PDU
void
fill_msg4_NB_IoT
(
int
fill_msg4_NB_IoT
(
eNB_MAC_INST_NB_IoT
*
inst
,
RA_TEMPLATE_NB_IoT
*
ra_template
)
{
int
length
=
0
;
uint8_t
*
dlsch_buffer
=
&
ra_template
->
msg4_buffer
[
0
];
// we have three subheader here: 1 for padding, 2 for Control element of Contention resolution, 3 for CCCH
SCH_SUBHEADER_FIXED_NB_IoT
*
msg4_sub_1
=
(
SCH_SUBHEADER_FIXED_NB_IoT
*
)
dlsch_buffer
;
msg4_sub_1
->
R
=
0
;
msg4_sub_1
->
E
=
1
;
msg4_sub_1
->
LCID
=
PADDING
;
length
+=
1
;
SCH_SUBHEADER_FIXED_NB_IoT
*
msg4_sub_2
=
(
SCH_SUBHEADER_FIXED_NB_IoT
*
)
(
msg4_sub_1
+
1
);
msg4_sub_2
->
R
=
0
;
msg4_sub_2
->
E
=
1
;
msg4_sub_2
->
LCID
=
UE_CONTENTION_RESOLUTION
;
length
+=
1
;
SCH_SUBHEADER_FIXED_NB_IoT
*
msg4_sub_3
=
(
SCH_SUBHEADER_FIXED_NB_IoT
*
)
(
msg4_sub_2
+
1
);
msg4_sub_3
->
R
=
0
;
msg4_sub_3
->
E
=
0
;
msg4_sub_3
->
LCID
=
CCCH_NB_IoT
;
length
+=
1
;
uint8_t
*
con_res
=
(
uint8_t
*
)(
dlsch_buffer
+
3
);
...
...
@@ -988,6 +1010,7 @@ void fill_msg4_NB_IoT(
con_res
[
3
]
=
ra_template
->
ccch_buffer
[
3
];
con_res
[
4
]
=
ra_template
->
ccch_buffer
[
4
];
con_res
[
5
]
=
ra_template
->
ccch_buffer
[
5
];
length
+=
6
;
uint8_t
*
msg4_rrc_sdu
=
(
uint8_t
*
)
(
dlsch_buffer
+
9
);
...
...
@@ -998,9 +1021,12 @@ void fill_msg4_NB_IoT(
msg4_rrc_sdu
[
4
]
=
ra_template
->
msg4_rrc_buffer
[
4
];
msg4_rrc_sdu
[
5
]
=
ra_template
->
msg4_rrc_buffer
[
5
];
msg4_rrc_sdu
[
6
]
=
ra_template
->
msg4_rrc_buffer
[
6
];
length
+=
7
;
/*
printf("MSG4 PDU = ");
for
(
int
i
=
0
;
i
<
16
;
i
++
)
for(int i=0; i<
length
;i++)
printf("%02x ",dlsch_buffer[i]);
printf("\n");
*/
return
length
;
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/eNB_scheduler_ulsch_NB_IoT.c
View file @
f31174ee
...
...
@@ -260,14 +260,14 @@ void rx_sdu_NB_IoT(module_id_t module_id, int CC_id, frame_t frame, sub_frame_t
PHR
=
((
payload_ptr
[
0
]
>>
5
)
&
0x01
)
*
2
+
((
payload_ptr
[
0
]
>>
4
)
&
0x01
);
DVI_index
=
(
payload_ptr
[
0
]
>>
3
&
0x01
)
*
8
+
(
payload_ptr
[
0
]
>>
2
&
0x01
)
*
4
+
(
payload_ptr
[
0
]
>>
1
&
0x01
)
*
2
+
(
payload_ptr
[
0
]
>>
0
&
0x01
);
ul_total_buffer
=
DV_table
[
DVI_index
];
LOG_
I
(
MAC
,
"PHR = %d, ul_total_buffer = %d
\n
"
,
PHR
,
ul_total_buffer
);
LOG_
D
(
MAC
,
"PHR = %d, ul_total_buffer = %d
\n
"
,
PHR
,
ul_total_buffer
);
// go to payload
payload_ptr
+=
1
;
// Note that the first 6 byte (48 bits) of this CCCH SDU should be encoded in the MSG4 for contention resolution
printf
(
"CCCH SDU content: "
);
/*
printf("CCCH SDU content: ");
for(int a = 0; a<9;a++)
printf("%02x ",payload_ptr[a]);
printf
(
"
\n
"
);
printf("\n");
*/
rx_lengths
[
i
]
-=
1
;
LOG_D
(
MAC
,
"rx_lengths : %d
\n
"
,
rx_lengths
[
i
]);
msg4_rrc_pdu
=
mac_rrc_msg3_ind_NB_IoT
(
payload_ptr
,
rnti
,
rx_lengths
[
i
]);
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/proto_NB_IoT.h
View file @
f31174ee
...
...
@@ -126,7 +126,7 @@ void schedule_msg3_retransimission_NB_IoT(eNB_MAC_INST_NB_IoT *mac_inst, int abs
void
schedule_msg4_NB_IoT
(
eNB_MAC_INST_NB_IoT
*
mac_inst
,
int
abs_subframe
);
void
fill_rar_NB_IoT
(
eNB_MAC_INST_NB_IoT
*
inst
,
RA_TEMPLATE_NB_IoT
*
ra_template
,
uint8_t
msg3_schedule_delay
,
uint8_t
msg3_rep
,
sched_temp_UL_NB_IoT_t
*
schedule_template
);
void
receive_msg4_ack_NB_IoT
(
eNB_MAC_INST_NB_IoT
*
mac_inst
,
rnti_t
rnti
);
void
fill_msg4_NB_IoT
(
eNB_MAC_INST_NB_IoT
*
inst
,
RA_TEMPLATE_NB_IoT
*
ra_template
);
int
fill_msg4_NB_IoT
(
eNB_MAC_INST_NB_IoT
*
inst
,
RA_TEMPLATE_NB_IoT
*
ra_template
);
//USS
void
schedule_uss_NB_IoT
(
module_id_t
module_id
,
eNB_MAC_INST_NB_IoT
*
mac_inst
,
uint32_t
subframe
,
uint32_t
frame
,
uint32_t
hypersfn
,
int
index_ss
);
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/LITE/rrc_eNB.c
View file @
f31174ee
...
...
@@ -155,7 +155,7 @@ uint8_t* generate_msg4_NB_IoT(rrc_eNB_carrier_data_NB_IoT_t *carrier)
uint8_t
*
mac_rrc_msg3_ind_NB_IoT
(
uint8_t
*
payload_ptr
,
uint16_t
rnti
,
uint32_t
length
)
{
LOG_
I
(
RRC
,
"recieve MSG3 CCCH SDU from MAC
\n
"
);
LOG_
D
(
RRC
,
"recieve MSG3 CCCH SDU from MAC
\n
"
);
asn_dec_rval_t
dec_rval
;
struct
rrc_eNB_ue_context_NB_IoT_s
*
ue_context_p
=
NULL
;
uint8_t
*
msg4_rrc_sdu
=
NULL
;
...
...
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