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
abf71140
Commit
abf71140
authored
Apr 16, 2018
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MAC: change all slice_id_t to slice index variables
parent
15428f70
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
195 additions
and
177 deletions
+195
-177
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+8
-4
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+36
-31
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+14
-12
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+21
-18
openair2/LAYER2/MAC/pre_processor.c
openair2/LAYER2/MAC/pre_processor.c
+101
-98
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+15
-14
No files found.
openair2/LAYER2/MAC/defs.h
View file @
abf71140
...
...
@@ -984,8 +984,8 @@ typedef struct {
uint16_t
sorting_criteria
[
MAX_NUM_SLICES
][
CR_NUM
];
uint16_t
first_rb_offset
[
MAX_NUM_CCs
][
MAX_NUM_SLICES
];
slice_id_t
assoc_dl_slice
[
NUMBER_OF_UE_MAX
];
slice_id_t
assoc_ul_slice
[
NUMBER_OF_UE_MAX
];
int
assoc_dl_slice_idx
[
NUMBER_OF_UE_MAX
];
int
assoc_ul_slice_idx
[
NUMBER_OF_UE_MAX
];
}
UE_list_t
;
...
...
@@ -1008,12 +1008,14 @@ typedef struct {
* slice specific scheduler for the DL
*/
typedef
void
(
*
slice_scheduler_dl
)(
module_id_t
mod_id
,
slice_id_t
slice_id
,
int
slice_idx
,
frame_t
frame
,
sub_frame_t
subframe
,
int
*
mbsfn_flag
);
typedef
struct
{
slice_id_t
id
;
/// RB share for each slice for past and current time
float
pct
;
float
pct_current
;
...
...
@@ -1056,13 +1058,15 @@ typedef struct {
}
slice_sched_conf_dl_t
;
typedef
void
(
*
slice_scheduler_ul
)(
module_id_t
mod_id
,
slice_id_t
slice_id
,
int
slice_idx
,
frame_t
frame
,
sub_frame_t
subframe
,
unsigned
char
sched_subframe
,
uint16_t
*
first_rb
);
typedef
struct
{
slice_id_t
id
;
/// RB share for each slice for past and current time
float
pct
;
float
pct_current
;
...
...
openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
View file @
abf71140
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
abf71140
...
...
@@ -1867,8 +1867,8 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP, int harq_pidP
UE_list
->
UE_sched_ctrl
[
UE_id
].
ue_reestablishment_reject_timer
=
0
;
/* default slice in case there was something different */
UE_list
->
assoc_dl_slice
[
UE_id
]
=
0
;
UE_list
->
assoc_ul_slice
[
UE_id
]
=
0
;
UE_list
->
assoc_dl_slice
_idx
[
UE_id
]
=
0
;
UE_list
->
assoc_ul_slice
_idx
[
UE_id
]
=
0
;
UE_list
->
UE_sched_ctrl
[
UE_id
].
ta_update
=
31
;
...
...
@@ -4141,24 +4141,26 @@ uint16_t nb_rbs_allowed_slice(float rb_percentage, int total_rbs)
return
(
uint16_t
)
floor
(
rb_percentage
*
total_rbs
);
}
int
ue_dl_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
slice_id_t
slice_id
)
int
ue_dl_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
int
slice_idx
)
{
if
((
slice_id
<
0
)
||
(
slice_id
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_dl
))
{
LOG_W
(
MAC
,
"out of range slice id %d
\n
"
,
slice_id
);
if
((
slice_idx
<
0
)
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_dl
))
{
LOG_W
(
MAC
,
"out of range slice index %d (slice ID %d)
\n
"
,
slice_idx
,
RC
.
mac
[
mod_id
]
->
slice_info
.
dl
[
slice_idx
].
id
);
return
0
;
}
return
RC
.
mac
[
mod_id
]
->
UE_list
.
active
[
UE_id
]
==
TRUE
&&
RC
.
mac
[
mod_id
]
->
UE_list
.
assoc_dl_slice
[
UE_id
]
==
slice_id
;
&&
RC
.
mac
[
mod_id
]
->
UE_list
.
assoc_dl_slice
_idx
[
UE_id
]
==
slice_idx
;
}
int
ue_ul_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
slice_id_t
slice_id
)
int
ue_ul_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
int
slice_idx
)
{
if
((
slice_id
<
0
)
||
(
slice_id
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_ul
))
{
LOG_W
(
MAC
,
"out of range slice id %d
\n
"
,
slice_id
);
if
((
slice_idx
<
0
)
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_ul
))
{
LOG_W
(
MAC
,
"out of range slice index %d (slice ID %d)
\n
"
,
slice_idx
,
RC
.
mac
[
mod_id
]
->
slice_info
.
dl
[
slice_idx
].
id
);
return
0
;
}
return
RC
.
mac
[
mod_id
]
->
UE_list
.
active
[
UE_id
]
==
TRUE
&&
RC
.
mac
[
mod_id
]
->
UE_list
.
assoc_ul_slice
[
UE_id
]
==
slice_id
;
&&
RC
.
mac
[
mod_id
]
->
UE_list
.
assoc_ul_slice
_idx
[
UE_id
]
==
slice_idx
;
}
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
abf71140
...
...
@@ -978,8 +978,9 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP,
}
for
(
i
=
0
;
i
<
sli
->
n_ul
;
i
++
)
{
if
(
sli
->
ul
[
i
].
pct
<
0
){
LOG_W
(
MAC
,
"[eNB %d] frame %d subframe %d:invalid slice %d percentage %f. resetting to zero"
,
module_idP
,
frameP
,
subframeP
,
i
,
sli
->
ul
[
i
].
pct
);
LOG_W
(
MAC
,
"[eNB %d][SLICE %d][UL] frame %d subframe %d: invalid percentage %f. resetting to zero"
,
module_idP
,
sli
->
ul
[
i
].
id
,
frameP
,
subframeP
,
sli
->
ul
[
i
].
pct
);
sli
->
ul
[
i
].
pct
=
0
;
}
sli
->
tot_pct_ul
+=
sli
->
ul
[
i
].
pct
;
...
...
@@ -1017,7 +1018,7 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP,
// check if the slice rb share has changed, and log the console
if
(
sli
->
ul
[
i
].
pct_current
!=
sli
->
ul
[
i
].
pct
){
LOG_N
(
MAC
,
"[eNB %d][SLICE %d][UL] frame %d subframe %d: total percentage %f-->%f, slice RB percentage has changed: %f-->%f
\n
"
,
module_idP
,
i
,
frameP
,
subframeP
,
sli
->
tot_pct_ul_current
,
module_idP
,
sli
->
ul
[
i
].
id
,
frameP
,
subframeP
,
sli
->
tot_pct_ul_current
,
sli
->
tot_pct_ul
,
sli
->
ul
[
i
].
pct_current
,
sli
->
ul
[
i
].
pct
);
sli
->
tot_pct_ul_current
=
sli
->
tot_pct_ul
;
sli
->
ul
[
i
].
pct_current
=
sli
->
ul
[
i
].
pct
;
...
...
@@ -1027,11 +1028,12 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP,
if
(
sli
->
ul
[
i
].
maxmcs_current
!=
sli
->
ul
[
i
].
maxmcs
){
if
((
sli
->
ul
[
i
].
maxmcs
>=
0
)
&&
(
sli
->
ul
[
i
].
maxmcs
<=
16
)){
LOG_N
(
MAC
,
"[eNB %d][SLICE %d][UL] frame %d subframe %d: slice MAX MCS has changed: %d-->%d
\n
"
,
module_idP
,
i
,
frameP
,
subframeP
,
sli
->
ul
[
i
].
maxmcs_current
,
sli
->
ul
[
i
].
maxmcs
);
module_idP
,
sli
->
ul
[
i
].
id
,
frameP
,
subframeP
,
sli
->
ul
[
i
].
maxmcs_current
,
sli
->
ul
[
i
].
maxmcs
);
sli
->
ul
[
i
].
maxmcs_current
=
sli
->
ul
[
i
].
maxmcs
;
}
else
{
LOG_W
(
MAC
,
"[eNB %d][SLICE %d][UL] invalid slice max mcs %d, revert the previous value %d
\n
"
,
module_idP
,
i
,
sli
->
ul
[
i
].
maxmcs
,
sli
->
ul
[
i
].
maxmcs_current
);
module_idP
,
sli
->
ul
[
i
].
id
,
sli
->
ul
[
i
].
maxmcs
,
sli
->
ul
[
i
].
maxmcs_current
);
sli
->
ul
[
i
].
maxmcs
=
sli
->
ul
[
i
].
maxmcs_current
;
}
}
...
...
@@ -1039,11 +1041,13 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP,
if
(
sli
->
ul
[
i
].
first_rb_current
!=
sli
->
ul
[
i
].
first_rb
){
if
(
sli
->
ul
[
i
].
first_rb
>=
0
){
// FIXME: Max limit is checked in the scheduler
LOG_N
(
MAC
,
"[eNB %d][SLICE %d][UL] frame %d subframe %d: slice first rb has changed: %d-->%d
\n
"
,
module_idP
,
i
,
frameP
,
subframeP
,
sli
->
ul
[
i
].
first_rb_current
,
sli
->
ul
[
i
].
first_rb
);
module_idP
,
sli
->
ul
[
i
].
id
,
frameP
,
subframeP
,
sli
->
ul
[
i
].
first_rb_current
,
sli
->
ul
[
i
].
first_rb
);
sli
->
ul
[
i
].
first_rb_current
=
sli
->
ul
[
i
].
first_rb
;
}
else
{
LOG_W
(
MAC
,
"[eNB %d][SLICE %d][UL] invalid slice first rb %d, revert the previous value %d
\n
"
,
module_idP
,
i
,
sli
->
ul
[
i
].
first_rb
,
sli
->
ul
[
i
].
first_rb_current
);
module_idP
,
sli
->
ul
[
i
].
id
,
sli
->
ul
[
i
].
first_rb
,
sli
->
ul
[
i
].
first_rb_current
);
sli
->
ul
[
i
].
first_rb
=
sli
->
ul
[
i
].
first_rb_current
;
}
}
...
...
@@ -1051,13 +1055,13 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP,
// check if a new scheduler, and log the console
if
(
sli
->
ul
[
i
].
update_sched_current
!=
sli
->
ul
[
i
].
update_sched
)
{
LOG_N
(
MAC
,
"[eNB %d][SLICE %d][UL] frame %d subframe %d: UL scheduler for this slice is updated: %s
\n
"
,
module_idP
,
i
,
frameP
,
subframeP
,
sli
->
ul
[
i
].
sched_name
);
module_idP
,
sli
->
ul
[
i
].
id
,
frameP
,
subframeP
,
sli
->
ul
[
i
].
sched_name
);
sli
->
ul
[
i
].
update_sched_current
=
sli
->
ul
[
i
].
update_sched
;
}
}
else
{
if
(
sli
->
n_ul
==
sli
->
n_ul_current
)
{
LOG_W
(
MAC
,
"[eNB %d][SLICE %d][UL] invalid total RB share (%f->%f), reduce proportionally the RB share by 0.1
\n
"
,
module_idP
,
i
,
sli
->
tot_pct_ul_current
,
sli
->
tot_pct_ul
);
module_idP
,
sli
->
ul
[
i
].
id
,
sli
->
tot_pct_ul_current
,
sli
->
tot_pct_ul
);
if
(
sli
->
ul
[
i
].
pct
>
sli
->
avg_pct_ul
)
{
sli
->
ul
[
i
].
pct
-=
0
.
1
;
sli
->
tot_pct_ul
-=
0
.
1
;
...
...
@@ -1065,9 +1069,8 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP,
}
else
{
// here we can correct the values, e.g. reduce proportionally
LOG_W
(
MAC
,
"[eNB %d][SLICE %d][UL] invalid total RB share (%f->%f), revert the number of slice to its previous value (%d->%d)
\n
"
,
module_idP
,
i
,
sli
->
tot_pct_ul_current
,
sli
->
tot_pct_ul
,
sli
->
n_ul
,
sli
->
n_ul_current
);
module_idP
,
sli
->
ul
[
i
].
id
,
sli
->
tot_pct_ul_current
,
sli
->
tot_pct_ul
,
sli
->
n_ul
,
sli
->
n_ul_current
);
sli
->
n_ul
=
sli
->
n_ul_current
;
sli
->
ul
[
i
].
pct
=
sli
->
ul
[
i
].
pct_current
;
}
...
...
@@ -1082,7 +1085,7 @@ schedule_ulsch(module_id_t module_idP, frame_t frameP,
void
schedule_ulsch_rnti
(
module_id_t
module_idP
,
slice_id_t
slice_id
,
int
slice_idx
,
frame_t
frameP
,
sub_frame_t
subframeP
,
unsigned
char
sched_subframeP
,
uint16_t
*
first_rb
)
...
...
@@ -1124,14 +1127,14 @@ schedule_ulsch_rnti(module_id_t module_idP,
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
++
CC_id
)
{
N_RB_UL
=
to_prb
(
cc
[
CC_id
].
ul_Bandwidth
);
UE_list
->
first_rb_offset
[
CC_id
][
slice_id
]
=
cmin
(
N_RB_UL
,
sli
->
ul
[
slice_id
].
first_rb
);
UE_list
->
first_rb_offset
[
CC_id
][
slice_id
x
]
=
cmin
(
N_RB_UL
,
sli
->
ul
[
slice_idx
].
first_rb
);
}
//LOG_D(MAC, "entering ulsch preprocesor\n");
ulsch_scheduler_pre_processor
(
module_idP
,
slice_id
,
frameP
,
subframeP
,
first_rb
);
ulsch_scheduler_pre_processor
(
module_idP
,
slice_id
x
,
frameP
,
subframeP
,
first_rb
);
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
++
CC_id
)
{
first_rb_slice
[
CC_id
]
=
first_rb
[
CC_id
]
+
UE_list
->
first_rb_offset
[
CC_id
][
slice_id
];
first_rb_slice
[
CC_id
]
=
first_rb
[
CC_id
]
+
UE_list
->
first_rb_offset
[
CC_id
][
slice_id
x
];
}
//LOG_D(MAC, "exiting ulsch preprocesor\n");
...
...
@@ -1141,7 +1144,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
for
(
UE_id
=
UE_list
->
head_ul
;
UE_id
>=
0
;
UE_id
=
UE_list
->
next_ul
[
UE_id
])
{
if
(
!
ue_ul_slice_membership
(
module_idP
,
UE_id
,
slice_id
))
if
(
!
ue_ul_slice_membership
(
module_idP
,
UE_id
,
slice_id
x
))
continue
;
// don't schedule if Msg4 is not received yet
...
...
@@ -1308,7 +1311,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
UE_template
->
oldNDI_UL
[
harq_pid
]
=
ndi
;
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
normalized_rx_power
=
normalized_rx_power
;
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
target_rx_power
=
target_rx_power
;
UE_template
->
mcs_UL
[
harq_pid
]
=
cmin
(
UE_template
->
pre_assigned_mcs_ul
,
sli
->
ul
[
slice_id
].
maxmcs
);
UE_template
->
mcs_UL
[
harq_pid
]
=
cmin
(
UE_template
->
pre_assigned_mcs_ul
,
sli
->
ul
[
slice_id
x
].
maxmcs
);
UE_list
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_mcs1
=
UE_template
->
mcs_UL
[
harq_pid
];
//cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS
if
(
UE_template
->
pre_allocated_rb_table_index_ul
>=
0
)
{
...
...
openair2/LAYER2/MAC/pre_processor.c
View file @
abf71140
This diff is collapsed.
Click to expand it.
openair2/LAYER2/MAC/proto.h
View file @
abf71140
...
...
@@ -102,12 +102,12 @@ void schedule_ulsch(module_id_t module_idP, frame_t frameP,
/** \brief ULSCH Scheduling per RNTI
@param Mod_id Instance ID of eNB
@param slice_id
Instance slice
for this eNB
@param slice_id
x Slice instance index
for this eNB
@param frame Frame index
@param subframe Subframe number on which to act
@param sched_subframe Subframe number where PUSCH is transmitted (for DAI lookup)
*/
void
schedule_ulsch_rnti
(
module_id_t
module_idP
,
slice_id_t
slice_idP
,
frame_t
frameP
,
void
schedule_ulsch_rnti
(
module_id_t
module_idP
,
int
slice_idx
,
frame_t
frameP
,
sub_frame_t
subframe
,
unsigned
char
sched_subframe
,
uint16_t
*
first_rb
);
...
...
@@ -131,7 +131,7 @@ void fill_DLSCH_dci(module_id_t module_idP, frame_t frameP,
void
schedule_dlsch
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframe
,
int
*
mbsfn_flag
);
void
schedule_ue_spec
(
module_id_t
module_idP
,
slice_id_t
slice_id
P
,
void
schedule_ue_spec
(
module_id_t
module_idP
,
int
slice_idx
P
,
frame_t
frameP
,
sub_frame_t
subframe
,
int
*
mbsfn_flag
);
void
schedule_ue_spec_phy_test
(
module_id_t
module_idP
,
frame_t
frameP
,
sub_frame_t
subframe
,
int
*
mbsfn_flag
);
...
...
@@ -192,6 +192,7 @@ void clear_nfapi_information(eNB_MAC_INST * eNB, int CC_idP,
// eNB functions
/* \brief This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done
@param Mod_id Instance ID of eNB
@param slice_idxP Slice instance index for the slice in which scheduling happens
@param frame Index of frame
@param subframe Index of current subframe
@param N_RBS Number of resource block groups
...
...
@@ -199,13 +200,13 @@ void clear_nfapi_information(eNB_MAC_INST * eNB, int CC_idP,
void
dlsch_scheduler_pre_processor
(
module_id_t
module_idP
,
slice_id_t
slice_id
P
,
int
slice_idx
P
,
frame_t
frameP
,
sub_frame_t
subframe
,
int
*
mbsfn_flag
);
void
dlsch_scheduler_pre_processor_reset
(
module_id_t
module_idP
,
slice_id_t
slice_id
,
int
slice_idx
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
N_RBG
[
MAX_NUM_CCs
],
...
...
@@ -216,11 +217,11 @@ void dlsch_scheduler_pre_processor_reset(module_id_t module_idP,
int
*
mbsfn_flag
);
void
dlsch_scheduler_pre_processor_partitioning
(
module_id_t
Mod_id
,
slice_id_t
slice_id
,
int
slice_idx
,
const
uint8_t
rbs_retx
[
MAX_NUM_CCs
]);
void
dlsch_scheduler_pre_processor_accounting
(
module_id_t
Mod_id
,
slice_id_t
slice_id
,
int
slice_idx
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
min_rb_unit
[
MAX_NUM_CCs
],
...
...
@@ -228,7 +229,7 @@ void dlsch_scheduler_pre_processor_accounting(module_id_t Mod_id,
uint16_t
nb_rbs_accounted
[
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
]);
void
dlsch_scheduler_pre_processor_positioning
(
module_id_t
Mod_id
,
slice_id_t
slice_id
,
int
slice_idx
,
int
N_RBG
[
MAX_NUM_CCs
],
int
min_rb_unit
[
MAX_NUM_CCs
],
uint16_t
nb_rbs_required
[
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
],
...
...
@@ -238,7 +239,7 @@ void dlsch_scheduler_pre_processor_positioning(module_id_t Mod_id,
uint8_t
MIMO_mode_indicator
[
MAX_NUM_CCs
][
N_RBG_MAX
]);
void
dlsch_scheduler_pre_processor_intraslice_sharing
(
module_id_t
Mod_id
,
slice_id_t
slice_id
,
int
slice_idx
,
int
N_RBG
[
MAX_NUM_CCs
],
int
min_rb_unit
[
MAX_NUM_CCs
],
uint16_t
nb_rbs_required
[
MAX_NUM_CCs
][
NUMBER_OF_UE_MAX
],
...
...
@@ -673,18 +674,18 @@ int UE_PCCID(module_id_t mod_idP, int ue_idP);
rnti_t
UE_RNTI
(
module_id_t
mod_idP
,
int
ue_idP
);
void
ulsch_scheduler_pre_processor
(
module_id_t
module_idP
,
slice_id_t
slice_id
,
int
frameP
,
void
ulsch_scheduler_pre_processor
(
module_id_t
module_idP
,
int
slice_idx
,
int
frameP
,
sub_frame_t
subframeP
,
uint16_t
*
first_rb
);
void
store_ulsch_buffer
(
module_id_t
module_idP
,
int
frameP
,
sub_frame_t
subframeP
);
void
sort_ue_ul
(
module_id_t
module_idP
,
int
frameP
,
sub_frame_t
subframeP
);
void
assign_max_mcs_min_rb
(
module_id_t
module_idP
,
int
slice_id
,
int
frameP
,
void
assign_max_mcs_min_rb
(
module_id_t
module_idP
,
int
slice_id
x
,
int
frameP
,
sub_frame_t
subframeP
,
uint16_t
*
first_rb
);
void
adjust_bsr_info
(
int
buffer_occupancy
,
uint16_t
TBS
,
UE_TEMPLATE
*
UE_template
);
int
phy_stats_exist
(
module_id_t
Mod_id
,
int
rnti
);
void
sort_UEs
(
module_id_t
Mod_idP
,
slice_id_t
slice_id
,
int
frameP
,
sub_frame_t
subframeP
);
void
sort_UEs
(
module_id_t
Mod_idP
,
int
slice_idx
,
int
frameP
,
sub_frame_t
subframeP
);
/*! \fn UE_L2_state_t ue_scheduler(const module_id_t module_idP,const frame_t frameP, const sub_frame_t subframe, const lte_subframe_t direction,const uint8_t eNB_index)
\brief UE scheduler where all the ue background tasks are done. This function performs the following: 1) Trigger PDCP every 5ms 2) Call RRC for link status return to PHY3) Perform SR/BSR procedures for scheduling feedback 4) Perform PHR procedures.
...
...
@@ -1200,8 +1201,8 @@ int l2_init_ue(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active,
/*Slice related functions */
uint16_t
nb_rbs_allowed_slice
(
float
rb_percentage
,
int
total_rbs
);
int
ue_dl_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
slice_id_t
slice_id
);
int
ue_ul_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
slice_id_t
slice_id
);
int
ue_dl_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
int
slice_idx
);
int
ue_ul_slice_membership
(
module_id_t
mod_id
,
int
UE_id
,
int
slice_idx
);
#endif
/** @}*/
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