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
b45a340b
Commit
b45a340b
authored
Jan 23, 2018
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RAN API: no set_RC_vars(), check use RC directly, give error messages
parent
cdbf65f5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
213 additions
and
214 deletions
+213
-214
openair2/ENB_APP/enb_app.c
openair2/ENB_APP/enb_app.c
+0
-6
openair2/ENB_APP/flexran_agent_ran_api.c
openair2/ENB_APP/flexran_agent_ran_api.c
+213
-206
openair2/ENB_APP/flexran_agent_ran_api.h
openair2/ENB_APP/flexran_agent_ran_api.h
+0
-2
No files found.
openair2/ENB_APP/enb_app.c
View file @
b45a340b
...
...
@@ -342,12 +342,6 @@ void *eNB_app_task(void *args_p)
enb_app_start_phy_rrc
(
enb_id_start
,
enb_id_end
);
#ifdef FLEXRAN_AGENT_SB_IF
for
(
uint32_t
enb_i
=
0
;
enb_i
<
1
;
enb_i
++
){
// To be handled for all of current eNB
flexran_set_RC_vars
(
enb_i
,
RAN_LTE_OAI
);
}
#endif
# if defined(ENABLE_USE_MME)
/* Try to register each eNB */
registered_enb
=
0
;
...
...
openair2/ENB_APP/flexran_agent_ran_api.c
View file @
b45a340b
...
...
@@ -28,48 +28,35 @@
#include "flexran_agent_ran_api.h"
/*
* generic info from RAN
*/
static
inline
int
phy_is_present
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
return
RC
.
eNB
&&
RC
.
eNB
[
mod_id
]
&&
RC
.
eNB
[
mod_id
][
cc_id
];
}
PHY_VARS_eNB
*
phy
[
NUM_MAX_ENB
][
MAX_NUM_CCs
]
=
{
NULL
};
eNB_MAC_INST
*
mac
[
NUM_MAX_ENB
]
=
{
NULL
};
eNB_RRC_INST
*
rrc
[
NUM_MAX_ENB
]
=
{
NULL
};
UE_list_t
*
UE_list
[
NUM_MAX_ENB
]
=
{
NULL
};
void
flexran_set_RC_vars
(
mid_t
mod_id
,
ran_name_t
ran
)
{
int
i
;
if
(
ran
==
RAN_LTE_OAI
)
{
if
(
RC
.
eNB
&&
mod_id
<
RC
.
nb_RU
&&
RC
.
eNB
[
mod_id
]
&&
RC
.
nb_CC
)
for
(
i
=
0
;
i
<
*
RC
.
nb_CC
;
i
++
)
phy
[
mod_id
][
i
]
=
RC
.
eNB
[
mod_id
][
i
];
if
(
RC
.
mac
&&
mod_id
<
RC
.
nb_macrlc_inst
&&
RC
.
mac
[
mod_id
])
{
mac
[
mod_id
]
=
RC
.
mac
[
mod_id
];
UE_list
[
mod_id
]
=
&
RC
.
mac
[
mod_id
]
->
UE_list
;
}
if
(
RC
.
rrc
&&
mod_id
<
RC
.
nb_macrlc_inst
&&
RC
.
rrc
[
mod_id
])
rrc
[
mod_id
]
=
RC
.
rrc
[
mod_id
];
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"unknown RAN name %d when setting RAN API variables
\n
"
,
ran
);
}
static
inline
int
mac_is_present
(
mid_t
mod_id
)
{
return
RC
.
mac
&&
RC
.
mac
[
mod_id
];
}
static
inline
int
rrc_is_present
(
mid_t
mod_id
)
{
return
RC
.
rrc
&&
RC
.
rrc
[
mod_id
];
}
uint32_t
flexran_get_current_time_ms
(
mid_t
mod_id
,
int
subframe_flag
)
{
if
(
!
mac
[
mod_id
]
)
return
0
;
if
(
!
mac
_is_present
(
mod_id
)
)
return
0
;
if
(
subframe_flag
==
1
)
return
mac
[
mod_id
]
->
frame
*
10
+
mac
[
mod_id
]
->
subframe
;
return
RC
.
mac
[
mod_id
]
->
frame
*
10
+
RC
.
mac
[
mod_id
]
->
subframe
;
else
return
mac
[
mod_id
]
->
frame
*
10
;
return
RC
.
mac
[
mod_id
]
->
frame
*
10
;
}
frame_t
flexran_get_current_frame
(
mid_t
mod_id
)
{
if
(
!
mac
[
mod_id
]
)
return
0
;
if
(
!
mac
_is_present
(
mod_id
)
)
return
0
;
// #warning "SFN will not be in [0-1023] when oaisim is used"
return
mac
[
mod_id
]
->
frame
;
return
RC
.
mac
[
mod_id
]
->
frame
;
}
frame_t
flexran_get_current_system_frame_num
(
mid_t
mod_id
)
...
...
@@ -79,8 +66,8 @@ frame_t flexran_get_current_system_frame_num(mid_t mod_id)
sub_frame_t
flexran_get_current_subframe
(
mid_t
mod_id
)
{
if
(
!
mac
[
mod_id
]
)
return
0
;
return
mac
[
mod_id
]
->
subframe
;
if
(
!
mac
_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
subframe
;
}
/* Why uint16_t, frame_t and sub_frame_t are defined as uint32_t? */
...
...
@@ -121,8 +108,8 @@ uint16_t flexran_get_future_sfn_sf(mid_t mod_id, int ahead_of_time)
int
flexran_get_num_ues
(
mid_t
mod_id
)
{
if
(
!
UE_list
[
mod_id
]
)
return
0
;
return
UE_list
[
mod_id
]
->
num_UEs
;
if
(
!
mac_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
num_UEs
;
}
rnti_t
flexran_get_ue_crnti
(
mid_t
mod_id
,
mid_t
ue_id
)
...
...
@@ -132,20 +119,20 @@ rnti_t flexran_get_ue_crnti(mid_t mod_id, mid_t ue_id)
uint8_t
flexran_get_ue_bsr
(
mid_t
mod_id
,
mid_t
ue_id
,
lcid_t
lcid
)
{
if
(
!
UE_list
[
mod_id
]
)
return
0
;
return
UE_list
[
mod_id
]
->
UE_template
[
UE_PCCID
(
mod_id
,
ue_id
)][
ue_id
].
bsr_info
[
lcid
];
if
(
!
mac_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
UE_template
[
UE_PCCID
(
mod_id
,
ue_id
)][
ue_id
].
bsr_info
[
lcid
];
}
int8_t
flexran_get_ue_phr
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
UE_list
[
mod_id
]
)
return
0
;
return
UE_list
[
mod_id
]
->
UE_template
[
UE_PCCID
(
mod_id
,
ue_id
)][
ue_id
].
phr_info
;
if
(
!
mac_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
UE_template
[
UE_PCCID
(
mod_id
,
ue_id
)][
ue_id
].
phr_info
;
}
uint8_t
flexran_get_ue_wcqi
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
phy
[
mod_id
][
0
]
)
return
0
;
return
phy
[
mod_id
][
0
]
->
UE_stats
[
ue_id
].
DL_cqi
[
0
];
if
(
!
phy
_is_present
(
mod_id
,
0
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
0
]
->
UE_stats
[
ue_id
].
DL_cqi
[
0
];
}
rlc_buffer_occupancy_t
flexran_get_tx_queue_size
(
mid_t
mod_id
,
mid_t
ue_id
,
logical_chan_id_t
channel_id
)
...
...
@@ -177,9 +164,9 @@ frame_t flexran_get_hol_delay(mid_t mod_id, mid_t ue_id, logical_chan_id_t chann
int32_t
flexran_get_TA
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
int32_t
tau
=
phy
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
timing_advance_update
;
int32_t
tau
=
RC
.
eNB
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
timing_advance_update
;
switch
(
flexran_get_N_RB_DL
(
mod_id
,
cc_id
))
{
case
6
:
return
tau
;
...
...
@@ -203,8 +190,8 @@ int32_t flexran_get_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
uint8_t
flexran_get_ue_wpmi
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
UE_list
[
mod_id
]
)
return
0
;
return
UE_list
[
mod_id
]
->
UE_sched_ctrl
[
ue_id
].
periodic_wideband_pmi
[
cc_id
];
if
(
!
mac_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
UE_sched_ctrl
[
ue_id
].
periodic_wideband_pmi
[
cc_id
];
}
/* TODO needs to be revised */
...
...
@@ -235,7 +222,7 @@ void flexran_update_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
int
flexran_get_MAC_CE_bitmap_TA
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
#warning "Implement flexran_get_MAC_CE_bitmap_TA() in RAN API"
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
/* UE_stats can not be null, they are an array in RC
LTE_eNB_UE_stats *eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id,CC_id,rnti);
...
...
@@ -254,25 +241,25 @@ int flexran_get_MAC_CE_bitmap_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
int
flexran_get_active_CC
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
UE_list
[
mod_id
]
)
return
0
;
return
UE_list
[
mod_id
]
->
numactiveCCs
[
ue_id
];
if
(
!
mac_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
numactiveCCs
[
ue_id
];
}
uint8_t
flexran_get_current_RI
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
rank
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
rank
;
}
int
flexran_get_tpc
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
/* before: tested that UL_rssi != NULL and set parameter ([0]), but it is a
* static array -> target_rx_power is useless in old ifs?! */
int
pCCid
=
UE_PCCID
(
mod_id
,
ue_id
);
int32_t
target_rx_power
=
phy
[
mod_id
][
pCCid
]
->
frame_parms
.
ul_power_control_config_common
.
p0_NominalPUSCH
;
int32_t
normalized_rx_power
=
phy
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
UL_rssi
[
0
];
int32_t
target_rx_power
=
RC
.
eNB
[
mod_id
][
pCCid
]
->
frame_parms
.
ul_power_control_config_common
.
p0_NominalPUSCH
;
int32_t
normalized_rx_power
=
RC
.
eNB
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
UL_rssi
[
0
];
int
tpc
;
if
(
normalized_rx_power
>
target_rx_power
+
1
)
...
...
@@ -334,26 +321,26 @@ int flexran_get_harq(mid_t mod_id,
int32_t
flexran_get_p0_pucch_dbm
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
Po_PUCCH_dBm
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
Po_PUCCH_dBm
;
}
int8_t
flexran_get_p0_nominal_pucch
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
ul_power_control_config_common
.
p0_NominalPUCCH
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
ul_power_control_config_common
.
p0_NominalPUCCH
;
}
int32_t
flexran_get_p0_pucch_status
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
Po_PUCCH_update
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
Po_PUCCH_update
;
}
int
flexran_update_p0_pucch
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
phy
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
Po_PUCCH_update
=
0
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
RC
.
eNB
[
mod_id
][
cc_id
]
->
UE_stats
[
ue_id
].
Po_PUCCH_update
=
0
;
return
0
;
}
...
...
@@ -365,46 +352,46 @@ int flexran_update_p0_pucch(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
*/
uint8_t
flexran_get_threequarter_fs
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
threequarter_fs
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
threequarter_fs
;
}
uint8_t
flexran_get_hopping_offset
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
pusch_HoppingOffset
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
pusch_HoppingOffset
;
}
PUSCH_HOPPING_t
flexran_get_hopping_mode
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
hoppingMode
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
hoppingMode
;
}
uint8_t
flexran_get_n_SB
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
n_SB
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
n_SB
;
}
uint8_t
flexran_get_enable64QAM
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
enable64QAM
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pusch_config_common
.
enable64QAM
;
}
PHICH_DURATION_t
flexran_get_phich_duration
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
phich_config_common
.
phich_duration
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
phich_config_common
.
phich_duration
;
}
int
flexran_get_phich_resource
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
/* TODO why don't we return phich_resource? */
switch
(
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
phich_config_common
.
phich_resource
)
{
switch
(
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
phich_config_common
.
phich_resource
)
{
case
oneSixth
:
return
0
;
case
half
:
...
...
@@ -420,122 +407,122 @@ int flexran_get_phich_resource(mid_t mod_id, uint8_t cc_id)
uint16_t
flexran_get_n1pucch_an
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pucch_config_common
.
n1PUCCH_AN
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pucch_config_common
.
n1PUCCH_AN
;
}
uint8_t
flexran_get_nRB_CQI
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pucch_config_common
.
nRB_CQI
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pucch_config_common
.
nRB_CQI
;
}
uint8_t
flexran_get_deltaPUCCH_Shift
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pucch_config_common
.
deltaPUCCH_Shift
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pucch_config_common
.
deltaPUCCH_Shift
;
}
uint8_t
flexran_get_prach_ConfigIndex
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
;
}
uint8_t
flexran_get_prach_FreqOffset
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
prach_FreqOffset
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
prach_config_common
.
prach_ConfigInfo
.
prach_FreqOffset
;
}
uint8_t
flexran_get_maxHARQ_Msg3Tx
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
maxHARQ_Msg3Tx
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
maxHARQ_Msg3Tx
;
}
lte_prefix_type_t
flexran_get_ul_cyclic_prefix_length
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
Ncp_UL
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
Ncp_UL
;
}
lte_prefix_type_t
flexran_get_dl_cyclic_prefix_length
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
Ncp
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
Ncp
;
}
uint16_t
flexran_get_cell_id
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
Nid_cell
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
Nid_cell
;
}
uint8_t
flexran_get_srs_BandwidthConfig
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
soundingrs_ul_config_common
.
srs_BandwidthConfig
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
soundingrs_ul_config_common
.
srs_BandwidthConfig
;
}
uint8_t
flexran_get_srs_SubframeConfig
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
soundingrs_ul_config_common
.
srs_SubframeConfig
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
soundingrs_ul_config_common
.
srs_SubframeConfig
;
}
uint8_t
flexran_get_srs_MaxUpPts
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
soundingrs_ul_config_common
.
srs_MaxUpPts
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
soundingrs_ul_config_common
.
srs_MaxUpPts
;
}
uint8_t
flexran_get_N_RB_DL
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_DL
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_DL
;
}
uint8_t
flexran_get_N_RB_UL
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_UL
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_UL
;
}
uint8_t
flexran_get_N_RBG
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RBG
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RBG
;
}
uint8_t
flexran_get_subframe_assignment
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
tdd_config
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
tdd_config
;
}
uint8_t
flexran_get_special_subframe_assignment
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
tdd_config_S
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
tdd_config_S
;
}
long
flexran_get_ra_ResponseWindowSize
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
0
;
return
rrc
[
mod_id
]
->
configuration
.
rach_raResponseWindowSize
[
cc_id
];
if
(
!
rrc
_is_present
(
mod_id
)
)
return
0
;
return
RC
.
rrc
[
mod_id
]
->
configuration
.
rach_raResponseWindowSize
[
cc_id
];
}
long
flexran_get_mac_ContentionResolutionTimer
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
0
;
return
rrc
[
mod_id
]
->
configuration
.
rach_macContentionResolutionTimer
[
cc_id
];
if
(
!
rrc
_is_present
(
mod_id
)
)
return
0
;
return
RC
.
rrc
[
mod_id
]
->
configuration
.
rach_macContentionResolutionTimer
[
cc_id
];
}
Protocol__FlexDuplexMode
flexran_get_duplex_mode
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
switch
(
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
frame_type
)
{
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
switch
(
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
frame_type
)
{
case
TDD
:
return
PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD
;
case
FDD
:
...
...
@@ -547,21 +534,21 @@ Protocol__FlexDuplexMode flexran_get_duplex_mode(mid_t mod_id, uint8_t cc_id)
long
flexran_get_si_window_length
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
rrc
[
mod_id
]
||
!
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib1
)
return
0
;
return
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib1
->
si_WindowLength
;
if
(
!
rrc
_is_present
(
mod_id
)
||
!
RC
.
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib1
)
return
0
;
return
RC
.
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib1
->
si_WindowLength
;
}
uint8_t
flexran_get_sib1_length
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
0
;
return
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sizeof_SIB1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
0
;
return
RC
.
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sizeof_SIB1
;
}
uint8_t
flexran_get_num_pdcch_symb
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
/* TODO: This should return the number of PDCCH symbols initially used by the
* cell cc_id -> is the correction right? */
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
pdcch_vars
[
0
].
num_pdcch_symbols
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
pdcch_vars
[
0
].
num_pdcch_symbols
;
//(PHY_vars_UE_g[mod_id][cc_id]->lte_ue_pdcch_vars[mod_id]->num_pdcch_symbols);
}
...
...
@@ -576,10 +563,10 @@ uint8_t flexran_get_num_pdcch_symb(mid_t mod_id, uint8_t cc_id) {
TimeAlignmentTimer_t
flexran_get_time_alignment_timer
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
mac_MainConfig
)
return
-
1
;
...
...
@@ -588,10 +575,10 @@ TimeAlignmentTimer_t flexran_get_time_alignment_timer(mid_t mod_id, mid_t ue_id)
Protocol__FlexMeasGapConfigPattern
flexran_get_meas_gap_config
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measGapConfig
)
return
-
1
;
...
...
@@ -609,10 +596,10 @@ Protocol__FlexMeasGapConfigPattern flexran_get_meas_gap_config(mid_t mod_id, mid
long
flexran_get_meas_gap_config_offset
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measGapConfig
)
return
-
1
;
...
...
@@ -631,9 +618,9 @@ long flexran_get_meas_gap_config_offset(mid_t mod_id, mid_t ue_id)
/* TODO return type is unsigned, so we cannot return -1 in case of error! */
uint8_t
flexran_get_rrc_status
(
mid_t
mod_id
,
rnti_t
rnti
)
{
if
(
!
rrc
[
mod_id
]
)
return
0
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
0
;
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
RRC_INACTIVE
;
return
ue_context_p
->
ue_context
.
Status
;
...
...
@@ -641,14 +628,14 @@ uint8_t flexran_get_rrc_status(mid_t mod_id, rnti_t rnti)
uint64_t
flexran_get_ue_aggregated_max_bitrate_dl
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
UE_list
[
mod_id
]
)
return
0
;
return
UE_list
[
mod_id
]
->
UE_sched_ctrl
[
ue_id
].
ue_AggregatedMaximumBitrateDL
;
if
(
!
mac_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
UE_sched_ctrl
[
ue_id
].
ue_AggregatedMaximumBitrateDL
;
}
uint64_t
flexran_get_ue_aggregated_max_bitrate_ul
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
UE_list
[
mod_id
]
)
return
0
;
return
UE_list
[
mod_id
]
->
UE_sched_ctrl
[
ue_id
].
ue_AggregatedMaximumBitrateUL
;
if
(
!
mac_is_present
(
mod_id
)
)
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
UE_sched_ctrl
[
ue_id
].
ue_AggregatedMaximumBitrateUL
;
}
int
flexran_get_half_duplex
(
mid_t
ue_id
)
...
...
@@ -704,10 +691,10 @@ int flexran_get_res_alloc_type1(mid_t ue_id)
long
flexran_get_ue_transmission_mode
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -717,10 +704,10 @@ long flexran_get_ue_transmission_mode(mid_t mod_id, mid_t ue_id)
BOOLEAN_t
flexran_get_tti_bundling
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
mac_MainConfig
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
mac_MainConfig
->
ul_SCH_Config
)
return
-
1
;
...
...
@@ -729,10 +716,10 @@ BOOLEAN_t flexran_get_tti_bundling(mid_t mod_id, mid_t ue_id)
long
flexran_get_maxHARQ_TX
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
mac_MainConfig
)
return
-
1
;
...
...
@@ -742,10 +729,10 @@ long flexran_get_maxHARQ_TX(mid_t mod_id, mid_t ue_id)
long
flexran_get_beta_offset_ack_index
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -755,10 +742,10 @@ long flexran_get_beta_offset_ack_index(mid_t mod_id, mid_t ue_id)
long
flexran_get_beta_offset_ri_index
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -768,10 +755,10 @@ long flexran_get_beta_offset_ri_index(mid_t mod_id, mid_t ue_id)
long
flexran_get_beta_offset_cqi_index
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -781,10 +768,10 @@ long flexran_get_beta_offset_cqi_index(mid_t mod_id, mid_t ue_id)
BOOLEAN_t
flexran_get_simultaneous_ack_nack_cqi
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -795,17 +782,17 @@ BOOLEAN_t flexran_get_simultaneous_ack_nack_cqi(mid_t mod_id, mid_t ue_id)
BOOLEAN_t
flexran_get_ack_nack_simultaneous_trans
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib2
)
return
-
1
;
return
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib2
->
radioResourceConfigCommon
.
soundingRS_UL_ConfigCommon
.
choice
.
setup
.
ackNackSRS_SimultaneousTransmission
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
if
(
!
RC
.
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib2
)
return
-
1
;
return
RC
.
rrc
[
mod_id
]
->
carrier
[
cc_id
].
sib2
->
radioResourceConfigCommon
.
soundingRS_UL_ConfigCommon
.
choice
.
setup
.
ackNackSRS_SimultaneousTransmission
;
}
CQI_ReportModeAperiodic_t
flexran_get_aperiodic_cqi_rep_mode
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -815,10 +802,10 @@ CQI_ReportModeAperiodic_t flexran_get_aperiodic_cqi_rep_mode(mid_t mod_id,mid_t
long
flexran_get_tdd_ack_nack_feedback_mode
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -829,10 +816,10 @@ long flexran_get_tdd_ack_nack_feedback_mode(mid_t mod_id, mid_t ue_id)
long
flexran_get_ack_nack_repetition_factor
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -842,10 +829,10 @@ long flexran_get_ack_nack_repetition_factor(mid_t mod_id, mid_t ue_id)
long
flexran_get_extended_bsr_size
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
mac_MainConfig
)
return
-
1
;
...
...
@@ -856,10 +843,10 @@ long flexran_get_extended_bsr_size(mid_t mod_id, mid_t ue_id)
int
flexran_get_ue_transmission_antenna
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
physicalConfigDedicated
)
return
-
1
;
...
...
@@ -900,92 +887,112 @@ int flexran_get_direction(mid_t ue_id, mid_t lc_id)
uint8_t
flexran_get_antenna_ports
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
nb_antenna_ports_eNB
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
nb_antenna_ports_eNB
;
}
/* TODO better give real value (without division)? */
uint32_t
flexran_agent_get_operating_dl_freq
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
dl_CarrierFreq
/
1000000
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
dl_CarrierFreq
/
1000000
;
}
/* TODO better give real value (without division)? */
uint32_t
flexran_agent_get_operating_ul_freq
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
ul_CarrierFreq
/
1000000
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
ul_CarrierFreq
/
1000000
;
}
uint8_t
flexran_agent_get_operating_eutra_band
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
eutra_band
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
eutra_band
;
}
int8_t
flexran_agent_get_operating_pdsch_refpower
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
phy
[
mod_id
][
cc_id
]
)
return
0
;
return
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
pdsch_config_common
.
referenceSignalPower
;
if
(
!
phy
_is_present
(
mod_id
,
cc_id
)
)
return
0
;
return
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
pdsch_config_common
.
referenceSignalPower
;
}
long
flexran_agent_get_operating_pusch_p0
(
mid_t
mod_id
,
uint8_t
cc_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
0
;
return
rrc
[
mod_id
]
->
configuration
.
pusch_p0_Nominal
[
cc_id
];
if
(
!
rrc
_is_present
(
mod_id
)
)
return
0
;
return
RC
.
rrc
[
mod_id
]
->
configuration
.
pusch_p0_Nominal
[
cc_id
];
}
void
flexran_agent_set_operating_dl_freq
(
mid_t
mod_id
,
uint8_t
cc_id
,
uint32_t
dl_freq_mhz
)
{
if
(
phy
[
mod_id
][
cc_id
])
{
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
dl_CarrierFreq
=
dl_freq_mhz
*
1000000
;
if
(
phy_is_present
(
mod_id
,
cc_id
))
{
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
dl_CarrierFreq
=
dl_freq_mhz
*
1000000
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set dl_CarrierFreq to %d MHz in PHY: PHY is not present
\n
"
,
dl_freq_mhz
);
}
if
(
rrc
[
mod_id
])
{
rrc
[
mod_id
]
->
configuration
.
downlink_frequency
[
cc_id
]
=
dl_freq_mhz
*
1000000
;
if
(
rrc_is_present
(
mod_id
))
{
RC
.
rrc
[
mod_id
]
->
configuration
.
downlink_frequency
[
cc_id
]
=
dl_freq_mhz
*
1000000
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set downlink_frequency to %d MHz in RRC: RRC is not present
\n
"
,
dl_freq_mhz
);
}
}
void
flexran_agent_set_operating_ul_freq
(
mid_t
mod_id
,
uint8_t
cc_id
,
int32_t
ul_freq_mhz_offset
)
{
if
(
phy
[
mod_id
][
cc_id
]
)
{
if
(
phy
_is_present
(
mod_id
,
cc_id
)
)
{
uint32_t
new_ul_freq_mhz
=
flexran_agent_get_operating_dl_freq
(
mod_id
,
cc_id
)
+
ul_freq_mhz_offset
;
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
ul_CarrierFreq
=
new_ul_freq_mhz
*
1000000
;
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
ul_CarrierFreq
=
new_ul_freq_mhz
*
1000000
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set ul_CarrierFreq using offset %d MHz in PHY: PHY is not present
\n
"
,
ul_freq_mhz_offset
);
}
if
(
rrc
[
mod_id
])
{
rrc
[
mod_id
]
->
configuration
.
uplink_frequency_offset
[
cc_id
]
=
ul_freq_mhz_offset
;
if
(
rrc_is_present
(
mod_id
))
{
RC
.
rrc
[
mod_id
]
->
configuration
.
uplink_frequency_offset
[
cc_id
]
=
ul_freq_mhz_offset
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set uplink_frequency_offset to %d MHz in RRC: RRC is not present
\n
"
,
ul_freq_mhz_offset
);
}
}
void
flexran_agent_set_operating_eutra_band
(
mid_t
mod_id
,
uint8_t
cc_id
,
uint8_t
eutra_band
)
{
if
(
phy
[
mod_id
][
cc_id
])
{
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
eutra_band
=
eutra_band
;
if
(
phy_is_present
(
mod_id
,
cc_id
))
{
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
eutra_band
=
eutra_band
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set eutra_band to %d in PHY: PHY is not present
\n
"
,
eutra_band
);
}
if
(
rrc
[
mod_id
])
{
rrc
[
mod_id
]
->
configuration
.
eutra_band
[
cc_id
]
=
eutra_band
;
if
(
rrc_is_present
(
mod_id
))
{
RC
.
rrc
[
mod_id
]
->
configuration
.
eutra_band
[
cc_id
]
=
eutra_band
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set eutra_band to %d in RRC: RRC is not present
\n
"
,
eutra_band
);
}
}
/* Sets both DL/UL */
void
flexran_agent_set_operating_bandwidth
(
mid_t
mod_id
,
uint8_t
cc_id
,
uint8_t
N_RB
)
{
if
(
phy
[
mod_id
][
cc_id
])
{
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_DL
=
N_RB
;
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_UL
=
N_RB
;
if
(
phy_is_present
(
mod_id
,
cc_id
))
{
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_DL
=
N_RB
;
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
N_RB_UL
=
N_RB
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set N_RB_DL and N_RB_UL to %d in PHY: PHY is not present
\n
"
,
N_RB
);
}
if
(
rrc
[
mod_id
])
{
rrc
[
mod_id
]
->
configuration
.
N_RB_DL
[
cc_id
]
=
N_RB
;
if
(
rrc_is_present
(
mod_id
))
{
RC
.
rrc
[
mod_id
]
->
configuration
.
N_RB_DL
[
cc_id
]
=
N_RB
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set N_RB_DL to %d in RRC: RRC is not present
\n
"
,
N_RB
);
}
}
void
flexran_agent_set_operating_frame_type
(
mid_t
mod_id
,
uint8_t
cc_id
,
lte_frame_type_t
frame_type
)
{
if
(
phy
[
mod_id
][
cc_id
])
{
phy
[
mod_id
][
cc_id
]
->
frame_parms
.
frame_type
=
frame_type
;
if
(
phy_is_present
(
mod_id
,
cc_id
))
{
RC
.
eNB
[
mod_id
][
cc_id
]
->
frame_parms
.
frame_type
=
frame_type
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set frame_type to %d in PHY: PHY is not present
\n
"
,
frame_type
);
}
if
(
rrc
[
mod_id
])
{
rrc
[
mod_id
]
->
configuration
.
frame_type
[
cc_id
]
=
frame_type
;
if
(
rrc_is_present
(
mod_id
))
{
RC
.
rrc
[
mod_id
]
->
configuration
.
frame_type
[
cc_id
]
=
frame_type
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"can not set frame_type to %d in RRC: RRC is not present
\n
"
,
frame_type
);
}
}
...
...
@@ -1097,10 +1104,10 @@ uint32_t flexran_get_pdcp_rx_oo(const mid_t mod_id, const mid_t ue_id, const lc
MeasId_t
flexran_get_rrc_pcell_measid
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measResults
)
return
-
1
;
...
...
@@ -1109,10 +1116,10 @@ MeasId_t flexran_get_rrc_pcell_measid(mid_t mod_id, mid_t ue_id)
float
flexran_get_rrc_pcell_rsrp
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measResults
)
return
-
1
;
...
...
@@ -1121,10 +1128,10 @@ float flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id)
float
flexran_get_rrc_pcell_rsrq
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measResults
)
return
-
1
;
...
...
@@ -1134,10 +1141,10 @@ float flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id)
/*Number of neighbouring cells for specific UE*/
int
flexran_get_rrc_num_ncell
(
mid_t
mod_id
,
mid_t
ue_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
0
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
0
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
0
;
if
(
!
ue_context_p
->
ue_context
.
measResults
)
return
0
;
...
...
@@ -1148,10 +1155,10 @@ int flexran_get_rrc_num_ncell(mid_t mod_id, mid_t ue_id)
PhysCellId_t
flexran_get_rrc_neigh_phy_cell_id
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measResults
)
return
-
1
;
...
...
@@ -1163,10 +1170,10 @@ PhysCellId_t flexran_get_rrc_neigh_phy_cell_id(mid_t mod_id, mid_t ue_id, int ce
float
flexran_get_rrc_neigh_rsrp
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measResults
)
return
-
1
;
...
...
@@ -1179,10 +1186,10 @@ float flexran_get_rrc_neigh_rsrp(mid_t mod_id, mid_t ue_id, int cell_id)
float
flexran_get_rrc_neigh_rsrq
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
)
{
if
(
!
rrc
[
mod_id
]
)
return
-
1
;
if
(
!
rrc
_is_present
(
mod_id
)
)
return
-
1
;
rnti_t
rnti
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
if
(
!
ue_context_p
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measResults
)
return
-
1
;
...
...
openair2/ENB_APP/flexran_agent_ran_api.h
View file @
b45a340b
...
...
@@ -50,8 +50,6 @@
* get generic info from RAN
****************************/
void
flexran_set_RC_vars
(
mid_t
mod_id
,
ran_name_t
ran
);
uint32_t
flexran_get_current_time_ms
(
mid_t
mod_id
,
int
subframe_flag
);
/*Return the current frame number
...
...
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