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
95a6521d
Commit
95a6521d
authored
Dec 21, 2017
by
shahab SHARIAT BAGHERI
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Neighbouring cell RRC measurement + decrease warning
parent
ce624e88
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
248 additions
and
39 deletions
+248
-39
openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
+89
-21
openair2/ENB_APP/flexran_agent_handler.c
openair2/ENB_APP/flexran_agent_handler.c
+1
-1
openair2/ENB_APP/flexran_agent_ran_api.c
openair2/ENB_APP/flexran_agent_ran_api.c
+136
-13
openair2/ENB_APP/flexran_agent_ran_api.h
openair2/ENB_APP/flexran_agent_ran_api.h
+20
-2
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+2
-2
No files found.
openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
View file @
95a6521d
...
...
@@ -492,7 +492,7 @@ int flexran_agent_rrc_stats_reply(mid_t mod_id,
// Protocol__FlexHeader *header;
int
i
;
int
i
,
j
;
/* Allocate memory for list of UE reports */
if
(
report_config
->
nr_ue
>
0
)
{
...
...
@@ -501,29 +501,86 @@ int flexran_agent_rrc_stats_reply(mid_t mod_id,
/* Check flag for creation of buffer status report */
if
(
report_config
->
ue_report_type
[
i
].
ue_report_flags
&
PROTOCOL__FLEX_UE_STATS_TYPE__FLUST_RRC_MEASUREMENTS
)
{
Protocol__FlexRrcMeasurements
*
rrc_measurements
;
rrc_measurements
=
malloc
(
sizeof
(
Protocol__FlexRrcMeasurements
));
if
(
rrc_measurements
==
NULL
)
goto
error
;
protocol__flex_rrc_measurements__init
(
rrc_measurements
);
rrc_measurements
->
measid
=
flexran_get_rrc_pcell_measid
(
mod_id
,
i
);
rrc_measurements
->
has_measid
=
1
;
rrc_measurements
->
pcell_rsrp
=
flexran_get_rrc_pcell_rsrp
(
mod_id
,
i
)
-
140
;
rrc_measurements
->
has_pcell_rsrp
=
1
;
rrc_measurements
->
pcell_rsrq
=
flexran_get_rrc_pcell_rsrq
(
mod_id
,
i
)
/
2
-
20
;
rrc_measurements
->
has_pcell_rsrq
=
1
;
ue_report
[
i
]
->
rrc_measurements
=
rrc_measurements
;
/*Source Cell*/
Protocol__FlexRrcMeasurements
*
rrc_measurements
;
rrc_measurements
=
malloc
(
sizeof
(
Protocol__FlexRrcMeasurements
));
if
(
rrc_measurements
==
NULL
)
goto
error
;
protocol__flex_rrc_measurements__init
(
rrc_measurements
);
rrc_measurements
->
measid
=
flexran_get_rrc_pcell_measid
(
mod_id
,
i
);
rrc_measurements
->
has_measid
=
1
;
rrc_measurements
->
pcell_rsrp
=
flexran_get_rrc_pcell_rsrp
(
mod_id
,
i
);
rrc_measurements
->
has_pcell_rsrp
=
1
;
rrc_measurements
->
pcell_rsrq
=
flexran_get_rrc_pcell_rsrq
(
mod_id
,
i
);
rrc_measurements
->
has_pcell_rsrq
=
1
;
/* Target Cell, Neghibouring*/
Protocol__FlexNeighCellsMeasurements
*
neigh_meas
;
neigh_meas
=
malloc
(
sizeof
(
Protocol__FlexNeighCellsMeasurements
));
if
(
neigh_meas
==
NULL
)
goto
error
;
protocol__flex_neigh_cells_measurements__init
(
neigh_meas
);
neigh_meas
->
n_eutra_meas
=
flexran_get_rrc_num_ncell
(
mod_id
,
i
);
Protocol__FlexEutraMeasurements
**
eutra_meas
=
NULL
;
if
(
neigh_meas
->
n_eutra_meas
>
0
){
eutra_meas
=
malloc
(
sizeof
(
Protocol__FlexEutraMeasurements
)
*
neigh_meas
->
n_eutra_meas
);
if
(
eutra_meas
==
NULL
)
goto
error
;
for
(
j
=
0
;
j
<
neigh_meas
->
n_eutra_meas
;
j
++
){
eutra_meas
[
j
]
=
malloc
(
sizeof
(
Protocol__FlexEutraMeasurements
));
if
(
eutra_meas
[
j
]
==
NULL
)
goto
error
;
protocol__flex_eutra_measurements__init
(
eutra_meas
[
j
]);
eutra_meas
[
j
]
->
phys_cell_id
=
flexran_get_rrc_neigh_phy_cell_id
(
mod_id
,
i
,
j
);
eutra_meas
[
j
]
->
has_phys_cell_id
=
1
;
/*TODO: Extend for CGI and PLMNID*/
Protocol__FlexEutraRefSignalMeas
*
meas_result
;
meas_result
=
malloc
(
sizeof
(
Protocol__FlexEutraRefSignalMeas
));
protocol__flex_eutra_ref_signal_meas__init
(
meas_result
);
meas_result
->
rsrp
=
flexran_get_rrc_neigh_rsrp
(
mod_id
,
i
,
eutra_meas
[
j
]
->
phys_cell_id
);
meas_result
->
has_rsrp
=
1
;
meas_result
->
rsrq
=
flexran_get_rrc_neigh_rsrq
(
mod_id
,
i
,
eutra_meas
[
j
]
->
phys_cell_id
);
meas_result
->
has_rsrq
=
1
;
eutra_meas
[
j
]
->
meas_result
=
meas_result
;
}
neigh_meas
->
eutra_meas
=
eutra_meas
;
rrc_measurements
->
neigh_meas
=
neigh_meas
;
}
ue_report
[
i
]
->
rrc_measurements
=
rrc_measurements
;
}
}
}
}
/* To be
extended for RRC layer
*/
/* To be
considered for RRC signaling of cell
*/
// if (report_config->nr_cc > 0) {
...
...
@@ -564,6 +621,17 @@ int flexran_agent_rrc_stats_reply(mid_t mod_id,
error:
for
(
i
=
0
;
i
<
report_config
->
nr_ue
;
i
++
){
if
(
ue_report
[
i
]
->
rrc_measurements
->
neigh_meas
!=
NULL
){
for
(
j
=
0
;
j
<
flexran_get_rrc_num_ncell
(
mod_id
,
i
);
j
++
){
free
(
ue_report
[
i
]
->
rrc_measurements
->
neigh_meas
->
eutra_meas
[
j
]);
}
free
(
ue_report
[
i
]
->
rrc_measurements
->
neigh_meas
);
}
}
if
(
cell_report
!=
NULL
)
free
(
cell_report
);
if
(
ue_report
!=
NULL
)
...
...
openair2/ENB_APP/flexran_agent_handler.c
View file @
95a6521d
...
...
@@ -756,7 +756,7 @@ err_code_t flexran_agent_init_cont_stats_update(mid_t mod_id) {
if
(
stats_context
[
mod_id
].
mutex
==
NULL
)
goto
error
;
if
(
pthread_mutex_init
(
stats_context
[
mod_id
].
mutex
,
NULL
))
goto
error
;
;
goto
error
;
return
0
;
...
...
openair2/ENB_APP/flexran_agent_ran_api.c
View file @
95a6521d
...
...
@@ -1135,19 +1135,23 @@ uint32_t flexran_get_pdcp_sfn(const mid_t mod_id){
}
/*PDCP super frame counter flexRAN*/
uint32_t
flexran_set_pdcp_tx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
){
if
(
obs_window
>
0
)
void
flexran_set_pdcp_tx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
){
if
(
obs_window
>
0
)
{
Pdcp_stats_tx_window_ms
[
mod_id
][
ue_id
]
=
obs_window
;
else
}
else
{
Pdcp_stats_tx_window_ms
[
mod_id
][
ue_id
]
=
1000
;
}
}
/*PDCP super frame counter flexRAN*/
uint32_t
flexran_set_pdcp_rx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
){
if
(
obs_window
>
0
)
void
flexran_set_pdcp_rx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
){
if
(
obs_window
>
0
)
{
Pdcp_stats_rx_window_ms
[
mod_id
][
ue_id
]
=
obs_window
;
else
}
else
{
Pdcp_stats_rx_window_ms
[
mod_id
][
ue_id
]
=
1000
;
}
}
/*PDCP num tx pdu status flexRAN*/
...
...
@@ -1256,7 +1260,7 @@ int flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id) {
ue_context_p
=
rrc_eNB_get_ue_context
(
&
eNB_rrc_inst
[
mod_id
],
rntiP
);
if
(
ue_context_p
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
!=
NULL
)
{
return
ue_context_p
->
ue_context
.
measResults
->
measResultPCell
.
rsrpResult
;
return
RSRP_meas_mapping
[
ue_context_p
->
ue_context
.
measResults
->
measResultPCell
.
rsrpResult
]
;
}
else
{
return
-
1
;
}
...
...
@@ -1273,7 +1277,7 @@ int flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id) {
ue_context_p
=
rrc_eNB_get_ue_context
(
&
eNB_rrc_inst
[
mod_id
],
rntiP
);
if
(
ue_context_p
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
!=
NULL
)
{
return
ue_context_p
->
ue_context
.
measResults
->
measResultPCell
.
rsrqResult
;
return
RSRQ_meas_mapping
[
ue_context_p
->
ue_context
.
measResults
->
measResultPCell
.
rsrqResult
]
;
}
else
{
return
-
1
;
}
...
...
@@ -1281,8 +1285,48 @@ int flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id) {
return
-
1
;
}
}
/*
void* flexran_get_rrc_ncell_measresult_eutra(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
)
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
uint32_t
rntiP
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
if
(
eNB_rrc_inst_not_ready
())
return
0
;
ue_context_p
=
rrc_eNB_get_ue_context
(
&
eNB_rrc_inst
[
mod_id
],
rntiP
);
if
(
ue_context_p
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
!=
NULL
){
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
present
==
MeasResults__measResultNeighCells_PR_measResultListEUTRA
)
{
return
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
count
;
}
else
{
return
0
;
}
}
else
{
return
0
;
}
}
else
{
return
0
;
}
}
else
{
return
0
;
}
}
int
flexran_get_rrc_neigh_phy_cell_id
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
)
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
uint32_t
rntiP
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
...
...
@@ -1290,8 +1334,88 @@ void* flexran_get_rrc_ncell_measresult_eutra(mid_t mod_id, mid_t ue_id) {
ue_context_p
=
rrc_eNB_get_ue_context
(
&
eNB_rrc_inst
[
mod_id
],
rntiP
);
if
(
ue_context_p
!=
NULL
)
{
if(ue_context_p->ue_context.measResults != NULL) {
return &ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA;
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
present
==
MeasResults__measResultNeighCells_PR_measResultListEUTRA
)
{
return
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
array
[
cell_id
]
->
physCellId
;
}
else
{
return
-
1
;
}
}
else
{
return
-
1
;
}
}
else
{
return
-
1
;
}
}
int
flexran_get_rrc_neigh_rsrp
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
)
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
uint32_t
rntiP
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
if
(
eNB_rrc_inst_not_ready
())
return
-
1
;
ue_context_p
=
rrc_eNB_get_ue_context
(
&
eNB_rrc_inst
[
mod_id
],
rntiP
);
if
(
ue_context_p
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
present
==
MeasResults__measResultNeighCells_PR_measResultListEUTRA
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
array
[
cell_id
]
->
measResult
.
rsrpResult
){
return
RSRP_meas_mapping
[
*
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
array
[
cell_id
]
->
measResult
.
rsrpResult
)];
}
else
{
return
0
;
}
}
else
{
return
-
1
;
}
}
else
{
return
-
1
;
}
}
else
{
return
-
1
;
}
}
int
flexran_get_rrc_neigh_rsrq
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
)
{
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
NULL
;
uint32_t
rntiP
=
flexran_get_ue_crnti
(
mod_id
,
ue_id
);
if
(
eNB_rrc_inst_not_ready
())
return
-
1
;
ue_context_p
=
rrc_eNB_get_ue_context
(
&
eNB_rrc_inst
[
mod_id
],
rntiP
);
if
(
ue_context_p
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
!=
NULL
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
present
==
MeasResults__measResultNeighCells_PR_measResultListEUTRA
)
{
if
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
array
[
cell_id
]
->
measResult
.
rsrqResult
){
return
RSRQ_meas_mapping
[
*
(
ue_context_p
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
array
[
cell_id
]
->
measResult
.
rsrqResult
)];
}
else
{
return
0
;
}
}
else
{
return
-
1
;
}
}
else
{
return
-
1
;
}
...
...
@@ -1299,4 +1423,3 @@ void* flexran_get_rrc_ncell_measresult_eutra(mid_t mod_id, mid_t ue_id) {
return
-
1
;
}
}
*/
openair2/ENB_APP/flexran_agent_ran_api.h
View file @
95a6521d
...
...
@@ -346,10 +346,10 @@ int flexran_get_rrc_status(const mid_t mod_id, const rnti_t rntiP);
uint32_t
flexran_get_pdcp_sfn
(
const
mid_t
mod_id
);
/*PDCP pdcp tx stats window*/
uint32_t
flexran_set_pdcp_tx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
);
void
flexran_set_pdcp_tx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
);
/*PDCP pdcp rx stats window*/
uint32_t
flexran_set_pdcp_rx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
);
void
flexran_set_pdcp_rx_stat_window
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
uint16_t
obs_window
);
/*PDCP num tx pdu status flexRAN*/
uint32_t
flexran_get_pdcp_tx
(
const
mid_t
mod_id
,
const
mid_t
ue_id
,
const
lcid_t
lcid
);
...
...
@@ -406,3 +406,21 @@ int flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id);
/*Get primary cell RSRQ measurement flexRAN*/
int
flexran_get_rrc_pcell_rsrq
(
mid_t
mod_id
,
mid_t
ue_id
);
/* Get RRC neighbouring measurement */
int
flexran_get_rrc_num_ncell
(
mid_t
mod_id
,
mid_t
ue_id
);
/*Get physical cell id*/
int
flexran_get_rrc_neigh_phy_cell_id
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
);
/*Get RSRP of neighbouring Cell*/
int
flexran_get_rrc_neigh_rsrp
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
);
/*Get RSRQ of neighbouring Cell*/
int
flexran_get_rrc_neigh_rsrq
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
);
/*Get MCC PLMN identity neighbouring Cell*/
int
flexran_get_rrc_neigh_plmn_mcc
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
);
/*Get MNC PLMN identity neighbouring Cell*/
int
flexran_get_rrc_neigh_plmn_mnc
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cell_id
);
\ No newline at end of file
openair2/RRC/LITE/rrc_eNB.c
View file @
95a6521d
...
...
@@ -2868,13 +2868,13 @@ rrc_eNB_process_MeasurementReport(
return
;
if
(
measResults2
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
count
>
0
)
{
neighboring_cells
=
measResults2
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
count
;
neighboring_cells
=
measResults2
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
count
;
if
(
ue_context_pP
->
ue_context
.
measResults
->
measResultNeighCells
==
NULL
)
{
ue_context_pP
->
ue_context
.
measResults
->
measResultNeighCells
=
CALLOC
(
1
,
sizeof
(
*
measResults2
->
measResultNeighCells
)
*
neighboring_cells
);
}
ue_context_pP
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
count
=
neighboring_cells
;
ue_context_pP
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
count
=
neighboring_cells
;
for
(
i
=
0
;
i
<
neighboring_cells
;
i
++
){
memcpy
(
ue_context_pP
->
ue_context
.
measResults
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
array
[
i
],
measResults2
->
measResultNeighCells
->
choice
.
measResultListEUTRA
.
list
.
array
[
i
],
...
...
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