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
Michael Black
OpenXG UE
Commits
e2ced5f7
Commit
e2ced5f7
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
b805f6ee
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 @
e2ced5f7
...
...
@@ -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 @
e2ced5f7
...
...
@@ -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 @
e2ced5f7
...
...
@@ -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