Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
OpenXG
OpenXG UE
Commits
58893aae
Commit
58893aae
authored
Jan 25, 2019
by
Stefan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
forme eNB_scheduler_primitives < 3900
parent
bd0a1eb6
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
236 additions
and
181 deletions
+236
-181
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+236
-181
No files found.
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
58893aae
...
...
@@ -3018,17 +3018,19 @@ dump_CCE_table(int *CCE_table,
printf
(
"CCE 0: "
);
for
(
i
=
0
;
i
<
nCCE
;
i
++
)
{
printf
(
"%1d."
,
CCE_table
[
i
]);
printf
(
"%1d."
,
CCE_table
[
i
]);
if
((
i
&
7
)
==
7
)
printf
(
"
\n
CCE %d: "
,
i
);
printf
(
"
\n
CCE %d: "
,
i
);
}
Yk
=
(
unsigned
int
)
rnti
;
for
(
i
=
0
;
i
<=
subframe
;
i
++
)
for
(
i
=
0
;
i
<=
subframe
;
i
++
)
{
Yk
=
(
Yk
*
39827
)
%
65537
;
}
Yk
=
Yk
%
(
nCCE
/
L
);
switch
(
L
)
{
...
...
@@ -3047,8 +3049,12 @@ dump_CCE_table(int *CCE_table,
break
;
}
printf
(
"rnti %x, Yk*L = %d, nCCE %d (nCCE/L %d),nb_cand*L %d
\n
"
,
rnti
,
Yk
*
L
,
nCCE
,
nCCE
/
L
,
nb_candidates
*
L
);
printf
(
"rnti %x, Yk*L = %d, nCCE %d (nCCE/L %d),nb_cand*L %d
\n
"
,
rnti
,
Yk
*
L
,
nCCE
,
nCCE
/
L
,
nb_candidates
*
L
);
}
//------------------------------------------------------------------------------
...
...
@@ -3065,16 +3071,16 @@ getnquad(COMMON_channels_t *cc,
int
phich_resource
=
get_phich_resource_times6
(
cc
);
uint8_t
Ngroup_PHICH
=
(
phich_resource
*
N_RB_DL
)
/
48
;
if
(((
phich_resource
*
N_RB_DL
)
%
48
)
>
0
)
if
(((
phich_resource
*
N_RB_DL
)
%
48
)
>
0
)
{
Ngroup_PHICH
++
;
}
if
(
cc
->
Ncp
==
1
)
{
Ngroup_PHICH
<<=
1
;
}
Ngroup_PHICH
*=
mi
;
if
(
(
num_pdcch_symbols
>
0
)
&&
(
num_pdcch_symbols
<
4
)
)
if
(
num_pdcch_symbols
>
0
&&
num_pdcch_symbols
<
4
)
switch
(
N_RB_DL
)
{
case
6
:
Nreg
=
12
+
(
num_pdcch_symbols
-
1
)
*
18
;
...
...
@@ -3093,7 +3099,7 @@ getnquad(COMMON_channels_t *cc,
break
;
default:
return
(
0
)
;
return
0
;
}
// printf("Nreg %d (%d)\n",Nreg,Nreg - 4 - (3*Ngroup_PHICH));
...
...
@@ -3108,7 +3114,9 @@ getnCCE(COMMON_channels_t *cc,
//------------------------------------------------------------------------------
{
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
return
(
getnquad
(
cc
,
num_pdcch_symbols
,
mi
)
/
9
);
return
(
getnquad
(
cc
,
num_pdcch_symbols
,
mi
)
/
9
);
}
//------------------------------------------------------------------------------
...
...
@@ -3126,72 +3134,74 @@ getmi(COMMON_channels_t *cc,
// for TDD
switch
(
cc
->
tdd_Config
->
subframeAssignment
)
{
case
0
:
if
((
subframe
==
0
)
||
(
subframe
==
5
))
return
(
2
);
else
return
(
1
);
break
;
if
(
subframe
==
0
||
subframe
==
5
)
{
return
2
;
}
return
1
;
case
1
:
if
((
subframe
==
0
)
||
(
subframe
==
5
))
return
(
0
);
else
return
(
1
);
break
;
if
(
subframe
==
0
||
subframe
==
5
)
{
return
0
;
}
return
1
;
case
2
:
if
((
subframe
==
3
)
||
(
subframe
==
8
))
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
3
||
subframe
==
8
)
{
return
0
;
}
return
1
;
case
3
:
if
((
subframe
==
0
)
||
(
subframe
==
8
)
||
(
subframe
==
9
))
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
0
||
subframe
==
8
||
subframe
==
9
)
{
return
1
;
}
return
0
;
case
4
:
if
((
subframe
==
8
)
||
(
subframe
==
9
))
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
8
||
subframe
==
9
)
{
return
1
;
}
return
0
;
case
5
:
if
(
subframe
==
8
)
return
(
1
);
else
return
(
0
);
break
;
if
(
subframe
==
8
)
{
return
1
;
}
return
0
;
case
6
:
return
(
1
);
break
;
return
1
;
default:
return
(
0
)
;
break
;
}
return
0
;
}
//------------------------------------------------------------------------------
uint16_t
get_nCCE_max
(
COMMON_channels_t
*
cc
,
int
num_pdcch_symbols
,
int
subframe
)
{
get_nCCE_max
(
COMMON_channels_t
*
cc
,
int
num_pdcch_symbols
,
int
subframe
)
//------------------------------------------------------------------------------
{
AssertFatal
(
cc
!=
NULL
,
"cc is null
\n
"
);
return
(
getnCCE
(
cc
,
num_pdcch_symbols
,
getmi
(
cc
,
subframe
)));
return
(
getnCCE
(
cc
,
num_pdcch_symbols
,
getmi
(
cc
,
subframe
)));
}
// Allocate the CCEs
//------------------------------------------------------------------------------
int
allocate_CCEs
(
int
module_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
test_onlyP
)
{
allocate_CCEs
(
int
module_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
int
test_onlyP
)
//------------------------------------------------------------------------------
{
int
*
CCE_table
=
RC
.
mac
[
module_idP
]
->
CCE_table
[
CC_idP
];
nfapi_dl_config_request_body_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
CC_idP
].
dl_config_request_body
;
...
...
@@ -3526,11 +3536,13 @@ failed:
return
-
1
;
}
//------------------------------------------------------------------------------
nfapi_ul_config_request_pdu_t
*
has_ul_grant
(
module_id_t
module_idP
,
int
CC_idP
,
uint16_t
absSFP
,
uint16_t
rnti
)
//------------------------------------------------------------------------------
{
nfapi_ul_config_request_body_t
*
ul_req
=
&
RC
.
mac
[
module_idP
]
->
UL_req_tmp
[
CC_idP
][
absSFP
%
10
].
ul_config_request_body
;
nfapi_ul_config_request_pdu_t
*
ul_config_pdu
=
&
ul_req
->
ul_config_pdu_list
[
0
];
...
...
@@ -3594,11 +3606,16 @@ has_ul_grant(module_id_t module_idP,
return
(
NULL
);
// no ul grant at all for this UE
}
//------------------------------------------------------------------------------
boolean_t
CCE_allocation_infeasible
(
int
module_idP
,
int
CC_idP
,
int
format_flag
,
int
subframe
,
int
aggregation
,
int
rnti
)
{
int
subframe
,
int
aggregation
,
int
rnti
)
//------------------------------------------------------------------------------
{
nfapi_dl_config_request_body_t
*
DL_req
=
&
RC
.
mac
[
module_idP
]
->
DL_req
[
CC_idP
].
dl_config_request_body
;
nfapi_dl_config_request_pdu_t
*
dl_config_pdu
=
&
DL_req
->
dl_config_pdu_list
[
DL_req
->
number_pdu
];
nfapi_hi_dci0_request_body_t
*
HI_DCI0_req
=
&
RC
.
mac
[
module_idP
]
->
HI_DCI0_req
[
CC_idP
][
subframe
].
hi_dci0_request_body
;
...
...
@@ -3652,44 +3669,55 @@ CCE_allocation_infeasible(int module_idP,
return
res
;
}
void
get_retransmission_timing
(
LTE_TDD_Config_t
*
tdd_Config
,
frame_t
*
frameP
,
sub_frame_t
*
subframeP
)
{
//------------------------------------------------------------------------------
void
get_retransmission_timing
(
LTE_TDD_Config_t
*
tdd_Config
,
frame_t
*
frameP
,
sub_frame_t
*
subframeP
)
//------------------------------------------------------------------------------
{
if
(
tdd_Config
==
NULL
)
{
if
(
*
subframeP
>
1
)
if
(
*
subframeP
>
1
)
{
*
frameP
=
(
*
frameP
+
1
)
%
1024
;
}
*
subframeP
=
(
*
subframeP
+
8
)
%
10
;
}
else
{
switch
(
tdd_Config
->
subframeAssignment
)
{
//TODO fill in other TDD configs
default:
printf
(
"%s:%d: TODO
\n
"
,
__FILE__
,
__LINE__
);
printf
(
"%s:%d: TODO
\n
"
,
__FILE__
,
__LINE__
);
abort
();
break
;
case
1
:
if
(
*
subframeP
==
0
||
*
subframeP
==
5
)
{
*
subframeP
+=
19
;
*
frameP
=
(
*
frameP
+
*
subframeP
/
10
)
%
1024
;
*
frameP
=
(
*
frameP
+
(
*
subframeP
/
10
)
)
%
1024
;
*
subframeP
%=
10
;
}
else
if
(
*
subframeP
==
4
||
*
subframeP
==
9
)
{
*
subframeP
+=
16
;
*
frameP
=
(
*
frameP
+
*
subframeP
/
10
)
%
1024
;
*
frameP
=
(
*
frameP
+
(
*
subframeP
/
10
)
)
%
1024
;
*
subframeP
%=
10
;
}
else
{
AssertFatal
(
2
==
1
,
"Illegal dl subframe %d for tdd config %ld
\n
"
,
*
subframeP
,
AssertFatal
(
2
==
1
,
"Illegal dl subframe %d for tdd config %ld
\n
"
,
*
subframeP
,
tdd_Config
->
subframeAssignment
);
}
break
;
}
}
return
;
}
//------------------------------------------------------------------------------
uint8_t
get_dl_subframe_count
(
int
tdd_config_sfa
,
sub_frame_t
subframeP
)
//------------------------------------------------------------------------------
{
uint8_t
tdd1
[
10
]
=
{
1
,
-
1
,
-
1
,
-
1
,
2
,
3
,
-
1
,
-
1
,
-
1
,
4
};
// special subframes 1,6 are excluded
uint8_t
tdd1
[
10
]
=
{
1
,
-
1
,
-
1
,
-
1
,
2
,
3
,
-
1
,
-
1
,
-
1
,
4
};
// special subframes 1,6 are excluded
switch
(
tdd_config_sfa
)
{
// TODO fill in other tdd configs
case
1
:
...
...
@@ -3699,17 +3727,21 @@ get_dl_subframe_count(int tdd_config_sfa,
return
-
1
;
}
//------------------------------------------------------------------------------
uint8_t
frame_subframe2_dl_harq_pid
(
LTE_TDD_Config_t
*
tdd_Config
,
int
abs_frameP
,
sub_frame_t
subframeP
)
{
sub_frame_t
subframeP
)
//------------------------------------------------------------------------------
{
int
harq_pid
;
uint8_t
count
;
if
(
tdd_Config
)
{
switch
(
tdd_Config
->
subframeAssignment
)
{
//TODO fill in other tdd config
case
1
:
count
=
get_dl_subframe_count
(
tdd_Config
->
subframeAssignment
,
subframeP
);
count
=
get_dl_subframe_count
(
tdd_Config
->
subframeAssignment
,
subframeP
);
harq_pid
=
(((
frame_cnt
*
1024
+
abs_frameP
)
*
4
)
-
1
+
count
)
%
7
;
//4 dl subframe in a frame
if
(
harq_pid
<
0
)
{
...
...
@@ -3732,14 +3764,19 @@ frame_subframe2_dl_harq_pid(LTE_TDD_Config_t *tdd_Config,
return
-
1
;
}
unsigned
char
ul_ACK_subframe2M
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
)
{
//------------------------------------------------------------------------------
unsigned
char
ul_ACK_subframe2M
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
)
//------------------------------------------------------------------------------
{
if
(
tdd_Config
==
NULL
)
{
return
(
1
)
;
}
else
{
return
1
;
}
switch
(
tdd_Config
->
subframeAssignment
)
{
case
1
:
return
1
;
// don't ACK special subframe for now
/*
if (subframe == 2) { // ACK subframes 5 and 6
return(2);
} else if (subframe == 3) { // ACK subframe 9
...
...
@@ -3752,114 +3789,123 @@ unsigned char ul_ACK_subframe2M(LTE_TDD_Config_t *tdd_Config,unsigned char subfr
AssertFatal(1==0,"illegal subframe %d for tdd_config %ld\n",
subframe,tdd_Config->subframeAssignment);
}
break;
*/
case
3
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
(
2
);
// should be 3
}
else
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
(
2
);
// To be updated
}
else
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
(
2
);
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
return
2
;
// should be 3
}
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
2
;
// To be updated
}
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
2
;
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
case
4
:
if
(
subframe
==
2
)
{
// ACK subframes 0,4 and 5
return
(
3
);
// should be 4
}
else
if
(
subframe
==
3
)
{
// ACK subframes 6,7,8 and 9
return
(
4
);
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
return
3
;
// should be 4
}
if
(
subframe
==
3
)
{
// ACK subframes 6,7,8 and 9
return
4
;
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
case
5
:
if
(
subframe
==
2
)
{
// ACK subframes 0,3,4,5,6,7,8 and 9
return
(
8
);
// should be 3
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
return
8
;
// should be 3
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
}
}
return
(
0
)
;
return
0
;
}
unsigned
char
ul_ACK_subframe2dl_subframe
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
,
unsigned
char
ACK_index
)
{
//------------------------------------------------------------------------------
unsigned
char
ul_ACK_subframe2dl_subframe
(
LTE_TDD_Config_t
*
tdd_Config
,
unsigned
char
subframe
,
unsigned
char
ACK_index
)
//------------------------------------------------------------------------------
{
if
(
tdd_Config
==
NULL
)
{
return
((
subframe
<
4
)
?
subframe
+
6
:
subframe
-
4
);
}
else
{
return
((
subframe
<
4
)
?
subframe
+
6
:
subframe
-
4
);
}
switch
(
tdd_Config
->
subframeAssignment
)
{
case
3
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
if
(
ACK_index
==
2
)
return
(
1
);
return
(
5
+
ACK_index
);
}
else
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
(
7
+
ACK_index
);
// To be updated
}
else
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
((
9
+
ACK_index
)
%
10
);
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config->subframeAssignment %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
if
(
ACK_index
==
2
)
return
1
;
return
(
5
+
ACK_index
);
}
if
(
subframe
==
3
)
{
// ACK subframes 7 and 8
return
(
7
+
ACK_index
);
// To be updated
}
if
(
subframe
==
4
)
{
// ACK subframes 9 and 0
return
((
9
+
ACK_index
)
%
10
);
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config->subframeAssignment %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
case
4
:
if
(
subframe
==
2
)
{
// ACK subframes 0, 4 and 5
//if (ACK_index==2)
// return(1); TBC
if
(
ACK_index
==
2
)
return
(
0
);
return
(
4
+
ACK_index
);
}
else
if
(
subframe
==
3
)
{
// ACK subframes 6, 7 8 and 9
return
(
6
+
ACK_index
);
// To be updated
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
if
(
ACK_index
==
2
)
return
0
;
return
(
4
+
ACK_index
);
}
if
(
subframe
==
3
)
{
// ACK subframes 6, 7 8 and 9
return
(
6
+
ACK_index
);
// To be updated
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
case
1
:
if
(
subframe
==
2
)
{
// ACK subframes 5 and 6
return
(
5
+
ACK_index
);
}
else
if
(
subframe
==
3
)
{
// ACK subframe 9
return
(
9
);
// To be updated
}
else
if
(
subframe
==
7
)
{
// ACK subframes 0 and 1
return
(
ACK_index
);
// To be updated
}
else
if
(
subframe
==
8
)
{
// ACK subframe 4
return
(
4
);
// To be updated
}
else
{
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
return
(
5
+
ACK_index
);
}
break
;
if
(
subframe
==
3
)
{
// ACK subframe 9
return
9
;
// To be updated
}
if
(
subframe
==
7
)
{
// ACK subframes 0 and 1
return
ACK_index
;
// To be updated
}
return
(
0
);
if
(
subframe
==
8
)
{
// ACK subframe 4
return
4
;
// To be updated
}
AssertFatal
(
1
==
0
,
"illegal subframe %d for tdd_config %ld
\n
"
,
subframe
,
tdd_Config
->
subframeAssignment
);
break
;
}
return
0
;
}
//------------------------------------------------------------------------------
void
extract_harq
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
void
*
harq_indication
,
int
format
)
{
extract_harq
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
void
*
harq_indication
,
int
format
)
//------------------------------------------------------------------------------
{
UE_list_t
*
UE_list
=
&
RC
.
mac
[
mod_idP
]
->
UE_list
;
UE_sched_ctrl
*
sched_ctl
=
&
UE_list
->
UE_sched_ctrl
[
UE_id
];
rnti_t
rnti
=
UE_RNTI
(
mod_idP
,
UE_id
);
...
...
@@ -4422,6 +4468,7 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
}
}
//------------------------------------------------------------------------------
void
extract_pucch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
...
...
@@ -4525,6 +4572,7 @@ extract_pucch_csi(module_id_t mod_idP, int CC_idP, int UE_id,
}
}
//------------------------------------------------------------------------------
void
extract_pusch_csi
(
module_id_t
mod_idP
,
int
CC_idP
,
int
UE_id
,
frame_t
frameP
,
sub_frame_t
subframeP
,
...
...
@@ -4826,6 +4874,7 @@ extract_pusch_csi(module_id_t mod_idP, int CC_idP, int UE_id,
}
}
//------------------------------------------------------------------------------
void
cqi_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
rnti_t
rntiP
,
...
...
@@ -4868,6 +4917,7 @@ cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
}
}
//------------------------------------------------------------------------------
void
SR_indication
(
module_id_t
mod_idP
,
int
cc_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
rnti_t
rntiP
,
uint8_t
ul_cqi
)
{
...
...
@@ -4898,6 +4948,7 @@ SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP,
}
}
//------------------------------------------------------------------------------
void
UL_failure_indication
(
module_id_t
mod_idP
,
int
cc_idP
,
frame_t
frameP
,
rnti_t
rntiP
,
sub_frame_t
subframeP
)
{
...
...
@@ -4921,6 +4972,7 @@ UL_failure_indication(module_id_t mod_idP, int cc_idP, frame_t frameP,
}
}
//------------------------------------------------------------------------------
static
int
nack_or_dtx_reported
(
COMMON_channels_t
*
cc
,
nfapi_harq_indication_pdu_t
*
harq_pdu
)
{
...
...
@@ -4945,6 +4997,7 @@ static int nack_or_dtx_reported(
}
}
//------------------------------------------------------------------------------
void
harq_indication
(
module_id_t
mod_idP
,
int
CC_idP
,
frame_t
frameP
,
sub_frame_t
subframeP
,
...
...
@@ -4984,11 +5037,12 @@ harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
}
// Flexran Slicing functions
//------------------------------------------------------------------------------
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
,
int
slice_idx
)
{
if
((
slice_idx
<
0
)
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_dl
))
{
...
...
@@ -5001,6 +5055,7 @@ int ue_dl_slice_membership(module_id_t mod_id, int UE_id, int slice_idx) {
&&
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
,
int
slice_idx
)
{
if
((
slice_idx
<
0
)
||
(
slice_idx
>=
RC
.
mac
[
mod_id
]
->
slice_info
.
n_ul
))
{
...
...
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