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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG-RAN
Commits
1b90c4a0
Commit
1b90c4a0
authored
May 10, 2019
by
Konstantinos Alexandris
Committed by
Robert Schmidt
Jun 24, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Create RRC setters for Periodic, A1-A5 event and offsets related to RRC Measurement Report
parent
1de4b740
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1018 additions
and
183 deletions
+1018
-183
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-0
openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.c
.../ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.c
+147
-0
openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.h
.../ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.h
+31
-0
openair2/ENB_APP/MESSAGES/V2/flexran.proto
openair2/ENB_APP/MESSAGES/V2/flexran.proto
+3
-2
openair2/ENB_APP/flexran_agent_common.c
openair2/ENB_APP/flexran_agent_common.c
+49
-4
openair2/ENB_APP/flexran_agent_ran_api.c
openair2/ENB_APP/flexran_agent_ran_api.c
+393
-5
openair2/ENB_APP/flexran_agent_ran_api.h
openair2/ENB_APP/flexran_agent_ran_api.h
+39
-0
openair2/RRC/LTE/rrc_eNB.c
openair2/RRC/LTE/rrc_eNB.c
+354
-170
openair2/RRC/LTE/rrc_proto.h
openair2/RRC/LTE/rrc_proto.h
+1
-2
No files found.
cmake_targets/CMakeLists.txt
View file @
1b90c4a0
...
@@ -887,6 +887,7 @@ add_library(FLEXRAN_AGENT
...
@@ -887,6 +887,7 @@ add_library(FLEXRAN_AGENT
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.c
${
OPENAIR2_DIR
}
/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.c
${
OPENAIR2_DIR
}
/ENB_APP/flexran_agent.c
${
OPENAIR2_DIR
}
/ENB_APP/flexran_agent.c
${
OPENAIR2_DIR
}
/ENB_APP/flexran_agent_task_manager.c
${
OPENAIR2_DIR
}
/ENB_APP/flexran_agent_task_manager.c
...
...
openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.c
0 → 100644
View file @
1b90c4a0
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "flexran_agent_rrc_internal.h"
#include "flexran_agent_ran_api.h"
int
update_rrc_reconfig
(
mid_t
mod_id
,
rnti_t
rnti
,
Protocol__FlexRrcTriggering
*
trigg
)
{
// Measurement info reconfiguration
if
(
trigg
->
meas_info
)
{
/* Set serving cell frequency offset */
if
(
trigg
->
meas_info
->
has_offset_freq_serving
)
{
if
(
flexran_set_rrc_ofp
(
mod_id
,
rnti
,
trigg
->
meas_info
->
offset_freq_serving
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set Serving cell frequency offset
\n
"
);
return
-
1
;
}
}
/* Set neighbouring cell frequency offset */
if
(
trigg
->
meas_info
->
has_offset_freq_neighbouring
)
{
if
(
flexran_set_rrc_ofn
(
mod_id
,
rnti
,
trigg
->
meas_info
->
offset_freq_neighbouring
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set Neighbouring cell frequency offset
\n
"
);
return
-
1
;
}
}
if
(
trigg
->
meas_info
->
n_cell_individual_offset
>
0
)
{
/* Set the serving cell offset */
if
(
flexran_set_rrc_ocp
(
mod_id
,
rnti
,
trigg
->
meas_info
->
cell_individual_offset
[
0
])
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set Serving cell offset
\n
"
);
return
-
1
;
}
/* Set the neighbouring cell offset */
for
(
int
i
=
0
;
i
<
(
trigg
->
meas_info
->
n_cell_individual_offset
-
1
);
i
++
)
{
if
(
flexran_set_rrc_ocn
(
mod_id
,
rnti
,
i
,
trigg
->
meas_info
->
cell_individual_offset
[
i
+
1
])
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set Neighbouring cell offset
\n
"
);
return
-
1
;
}
}
}
if
(
trigg
->
meas_info
->
has_offset_freq_neighbouring
)
{
if
(
flexran_set_rrc_ofn
(
mod_id
,
rnti
,
trigg
->
meas_info
->
offset_freq_neighbouring
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set Neighbouring cell frequency offset
\n
"
);
return
-
1
;
}
}
/* Set rsrp filter coefficient */
if
(
trigg
->
meas_info
->
has_filter_coefficient_rsrp
)
{
if
(
flexran_set_filter_coeff_rsrp
(
mod_id
,
rnti
,
trigg
->
meas_info
->
filter_coefficient_rsrp
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set RSRP filter coefficient
\n
"
);
return
-
1
;
}
}
/* Set rsrq filter coefficient */
if
(
trigg
->
meas_info
->
has_filter_coefficient_rsrq
)
{
if
(
flexran_set_filter_coeff_rsrq
(
mod_id
,
rnti
,
trigg
->
meas_info
->
filter_coefficient_rsrq
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set RSRQ filter coefficient
\n
"
);
return
-
1
;
}
}
if
(
trigg
->
meas_info
->
event
)
{
/* Set Periodic event parameters */
if
(
trigg
->
meas_info
->
event
->
periodical
)
{
/* Set Periodic event maximum number of reported cells */
if
(
trigg
->
meas_info
->
event
->
periodical
->
has_max_report_cells
)
{
if
(
flexran_set_rrc_per_event_maxReportCells
(
mod_id
,
rnti
,
trigg
->
meas_info
->
event
->
periodical
->
max_report_cells
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set Periodic event max
\n
"
);
return
-
1
;
}
}
}
/* Set A3 event parameters */
if
(
trigg
->
meas_info
->
event
->
a3
)
{
/* Set A3 event a3 offset */
if
(
trigg
->
meas_info
->
event
->
a3
->
has_a3_offset
)
{
if
(
flexran_set_rrc_a3_event_a3_offset
(
mod_id
,
rnti
,
trigg
->
meas_info
->
event
->
a3
->
a3_offset
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set A3 event offset
\n
"
);
return
-
1
;
}
}
/* Set A3 event report on leave */
if
(
trigg
->
meas_info
->
event
->
a3
->
has_report_on_leave
)
{
if
(
flexran_set_rrc_a3_event_reportOnLeave
(
mod_id
,
rnti
,
trigg
->
meas_info
->
event
->
a3
->
report_on_leave
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set A3 event report on leave
\n
"
);
return
-
1
;
}
}
/* Set A3 event hysteresis */
if
(
trigg
->
meas_info
->
event
->
a3
->
has_hysteresis
)
{
if
(
flexran_set_rrc_a3_event_hysteresis
(
mod_id
,
rnti
,
trigg
->
meas_info
->
event
->
a3
->
hysteresis
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set A3 event hysteresis
\n
"
);
return
-
1
;
}
}
/* Set A3 event time to trigger */
if
(
trigg
->
meas_info
->
event
->
a3
->
has_time_to_trigger
)
{
if
(
flexran_set_rrc_a3_event_timeToTrigger
(
mod_id
,
rnti
,
trigg
->
meas_info
->
event
->
a3
->
time_to_trigger
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set A3 event time to trigger
\n
"
);
return
-
1
;
}
}
/* Set A3 event maximum number of reported cells */
if
(
trigg
->
meas_info
->
event
->
a3
->
has_max_report_cells
)
{
if
(
flexran_set_rrc_a3_event_maxReportCells
(
mod_id
,
rnti
,
trigg
->
meas_info
->
event
->
a3
->
max_report_cells
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Cannot set A3 event max report cells
\n
"
);
return
-
1
;
}
}
}
}
}
return
0
;
}
openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc_internal.h
0 → 100644
View file @
1b90c4a0
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef FLEXRAN_AGENT_RRC_INTERNAL_H_
#define FLEXRAN_AGENT_RRC_INTERNAL_H_
#include "flexran_agent_rrc_internal.h"
#include "flexran_agent_ran_api.h"
int
update_rrc_reconfig
(
mid_t
mod_id
,
rnti_t
rnti
,
Protocol__FlexRrcTriggering
*
trigg
);
#endif
/*FLEXRAN_AGENT_RRC_INTERNAL_H_*/
openair2/ENB_APP/MESSAGES/V2/flexran.proto
View file @
1b90c4a0
...
@@ -7,7 +7,7 @@ import "time_common.proto";
...
@@ -7,7 +7,7 @@ import "time_common.proto";
import
"config_messages.proto"
;
import
"config_messages.proto"
;
import
"controller_commands.proto"
;
import
"controller_commands.proto"
;
import
"control_delegation.proto"
;
import
"control_delegation.proto"
;
import
"config_common.proto"
;
message
flexran_message
{
message
flexran_message
{
optional
flexran_direction
msg_dir
=
100
;
optional
flexran_direction
msg_dir
=
100
;
...
@@ -189,6 +189,7 @@ message flex_rrc_triggering {
...
@@ -189,6 +189,7 @@ message flex_rrc_triggering {
optional
flex_header
header
=
1
;
optional
flex_header
header
=
1
;
optional
string
rrc_trigger
=
2
;
optional
string
rrc_trigger
=
2
;
optional
flex_measurement_info
meas_info
=
3
;
}
}
//
//
...
...
openair2/ENB_APP/flexran_agent_common.c
View file @
1b90c4a0
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
//#include "PHY/extern.h"
//#include "PHY/extern.h"
#include "common/utils/LOG/log.h"
#include "common/utils/LOG/log.h"
#include "flexran_agent_mac_internal.h"
#include "flexran_agent_mac_internal.h"
#include "flexran_agent_rrc_internal.h"
//#include "SCHED/defs.h"
//#include "SCHED/defs.h"
#include "RRC/LTE/rrc_extern.h"
#include "RRC/LTE/rrc_extern.h"
...
@@ -805,10 +806,12 @@ error:
...
@@ -805,10 +806,12 @@ error:
int
flexran_agent_rrc_measurement
(
mid_t
mod_id
,
const
void
*
params
,
Protocol__FlexranMessage
**
msg
)
{
int
flexran_agent_rrc_measurement
(
mid_t
mod_id
,
const
void
*
params
,
Protocol__FlexranMessage
**
msg
)
{
protocol_ctxt_t
ctxt
;
//
protocol_ctxt_t ctxt;
Protocol__FlexranMessage
*
input
=
(
Protocol__FlexranMessage
*
)
params
;
Protocol__FlexranMessage
*
input
=
(
Protocol__FlexranMessage
*
)
params
;
Protocol__FlexRrcTriggering
*
triggering
=
input
->
rrc_triggering
;
Protocol__FlexRrcTriggering
*
triggering
=
input
->
rrc_triggering
;
agent_reconf_rrc
*
reconf_param
=
malloc
(
sizeof
(
agent_reconf_rrc
));
//agent_reconf_rrc *rrc_reconf = malloc(sizeof(agent_reconf_rrc));
#if 0
reconf_param->trigger_policy = triggering->rrc_trigger;
reconf_param->trigger_policy = triggering->rrc_trigger;
reconf_param->report_interval = 0;
reconf_param->report_interval = 0;
reconf_param->report_amount = 0;
reconf_param->report_amount = 0;
...
@@ -817,9 +820,51 @@ int flexran_agent_rrc_measurement(mid_t mod_id, const void *params, Protocol__Fl
...
@@ -817,9 +820,51 @@ int flexran_agent_rrc_measurement(mid_t mod_id, const void *params, Protocol__Fl
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, ue_context_p->ue_context.rnti, flexran_get_current_frame(mod_id), flexran_get_current_subframe (mod_id), mod_id);
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, ue_context_p->ue_context.rnti, flexran_get_current_frame(mod_id), flexran_get_current_subframe (mod_id), mod_id);
flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(&ctxt, ue_context_p, 0, reconf_param);
flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(&ctxt, ue_context_p, 0, reconf_param);
}
}
#endif
// TODO: Step 1 - Verification process
// Step 2 - Set the proper values using FlexRAN API (protected with mutex ?)
int
num_ue
=
0
;
if
(
flexran_agent_get_rrc_xface
(
mod_id
))
num_ue
=
flexran_get_rrc_num_ues
(
mod_id
);
else
if
(
flexran_agent_get_mac_xface
(
mod_id
))
num_ue
=
flexran_get_mac_num_ues
(
mod_id
);
if
(
flexran_agent_get_rrc_xface
(
mod_id
)
&&
flexran_agent_get_mac_xface
(
mod_id
)
&&
flexran_get_rrc_num_ues
(
mod_id
)
!=
flexran_get_mac_num_ues
(
mod_id
))
{
const
int
nrrc
=
flexran_get_rrc_num_ues
(
mod_id
);
const
int
nmac
=
flexran_get_mac_num_ues
(
mod_id
);
num_ue
=
nrrc
<
nmac
?
nrrc
:
nmac
;
LOG_E
(
FLEXRAN_AGENT
,
"%s(): different numbers of UEs in RRC (%d) and MAC (%d), reporting for %d UEs
\n
"
,
__func__
,
nrrc
,
nmac
,
num_ue
);
}
if
(
num_ue
==
0
)
return
0
;
int
error
=
0
;
rnti_t
rntis
[
num_ue
];
flexran_get_rrc_rnti_list
(
mod_id
,
rntis
,
num_ue
);
for
(
int
i
=
0
;
i
<
num_ue
;
i
++
)
{
const
rnti_t
rnti
=
rntis
[
i
];
if
(
flexran_agent_get_rrc_xface
(
mod_id
))
error
=
update_rrc_reconfig
(
mod_id
,
rnti
,
triggering
);
if
(
error
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Error in updating user %d
\n
"
,
i
);
}
else
{
// Step 3 - Call the proper wrapper in FlexRAN API
if
(
flexran_call_rrc_reconfiguration
(
mod_id
,
rnti
)
<
0
)
{
LOG_E
(
FLEXRAN_AGENT
,
"Error in reconfiguring user %d
\n
"
,
i
);
}
}
}
*
msg
=
NULL
;
*
msg
=
NULL
;
free
(
reconf_param
);
//
free(reconf_param);
reconf_param
=
NULL
;
//
reconf_param = NULL;
return
0
;
return
0
;
}
}
...
...
openair2/ENB_APP/flexran_agent_ran_api.c
View file @
1b90c4a0
...
@@ -1434,6 +1434,19 @@ uint32_t flexran_get_pdcp_rx_oo(mid_t mod_id, uint16_t uid, lcid_t lcid)
...
@@ -1434,6 +1434,19 @@ uint32_t flexran_get_pdcp_rx_oo(mid_t mod_id, uint16_t uid, lcid_t lcid)
}
}
/******************** RRC *****************************/
/******************** RRC *****************************/
/* RRC Wrappers */
int
flexran_call_rrc_reconfiguration
(
mid_t
mod_id
,
rnti_t
rnti
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
protocol_ctxt_t
ctxt
;
memset
(
&
ctxt
,
0
,
sizeof
(
ctxt
));
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
;
PROTOCOL_CTXT_SET_BY_MODULE_ID
(
&
ctxt
,
mod_id
,
ENB_FLAG_YES
,
ue_context_p
->
ue_context
.
rnti
,
flexran_get_current_frame
(
mod_id
),
flexran_get_current_subframe
(
mod_id
),
mod_id
);
flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration
(
&
ctxt
,
ue_context_p
,
0
);
return
0
;
}
/* RRC Getters */
LTE_MeasId_t
flexran_get_rrc_pcell_measid
(
mid_t
mod_id
,
rnti_t
rnti
)
{
LTE_MeasId_t
flexran_get_rrc_pcell_measid
(
mid_t
mod_id
,
rnti_t
rnti
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
...
@@ -1565,6 +1578,8 @@ float flexran_get_rrc_neigh_rsrq(mid_t mod_id, rnti_t rnti, long cell_id) {
...
@@ -1565,6 +1578,8 @@ float flexran_get_rrc_neigh_rsrq(mid_t mod_id, rnti_t rnti, long cell_id) {
return
RSRQ_meas_mapping
[
*
(
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
)];
}
}
/* Measurement offsets */
long
flexran_get_rrc_ofp
(
mid_t
mod_id
,
rnti_t
rnti
)
{
long
flexran_get_rrc_ofp
(
mid_t
mod_id
,
rnti_t
rnti
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
rrc
[
mod_id
],
rnti
);
...
@@ -1586,7 +1601,40 @@ long flexran_get_rrc_ocp(mid_t mod_id, rnti_t rnti) {
...
@@ -1586,7 +1601,40 @@ long flexran_get_rrc_ocp(mid_t mod_id, rnti_t rnti) {
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
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
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
return
ue_context_p
->
ue_context
.
measurement_info
->
cellIndividualOffset
[
0
];
switch
(
ue_context_p
->
ue_context
.
measurement_info
->
cellIndividualOffset
[
0
])
{
case
LTE_Q_OffsetRange_dB_24
:
return
-
24
;
case
LTE_Q_OffsetRange_dB_22
:
return
-
22
;
case
LTE_Q_OffsetRange_dB_20
:
return
-
20
;
case
LTE_Q_OffsetRange_dB_18
:
return
-
18
;
case
LTE_Q_OffsetRange_dB_16
:
return
-
16
;
case
LTE_Q_OffsetRange_dB_14
:
return
-
14
;
case
LTE_Q_OffsetRange_dB_12
:
return
-
12
;
case
LTE_Q_OffsetRange_dB_10
:
return
-
10
;
case
LTE_Q_OffsetRange_dB_8
:
return
-
8
;
case
LTE_Q_OffsetRange_dB_6
:
return
-
6
;
case
LTE_Q_OffsetRange_dB_5
:
return
-
5
;
case
LTE_Q_OffsetRange_dB_4
:
return
-
4
;
case
LTE_Q_OffsetRange_dB_3
:
return
-
3
;
case
LTE_Q_OffsetRange_dB_2
:
return
-
2
;
case
LTE_Q_OffsetRange_dB_1
:
return
-
1
;
case
LTE_Q_OffsetRange_dB0
:
return
0
;
case
LTE_Q_OffsetRange_dB1
:
return
1
;
case
LTE_Q_OffsetRange_dB2
:
return
2
;
case
LTE_Q_OffsetRange_dB3
:
return
3
;
case
LTE_Q_OffsetRange_dB4
:
return
4
;
case
LTE_Q_OffsetRange_dB5
:
return
5
;
case
LTE_Q_OffsetRange_dB6
:
return
6
;
case
LTE_Q_OffsetRange_dB8
:
return
8
;
case
LTE_Q_OffsetRange_dB10
:
return
10
;
case
LTE_Q_OffsetRange_dB12
:
return
12
;
case
LTE_Q_OffsetRange_dB14
:
return
14
;
case
LTE_Q_OffsetRange_dB16
:
return
16
;
case
LTE_Q_OffsetRange_dB18
:
return
18
;
case
LTE_Q_OffsetRange_dB20
:
return
20
;
case
LTE_Q_OffsetRange_dB22
:
return
22
;
case
LTE_Q_OffsetRange_dB24
:
return
24
;
default:
return
-
99
;
}
}
}
long
flexran_get_rrc_ocn
(
mid_t
mod_id
,
rnti_t
rnti
,
long
cell_id
)
{
long
flexran_get_rrc_ocn
(
mid_t
mod_id
,
rnti_t
rnti
,
long
cell_id
)
{
...
@@ -1594,7 +1642,40 @@ long flexran_get_rrc_ocn(mid_t mod_id, rnti_t rnti, long cell_id) {
...
@@ -1594,7 +1642,40 @@ long flexran_get_rrc_ocn(mid_t mod_id, rnti_t rnti, long cell_id) {
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
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
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
return
ue_context_p
->
ue_context
.
measurement_info
->
cellIndividualOffset
[
cell_id
+
1
];
switch
(
ue_context_p
->
ue_context
.
measurement_info
->
cellIndividualOffset
[
cell_id
+
1
])
{
case
LTE_Q_OffsetRange_dB_24
:
return
-
24
;
case
LTE_Q_OffsetRange_dB_22
:
return
-
22
;
case
LTE_Q_OffsetRange_dB_20
:
return
-
20
;
case
LTE_Q_OffsetRange_dB_18
:
return
-
18
;
case
LTE_Q_OffsetRange_dB_16
:
return
-
16
;
case
LTE_Q_OffsetRange_dB_14
:
return
-
14
;
case
LTE_Q_OffsetRange_dB_12
:
return
-
12
;
case
LTE_Q_OffsetRange_dB_10
:
return
-
10
;
case
LTE_Q_OffsetRange_dB_8
:
return
-
8
;
case
LTE_Q_OffsetRange_dB_6
:
return
-
6
;
case
LTE_Q_OffsetRange_dB_5
:
return
-
5
;
case
LTE_Q_OffsetRange_dB_4
:
return
-
4
;
case
LTE_Q_OffsetRange_dB_3
:
return
-
3
;
case
LTE_Q_OffsetRange_dB_2
:
return
-
2
;
case
LTE_Q_OffsetRange_dB_1
:
return
-
1
;
case
LTE_Q_OffsetRange_dB0
:
return
0
;
case
LTE_Q_OffsetRange_dB1
:
return
1
;
case
LTE_Q_OffsetRange_dB2
:
return
2
;
case
LTE_Q_OffsetRange_dB3
:
return
3
;
case
LTE_Q_OffsetRange_dB4
:
return
4
;
case
LTE_Q_OffsetRange_dB5
:
return
5
;
case
LTE_Q_OffsetRange_dB6
:
return
6
;
case
LTE_Q_OffsetRange_dB8
:
return
8
;
case
LTE_Q_OffsetRange_dB10
:
return
10
;
case
LTE_Q_OffsetRange_dB12
:
return
12
;
case
LTE_Q_OffsetRange_dB14
:
return
14
;
case
LTE_Q_OffsetRange_dB16
:
return
16
;
case
LTE_Q_OffsetRange_dB18
:
return
18
;
case
LTE_Q_OffsetRange_dB20
:
return
20
;
case
LTE_Q_OffsetRange_dB22
:
return
22
;
case
LTE_Q_OffsetRange_dB24
:
return
24
;
default:
return
-
99
;
}
}
}
long
flexran_get_filter_coeff_rsrp
(
mid_t
mod_id
,
rnti_t
rnti
)
{
long
flexran_get_filter_coeff_rsrp
(
mid_t
mod_id
,
rnti_t
rnti
)
{
...
@@ -1602,7 +1683,25 @@ long flexran_get_filter_coeff_rsrp(mid_t mod_id, rnti_t rnti) {
...
@@ -1602,7 +1683,25 @@ long flexran_get_filter_coeff_rsrp(mid_t mod_id, rnti_t rnti) {
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
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
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
return
ue_context_p
->
ue_context
.
measurement_info
->
filterCoefficientRSRP
;
switch
(
ue_context_p
->
ue_context
.
measurement_info
->
filterCoefficientRSRP
)
{
case
LTE_FilterCoefficient_fc0
:
return
0
;
case
LTE_FilterCoefficient_fc1
:
return
1
;
case
LTE_FilterCoefficient_fc2
:
return
2
;
case
LTE_FilterCoefficient_fc3
:
return
3
;
case
LTE_FilterCoefficient_fc4
:
return
4
;
case
LTE_FilterCoefficient_fc5
:
return
5
;
case
LTE_FilterCoefficient_fc6
:
return
6
;
case
LTE_FilterCoefficient_fc7
:
return
7
;
case
LTE_FilterCoefficient_fc8
:
return
8
;
case
LTE_FilterCoefficient_fc9
:
return
9
;
case
LTE_FilterCoefficient_fc11
:
return
11
;
case
LTE_FilterCoefficient_fc13
:
return
13
;
case
LTE_FilterCoefficient_fc15
:
return
15
;
case
LTE_FilterCoefficient_fc17
:
return
17
;
case
LTE_FilterCoefficient_fc19
:
return
19
;
case
LTE_FilterCoefficient_spare1
:
return
-
1
;
/* spare means no coefficient */
default:
return
-
1
;
}
}
}
long
flexran_get_filter_coeff_rsrq
(
mid_t
mod_id
,
rnti_t
rnti
)
{
long
flexran_get_filter_coeff_rsrq
(
mid_t
mod_id
,
rnti_t
rnti
)
{
...
@@ -1610,7 +1709,25 @@ long flexran_get_filter_coeff_rsrq(mid_t mod_id, rnti_t rnti) {
...
@@ -1610,7 +1709,25 @@ long flexran_get_filter_coeff_rsrq(mid_t mod_id, rnti_t rnti) {
struct
rrc_eNB_ue_context_s
*
ue_context_p
=
rrc_eNB_get_ue_context
(
RC
.
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
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
return
ue_context_p
->
ue_context
.
measurement_info
->
filterCoefficientRSRQ
;
switch
(
ue_context_p
->
ue_context
.
measurement_info
->
filterCoefficientRSRQ
)
{
case
LTE_FilterCoefficient_fc0
:
return
0
;
case
LTE_FilterCoefficient_fc1
:
return
1
;
case
LTE_FilterCoefficient_fc2
:
return
2
;
case
LTE_FilterCoefficient_fc3
:
return
3
;
case
LTE_FilterCoefficient_fc4
:
return
4
;
case
LTE_FilterCoefficient_fc5
:
return
5
;
case
LTE_FilterCoefficient_fc6
:
return
6
;
case
LTE_FilterCoefficient_fc7
:
return
7
;
case
LTE_FilterCoefficient_fc8
:
return
8
;
case
LTE_FilterCoefficient_fc9
:
return
9
;
case
LTE_FilterCoefficient_fc11
:
return
11
;
case
LTE_FilterCoefficient_fc13
:
return
13
;
case
LTE_FilterCoefficient_fc15
:
return
15
;
case
LTE_FilterCoefficient_fc17
:
return
17
;
case
LTE_FilterCoefficient_fc19
:
return
19
;
case
LTE_FilterCoefficient_spare1
:
return
-
1
;
/* spare means no coefficient */
default:
return
-
1
;
}
}
}
/* Periodic event */
/* Periodic event */
...
@@ -1644,7 +1761,25 @@ long flexran_get_rrc_a3_event_timeToTrigger(mid_t mod_id, rnti_t rnti) {
...
@@ -1644,7 +1761,25 @@ long flexran_get_rrc_a3_event_timeToTrigger(mid_t mod_id, rnti_t rnti) {
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
)
return
-
1
;
return
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
timeToTrigger
;
switch
(
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
timeToTrigger
)
{
case
LTE_TimeToTrigger_ms0
:
return
0
;
case
LTE_TimeToTrigger_ms40
:
return
40
;
case
LTE_TimeToTrigger_ms64
:
return
64
;
case
LTE_TimeToTrigger_ms80
:
return
80
;
case
LTE_TimeToTrigger_ms100
:
return
100
;
case
LTE_TimeToTrigger_ms128
:
return
128
;
case
LTE_TimeToTrigger_ms160
:
return
160
;
case
LTE_TimeToTrigger_ms256
:
return
256
;
case
LTE_TimeToTrigger_ms320
:
return
320
;
case
LTE_TimeToTrigger_ms480
:
return
480
;
case
LTE_TimeToTrigger_ms512
:
return
512
;
case
LTE_TimeToTrigger_ms640
:
return
640
;
case
LTE_TimeToTrigger_ms1024
:
return
1024
;
case
LTE_TimeToTrigger_ms1280
:
return
1280
;
case
LTE_TimeToTrigger_ms2560
:
return
2560
;
case
LTE_TimeToTrigger_ms5120
:
return
5120
;
default:
return
-
1
;
}
}
}
long
flexran_get_rrc_a3_event_maxReportCells
(
mid_t
mod_id
,
rnti_t
rnti
)
{
long
flexran_get_rrc_a3_event_maxReportCells
(
mid_t
mod_id
,
rnti_t
rnti
)
{
...
@@ -1677,6 +1812,259 @@ int flexran_get_rrc_a3_event_reportOnLeave(mid_t mod_id, rnti_t rnti) {
...
@@ -1677,6 +1812,259 @@ int flexran_get_rrc_a3_event_reportOnLeave(mid_t mod_id, rnti_t rnti) {
return
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
reportOnLeave
;
return
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
reportOnLeave
;
}
}
/* RRC Setters */
/* Measurement offsets */
int
flexran_set_rrc_ofp
(
mid_t
mod_id
,
rnti_t
rnti
,
long
offsetFreq
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
ue_context_p
->
ue_context
.
measurement_info
->
offsetFreq
=
offsetFreq
;
return
0
;
}
int
flexran_set_rrc_ofn
(
mid_t
mod_id
,
rnti_t
rnti
,
long
offsetFreq
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
ue_context_p
->
ue_context
.
measurement_info
->
offsetFreq
=
offsetFreq
;
return
0
;
}
int
flexran_set_rrc_ocp
(
mid_t
mod_id
,
rnti_t
rnti
,
long
cellIndividualOffset
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
LTE_Q_OffsetRange_t
*
cio
=
&
ue_context_p
->
ue_context
.
measurement_info
->
cellIndividualOffset
[
0
];
switch
(
cellIndividualOffset
)
{
case
-
24
:
*
cio
=
LTE_Q_OffsetRange_dB_24
;
break
;
case
-
22
:
*
cio
=
LTE_Q_OffsetRange_dB_22
;
break
;
case
-
20
:
*
cio
=
LTE_Q_OffsetRange_dB_20
;
break
;
case
-
18
:
*
cio
=
LTE_Q_OffsetRange_dB_18
;
break
;
case
-
16
:
*
cio
=
LTE_Q_OffsetRange_dB_16
;
break
;
case
-
14
:
*
cio
=
LTE_Q_OffsetRange_dB_14
;
break
;
case
-
12
:
*
cio
=
LTE_Q_OffsetRange_dB_12
;
break
;
case
-
10
:
*
cio
=
LTE_Q_OffsetRange_dB_10
;
break
;
case
-
8
:
*
cio
=
LTE_Q_OffsetRange_dB_8
;
break
;
case
-
6
:
*
cio
=
LTE_Q_OffsetRange_dB_6
;
break
;
case
-
5
:
*
cio
=
LTE_Q_OffsetRange_dB_5
;
break
;
case
-
4
:
*
cio
=
LTE_Q_OffsetRange_dB_4
;
break
;
case
-
3
:
*
cio
=
LTE_Q_OffsetRange_dB_3
;
break
;
case
-
2
:
*
cio
=
LTE_Q_OffsetRange_dB_2
;
break
;
case
-
1
:
*
cio
=
LTE_Q_OffsetRange_dB_1
;
break
;
case
0
:
*
cio
=
LTE_Q_OffsetRange_dB0
;
break
;
case
1
:
*
cio
=
LTE_Q_OffsetRange_dB1
;
break
;
case
2
:
*
cio
=
LTE_Q_OffsetRange_dB2
;
break
;
case
3
:
*
cio
=
LTE_Q_OffsetRange_dB3
;
break
;
case
4
:
*
cio
=
LTE_Q_OffsetRange_dB4
;
break
;
case
5
:
*
cio
=
LTE_Q_OffsetRange_dB5
;
break
;
case
6
:
*
cio
=
LTE_Q_OffsetRange_dB6
;
break
;
case
8
:
*
cio
=
LTE_Q_OffsetRange_dB8
;
break
;
case
10
:
*
cio
=
LTE_Q_OffsetRange_dB10
;
break
;
case
12
:
*
cio
=
LTE_Q_OffsetRange_dB12
;
break
;
case
14
:
*
cio
=
LTE_Q_OffsetRange_dB14
;
break
;
case
16
:
*
cio
=
LTE_Q_OffsetRange_dB16
;
break
;
case
18
:
*
cio
=
LTE_Q_OffsetRange_dB18
;
break
;
case
20
:
*
cio
=
LTE_Q_OffsetRange_dB20
;
break
;
case
22
:
*
cio
=
LTE_Q_OffsetRange_dB22
;
break
;
case
24
:
*
cio
=
LTE_Q_OffsetRange_dB24
;
break
;
default:
return
-
1
;
}
return
0
;
}
int
flexran_set_rrc_ocn
(
mid_t
mod_id
,
rnti_t
rnti
,
long
cell_id
,
long
cellIndividualOffset
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
LTE_Q_OffsetRange_t
*
cio
=
&
ue_context_p
->
ue_context
.
measurement_info
->
cellIndividualOffset
[
cell_id
+
1
];
switch
(
cellIndividualOffset
)
{
case
-
24
:
*
cio
=
LTE_Q_OffsetRange_dB_24
;
break
;
case
-
22
:
*
cio
=
LTE_Q_OffsetRange_dB_22
;
break
;
case
-
20
:
*
cio
=
LTE_Q_OffsetRange_dB_20
;
break
;
case
-
18
:
*
cio
=
LTE_Q_OffsetRange_dB_18
;
break
;
case
-
16
:
*
cio
=
LTE_Q_OffsetRange_dB_16
;
break
;
case
-
14
:
*
cio
=
LTE_Q_OffsetRange_dB_14
;
break
;
case
-
12
:
*
cio
=
LTE_Q_OffsetRange_dB_12
;
break
;
case
-
10
:
*
cio
=
LTE_Q_OffsetRange_dB_10
;
break
;
case
-
8
:
*
cio
=
LTE_Q_OffsetRange_dB_8
;
break
;
case
-
6
:
*
cio
=
LTE_Q_OffsetRange_dB_6
;
break
;
case
-
5
:
*
cio
=
LTE_Q_OffsetRange_dB_5
;
break
;
case
-
4
:
*
cio
=
LTE_Q_OffsetRange_dB_4
;
break
;
case
-
3
:
*
cio
=
LTE_Q_OffsetRange_dB_3
;
break
;
case
-
2
:
*
cio
=
LTE_Q_OffsetRange_dB_2
;
break
;
case
-
1
:
*
cio
=
LTE_Q_OffsetRange_dB_1
;
break
;
case
0
:
*
cio
=
LTE_Q_OffsetRange_dB0
;
break
;
case
1
:
*
cio
=
LTE_Q_OffsetRange_dB1
;
break
;
case
2
:
*
cio
=
LTE_Q_OffsetRange_dB2
;
break
;
case
3
:
*
cio
=
LTE_Q_OffsetRange_dB3
;
break
;
case
4
:
*
cio
=
LTE_Q_OffsetRange_dB4
;
break
;
case
5
:
*
cio
=
LTE_Q_OffsetRange_dB5
;
break
;
case
6
:
*
cio
=
LTE_Q_OffsetRange_dB6
;
break
;
case
8
:
*
cio
=
LTE_Q_OffsetRange_dB8
;
break
;
case
10
:
*
cio
=
LTE_Q_OffsetRange_dB10
;
break
;
case
12
:
*
cio
=
LTE_Q_OffsetRange_dB12
;
break
;
case
14
:
*
cio
=
LTE_Q_OffsetRange_dB14
;
break
;
case
16
:
*
cio
=
LTE_Q_OffsetRange_dB16
;
break
;
case
18
:
*
cio
=
LTE_Q_OffsetRange_dB18
;
break
;
case
20
:
*
cio
=
LTE_Q_OffsetRange_dB20
;
break
;
case
22
:
*
cio
=
LTE_Q_OffsetRange_dB22
;
break
;
case
24
:
*
cio
=
LTE_Q_OffsetRange_dB24
;
break
;
default:
return
-
1
;
}
return
0
;
}
int
flexran_set_filter_coeff_rsrp
(
mid_t
mod_id
,
rnti_t
rnti
,
long
filterCoefficientRSRP
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
LTE_FilterCoefficient_t
*
fc
=
&
ue_context_p
->
ue_context
.
measurement_info
->
filterCoefficientRSRP
;
switch
(
filterCoefficientRSRP
)
{
case
0
:
*
fc
=
LTE_FilterCoefficient_fc0
;
break
;
case
1
:
*
fc
=
LTE_FilterCoefficient_fc1
;
break
;
case
2
:
*
fc
=
LTE_FilterCoefficient_fc2
;
break
;
case
3
:
*
fc
=
LTE_FilterCoefficient_fc3
;
break
;
case
4
:
*
fc
=
LTE_FilterCoefficient_fc4
;
break
;
case
5
:
*
fc
=
LTE_FilterCoefficient_fc5
;
break
;
case
6
:
*
fc
=
LTE_FilterCoefficient_fc6
;
break
;
case
7
:
*
fc
=
LTE_FilterCoefficient_fc7
;
break
;
case
8
:
*
fc
=
LTE_FilterCoefficient_fc8
;
break
;
case
9
:
*
fc
=
LTE_FilterCoefficient_fc9
;
break
;
case
11
:
*
fc
=
LTE_FilterCoefficient_fc11
;
break
;
case
13
:
*
fc
=
LTE_FilterCoefficient_fc13
;
break
;
case
15
:
*
fc
=
LTE_FilterCoefficient_fc15
;
break
;
case
17
:
*
fc
=
LTE_FilterCoefficient_fc17
;
break
;
case
19
:
*
fc
=
LTE_FilterCoefficient_fc19
;
break
;
case
-
1
:
*
fc
=
LTE_FilterCoefficient_spare1
;
break
;
default:
return
-
1
;
}
return
0
;
}
int
flexran_set_filter_coeff_rsrq
(
mid_t
mod_id
,
rnti_t
rnti
,
long
filterCoefficientRSRQ
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
LTE_FilterCoefficient_t
*
fc
=
&
ue_context_p
->
ue_context
.
measurement_info
->
filterCoefficientRSRQ
;
switch
(
filterCoefficientRSRQ
)
{
case
0
:
*
fc
=
LTE_FilterCoefficient_fc0
;
break
;
case
1
:
*
fc
=
LTE_FilterCoefficient_fc1
;
break
;
case
2
:
*
fc
=
LTE_FilterCoefficient_fc2
;
break
;
case
3
:
*
fc
=
LTE_FilterCoefficient_fc3
;
break
;
case
4
:
*
fc
=
LTE_FilterCoefficient_fc4
;
break
;
case
5
:
*
fc
=
LTE_FilterCoefficient_fc5
;
break
;
case
6
:
*
fc
=
LTE_FilterCoefficient_fc6
;
break
;
case
7
:
*
fc
=
LTE_FilterCoefficient_fc7
;
break
;
case
8
:
*
fc
=
LTE_FilterCoefficient_fc8
;
break
;
case
9
:
*
fc
=
LTE_FilterCoefficient_fc9
;
break
;
case
11
:
*
fc
=
LTE_FilterCoefficient_fc11
;
break
;
case
13
:
*
fc
=
LTE_FilterCoefficient_fc13
;
break
;
case
15
:
*
fc
=
LTE_FilterCoefficient_fc15
;
break
;
case
17
:
*
fc
=
LTE_FilterCoefficient_fc17
;
break
;
case
19
:
*
fc
=
LTE_FilterCoefficient_fc19
;
break
;
case
-
1
:
*
fc
=
LTE_FilterCoefficient_spare1
;
break
;
default:
return
-
1
;
}
return
0
;
}
/* Periodic event */
int
flexran_set_rrc_per_event_maxReportCells
(
mid_t
mod_id
,
rnti_t
rnti
,
long
maxReportCells
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
per_event
)
return
-
1
;
ue_context_p
->
ue_context
.
measurement_info
->
events
->
per_event
->
maxReportCells
=
maxReportCells
;
return
0
;
}
/* A3 event */
int
flexran_set_rrc_a3_event_hysteresis
(
mid_t
mod_id
,
rnti_t
rnti
,
long
hysteresis
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
)
return
-
1
;
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
hysteresis
=
hysteresis
;
return
0
;
}
int
flexran_set_rrc_a3_event_timeToTrigger
(
mid_t
mod_id
,
rnti_t
rnti
,
long
timeToTrigger
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
)
return
-
1
;
LTE_TimeToTrigger_t
*
ttt
=
&
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
timeToTrigger
;
switch
(
timeToTrigger
)
{
case
0
:
*
ttt
=
LTE_TimeToTrigger_ms0
;
break
;
case
40
:
*
ttt
=
LTE_TimeToTrigger_ms40
;
break
;
case
64
:
*
ttt
=
LTE_TimeToTrigger_ms64
;
break
;
case
80
:
*
ttt
=
LTE_TimeToTrigger_ms80
;
break
;
case
100
:
*
ttt
=
LTE_TimeToTrigger_ms100
;
break
;
case
128
:
*
ttt
=
LTE_TimeToTrigger_ms128
;
break
;
case
160
:
*
ttt
=
LTE_TimeToTrigger_ms160
;
break
;
case
256
:
*
ttt
=
LTE_TimeToTrigger_ms256
;
break
;
case
320
:
*
ttt
=
LTE_TimeToTrigger_ms320
;
break
;
case
480
:
*
ttt
=
LTE_TimeToTrigger_ms480
;
break
;
case
512
:
*
ttt
=
LTE_TimeToTrigger_ms512
;
break
;
case
640
:
*
ttt
=
LTE_TimeToTrigger_ms640
;
break
;
case
1024
:
*
ttt
=
LTE_TimeToTrigger_ms1024
;
break
;
case
1280
:
*
ttt
=
LTE_TimeToTrigger_ms1280
;
break
;
case
2560
:
*
ttt
=
LTE_TimeToTrigger_ms2560
;
break
;
case
5120
:
*
ttt
=
LTE_TimeToTrigger_ms5120
;
break
;
default:
return
-
1
;
}
return
0
;
}
int
flexran_set_rrc_a3_event_maxReportCells
(
mid_t
mod_id
,
rnti_t
rnti
,
long
maxReportCells
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
)
return
-
1
;
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
maxReportCells
=
maxReportCells
;
return
0
;
}
int
flexran_set_rrc_a3_event_a3_offset
(
mid_t
mod_id
,
rnti_t
rnti
,
long
a3_offset
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
)
return
-
1
;
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
a3_offset
=
a3_offset
;
return
0
;
}
int
flexran_set_rrc_a3_event_reportOnLeave
(
mid_t
mod_id
,
rnti_t
rnti
,
int
reportOnLeave
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
-
1
;
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
.
measurement_info
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
)
return
-
1
;
if
(
!
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
)
return
-
1
;
ue_context_p
->
ue_context
.
measurement_info
->
events
->
a3_event
->
reportOnLeave
=
reportOnLeave
;
return
0
;
}
uint8_t
flexran_get_rrc_num_plmn_ids
(
mid_t
mod_id
)
{
uint8_t
flexran_get_rrc_num_plmn_ids
(
mid_t
mod_id
)
{
if
(
!
rrc_is_present
(
mod_id
))
return
0
;
if
(
!
rrc_is_present
(
mod_id
))
return
0
;
return
RC
.
rrc
[
mod_id
]
->
configuration
.
num_plmn
;
return
RC
.
rrc
[
mod_id
]
->
configuration
.
num_plmn
;
...
...
openair2/ENB_APP/flexran_agent_ran_api.h
View file @
1b90c4a0
...
@@ -498,6 +498,9 @@ uint32_t flexran_get_pdcp_rx_aiat_w(mid_t mod_id, uint16_t uid, lcid_t lcid);
...
@@ -498,6 +498,9 @@ uint32_t flexran_get_pdcp_rx_aiat_w(mid_t mod_id, uint16_t uid, lcid_t lcid);
uint32_t
flexran_get_pdcp_rx_oo
(
mid_t
mod_id
,
uint16_t
uid
,
lcid_t
lcid
);
uint32_t
flexran_get_pdcp_rx_oo
(
mid_t
mod_id
,
uint16_t
uid
,
lcid_t
lcid
);
/*********************RRC**********************/
/*********************RRC**********************/
/* Call RRC Reconfiguration wrapper function */
int
flexran_call_rrc_reconfiguration
(
mid_t
mod_id
,
rnti_t
rnti
);
/*Get primary cell measuremeant id flexRAN*/
/*Get primary cell measuremeant id flexRAN*/
LTE_MeasId_t
flexran_get_rrc_pcell_measid
(
mid_t
mod_id
,
rnti_t
rnti
);
LTE_MeasId_t
flexran_get_rrc_pcell_measid
(
mid_t
mod_id
,
rnti_t
rnti
);
...
@@ -576,6 +579,42 @@ long flexran_get_filter_coeff_rsrp(mid_t mod_id, rnti_t rnti);
...
@@ -576,6 +579,42 @@ long flexran_get_filter_coeff_rsrp(mid_t mod_id, rnti_t rnti);
/* Get filter coefficient for rsrq */
/* Get filter coefficient for rsrq */
long
flexran_get_filter_coeff_rsrq
(
mid_t
mod_id
,
rnti_t
rnti
);
long
flexran_get_filter_coeff_rsrq
(
mid_t
mod_id
,
rnti_t
rnti
);
/* Set ofp offset */
int
flexran_set_rrc_ofp
(
mid_t
mod_id
,
rnti_t
rnti
,
long
offsetFreq
);
/* Set ofn offset */
int
flexran_set_rrc_ofn
(
mid_t
mod_id
,
rnti_t
rnti
,
long
offsetFreq
);
/* Set ocp offset */
int
flexran_set_rrc_ocp
(
mid_t
mod_id
,
rnti_t
rnti
,
long
cellIndividualOffset
);
/* Set ocn offset */
int
flexran_set_rrc_ocn
(
mid_t
mod_id
,
rnti_t
rnti
,
long
cell_id
,
long
cellIndividualOffset
);
/* Set Periodic Event max reported cells */
int
flexran_set_rrc_per_event_maxReportCells
(
mid_t
mod_id
,
rnti_t
rnti
,
long
maxReportCells
);
/* Set A3 Event hysteresis */
int
flexran_set_rrc_a3_event_hysteresis
(
mid_t
mod_id
,
rnti_t
rnti
,
long
hysteresis
);
/* Set A3 Event time to trigger */
int
flexran_set_rrc_a3_event_timeToTrigger
(
mid_t
mod_id
,
rnti_t
rnti
,
long
timeToTrigger
);
/* Set A3 Event max reported cells */
int
flexran_set_rrc_a3_event_maxReportCells
(
mid_t
mod_id
,
rnti_t
rnti
,
long
maxReportCells
);
/* Set A3 Event a3 offset */
int
flexran_set_rrc_a3_event_a3_offset
(
mid_t
mod_id
,
rnti_t
rnti
,
long
a3_offset
);
/* Set A3 Event report on leave */
int
flexran_set_rrc_a3_event_reportOnLeave
(
mid_t
mod_id
,
rnti_t
rnti
,
int
reportOnLeave
);
/* Set filter coefficient for rsrp */
int
flexran_set_filter_coeff_rsrp
(
mid_t
mod_id
,
rnti_t
rnti
,
long
filterCoefficientRSRP
);
/* Set filter coefficient for rsrq */
int
flexran_set_filter_coeff_rsrq
(
mid_t
mod_id
,
rnti_t
rnti
,
long
filterCoefficientRSRQ
);
/* Get number of PLMNs that is broadcasted in SIB1 */
/* Get number of PLMNs that is broadcasted in SIB1 */
uint8_t
flexran_get_rrc_num_plmn_ids
(
mid_t
mod_id
);
uint8_t
flexran_get_rrc_num_plmn_ids
(
mid_t
mod_id
);
...
...
openair2/RRC/LTE/rrc_eNB.c
View file @
1b90c4a0
...
@@ -3617,15 +3617,14 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
...
@@ -3617,15 +3617,14 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
void
void
flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_eNB_ue_context_t
*
const
ue_context_pP
,
rrc_eNB_ue_context_t
*
const
ue_context_pP
,
const
uint8_t
ho_state
,
const
uint8_t
ho_state
)
agent_reconf_rrc
*
trig_param
)
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
{
{
uint8_t
buffer
[
RRC_BUF_SIZE
];
uint8_t
buffer
[
RRC_BUF_SIZE
];
uint16_t
size
;
uint16_t
size
;
int
i
;
int
i
;
// configure SRB1/SRB2, PhysicalConfigDedicated, LTE_MAC_MainConfig for UE
/* Configure SRB1/SRB2, PhysicalConfigDedicated, LTE_MAC_MainConfig for UE */
eNB_RRC_INST
*
rrc_inst
=
RC
.
rrc
[
ctxt_pP
->
module_id
];
eNB_RRC_INST
*
rrc_inst
=
RC
.
rrc
[
ctxt_pP
->
module_id
];
struct
LTE_PhysicalConfigDedicated
**
physicalConfigDedicated
=
&
ue_context_pP
->
ue_context
.
physicalConfigDedicated
;
struct
LTE_PhysicalConfigDedicated
**
physicalConfigDedicated
=
&
ue_context_pP
->
ue_context
.
physicalConfigDedicated
;
struct
LTE_SRB_ToAddMod
*
SRB2_config
=
NULL
;
struct
LTE_SRB_ToAddMod
*
SRB2_config
=
NULL
;
...
@@ -3649,17 +3648,19 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3649,17 +3648,19 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
LTE_MeasObjectToAddModList_t
*
MeasObj_list
=
NULL
;
LTE_MeasObjectToAddModList_t
*
MeasObj_list
=
NULL
;
LTE_MeasObjectToAddMod_t
*
MeasObj
=
NULL
;
LTE_MeasObjectToAddMod_t
*
MeasObj
=
NULL
;
LTE_ReportConfigToAddModList_t
*
ReportConfig_list
=
NULL
;
LTE_ReportConfigToAddModList_t
*
ReportConfig_list
=
NULL
;
LTE_ReportConfigToAddMod_t
*
ReportConfig_per
;
//
, *ReportConfig_A1,
LTE_ReportConfigToAddMod_t
*
ReportConfig_per
,
*
ReportConfig_A1
,
//
*ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5;
*
ReportConfig_A2
,
*
ReportConfig_A3
,
*
ReportConfig_A4
,
*
ReportConfig_A5
;
LTE_MeasIdToAddModList_t
*
MeasId_list
=
NULL
;
LTE_MeasIdToAddModList_t
*
MeasId_list
=
NULL
;
LTE_MeasIdToAddMod_t
*
MeasId0
;
//, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5;
LTE_MeasIdToAddMod_t
*
MeasId0
,
*
MeasId1
,
*
MeasId2
,
*
MeasId3
,
*
MeasId4
,
*
MeasId5
;
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
long
*
sr_ProhibitTimer_r9
=
NULL
;
long
*
sr_ProhibitTimer_r9
=
NULL
;
// uint8_t sCellIndexToAdd = rrc_find_free_SCell_index(enb_mod_idP, ue_mod_idP, 1);
//uint8_t sCellIndexToAdd = 0;
#endif
#endif
long
*
logicalchannelgroup
,
*
logicalchannelgroup_drb
;
long
*
maxHARQ_Tx
,
*
periodicBSR_Timer
;
long
*
logicalchannelgroup
=
NULL
;
long
*
logicalchannelgroup_drb
=
NULL
;
long
*
maxHARQ_Tx
=
NULL
;
long
*
periodicBSR_Timer
=
NULL
;
LTE_RSRP_Range_t
*
rsrp
=
NULL
;
LTE_RSRP_Range_t
*
rsrp
=
NULL
;
struct
LTE_MeasConfig__speedStatePars
*
Sparams
=
NULL
;
struct
LTE_MeasConfig__speedStatePars
*
Sparams
=
NULL
;
LTE_QuantityConfig_t
*
quantityConfig
=
NULL
;
LTE_QuantityConfig_t
*
quantityConfig
=
NULL
;
...
@@ -3667,13 +3668,16 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3667,13 +3668,16 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
LTE_CellsToAddModList_t
*
CellsToAddModList
=
NULL
;
LTE_CellsToAddModList_t
*
CellsToAddModList
=
NULL
;
struct
LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList
*
dedicatedInfoNASList
=
NULL
;
struct
LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList
*
dedicatedInfoNASList
=
NULL
;
LTE_DedicatedInfoNAS_t
*
dedicatedInfoNas
=
NULL
;
LTE_DedicatedInfoNAS_t
*
dedicatedInfoNas
=
NULL
;
/* for no gcc warnings */
(
void
)
dedicatedInfoNas
;
/* For no gcc warnings */
(
void
)
dedicatedInfoNas
;
LTE_C_RNTI_t
*
cba_RNTI
=
NULL
;
LTE_C_RNTI_t
*
cba_RNTI
=
NULL
;
int
measurements_enabled
;
int
measurements_enabled
;
uint8_t
xid
=
rrc_eNB_get_next_transaction_identifier
(
ctxt_pP
->
module_id
);
//Transaction_id,
uint8_t
xid
=
rrc_eNB_get_next_transaction_identifier
(
ctxt_pP
->
module_id
);
//Transaction_id,
#ifdef CBA
uint8_t
cc_id
=
ue_context_pP
->
ue_context
.
primaryCC_id
;
//struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola;
LTE_UE_EUTRA_Capability_t
*
UEcap
=
ue_context_pP
->
ue_context
.
UE_Capability
;
#ifdef CBA // Contention Based Access
uint8_t
*
cba_RNTI_buf
;
uint8_t
*
cba_RNTI_buf
;
cba_RNTI
=
CALLOC
(
1
,
sizeof
(
LTE_C_RNTI_t
));
cba_RNTI
=
CALLOC
(
1
,
sizeof
(
LTE_C_RNTI_t
));
cba_RNTI_buf
=
CALLOC
(
1
,
2
*
sizeof
(
uint8_t
));
cba_RNTI_buf
=
CALLOC
(
1
,
2
*
sizeof
(
uint8_t
));
...
@@ -3681,27 +3685,33 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3681,27 +3685,33 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
cba_RNTI
->
size
=
2
;
cba_RNTI
->
size
=
2
;
cba_RNTI
->
bits_unused
=
0
;
cba_RNTI
->
bits_unused
=
0
;
/
/ associate UEs to the CBa groups as a function of their UE id
/
* Associate UEs to the CBA groups as a function of their UE id */
if
(
rrc_inst
->
num_active_cba_groups
)
{
if
(
rrc_inst
->
num_active_cba_groups
)
{
cba_RNTI
->
buf
[
0
]
=
rrc_inst
->
cba_rnti
[
ue_mod_idP
%
rrc_inst
->
num_active_cba_groups
]
&
0xff
;
cba_RNTI
->
buf
[
0
]
=
rrc_inst
->
cba_rnti
[
ue_mod_idP
%
rrc_inst
->
num_active_cba_groups
]
&
0xff
;
cba_RNTI
->
buf
[
1
]
=
0xff
;
cba_RNTI
->
buf
[
1
]
=
0xff
;
LOG_D
(
RRC
,
LOG_D
(
RRC
,
"[eNB %d] Frame %d: cba_RNTI = %x in group %d is attribued to UE %d
\n
"
,
"[eNB %d] Frame %d: cba_RNTI = %x in group %d is attribued to UE %d
\n
"
,
enb_mod_idP
,
enb_mod_idP
,
frameP
,
frameP
,
rrc_inst
->
cba_rnti
[
ue_mod_idP
%
rrc_inst
->
num_active_cba_groups
],
rrc_inst
->
cba_rnti
[
ue_mod_idP
%
rrc_inst
->
num_active_cba_groups
],
ue_mod_idP
%
rrc_inst
->
num_active_cba_groups
,
ue_mod_idP
);
ue_mod_idP
%
rrc_inst
->
num_active_cba_groups
,
ue_mod_idP
);
}
else
{
}
else
{
cba_RNTI
->
buf
[
0
]
=
0x0
;
cba_RNTI
->
buf
[
0
]
=
0x0
;
cba_RNTI
->
buf
[
1
]
=
0x0
;
cba_RNTI
->
buf
[
1
]
=
0x0
;
LOG_D
(
RRC
,
"[eNB %d] Frame %d: no cba_RNTI is configured for UE %d
\n
"
,
enb_mod_idP
,
frameP
,
ue_mod_idP
);
LOG_D
(
RRC
,
"[eNB %d] Frame %d: no cba_RNTI is configured for UE %d
\n
"
,
enb_mod_idP
,
frameP
,
ue_mod_idP
);
}
}
#endif
#endif
T
(
T_ENB_RRC_CONNECTION_RECONFIGURATION
,
T_INT
(
ctxt_pP
->
module_id
),
T_INT
(
ctxt_pP
->
frame
),
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
T
(
T_ENB_RRC_CONNECTION_RECONFIGURATION
,
// Configure SRB2
T_INT
(
ctxt_pP
->
module_id
),
/// SRB2
T_INT
(
ctxt_pP
->
frame
),
SRB_configList2
=&
ue_context_pP
->
ue_context
.
SRB_configList2
[
xid
];
T_INT
(
ctxt_pP
->
subframe
),
T_INT
(
ctxt_pP
->
rnti
));
/* Configure SRB2 */
SRB_configList2
=
&
(
ue_context_pP
->
ue_context
.
SRB_configList2
[
xid
]);
if
(
*
SRB_configList2
)
{
if
(
*
SRB_configList2
)
{
free
(
*
SRB_configList2
);
free
(
*
SRB_configList2
);
...
@@ -3726,22 +3736,19 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3726,22 +3736,19 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
SRB2_lchan_config
->
present
=
LTE_SRB_ToAddMod__logicalChannelConfig_PR_explicitValue
;
SRB2_lchan_config
->
present
=
LTE_SRB_ToAddMod__logicalChannelConfig_PR_explicitValue
;
SRB2_ul_SpecificParameters
=
CALLOC
(
1
,
sizeof
(
*
SRB2_ul_SpecificParameters
));
SRB2_ul_SpecificParameters
=
CALLOC
(
1
,
sizeof
(
*
SRB2_ul_SpecificParameters
));
SRB2_ul_SpecificParameters
->
priority
=
3
;
// let some priority for SRB1 and dedicated DRBs
SRB2_ul_SpecificParameters
->
priority
=
3
;
// let some priority for SRB1 and dedicated DRBs
SRB2_ul_SpecificParameters
->
prioritisedBitRate
=
SRB2_ul_SpecificParameters
->
prioritisedBitRate
=
LTE_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity
;
LTE_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity
;
SRB2_ul_SpecificParameters
->
bucketSizeDuration
=
LTE_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50
;
SRB2_ul_SpecificParameters
->
bucketSizeDuration
=
LTE_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50
;
/* LCG for CCCH and DCCH is 0 as defined in 36331 */
// LCG for CCCH and DCCH is 0 as defined in 36331
logicalchannelgroup
=
CALLOC
(
1
,
sizeof
(
long
));
logicalchannelgroup
=
CALLOC
(
1
,
sizeof
(
long
));
*
logicalchannelgroup
=
0
;
*
logicalchannelgroup
=
0
;
SRB2_ul_SpecificParameters
->
logicalChannelGroup
=
logicalchannelgroup
;
SRB2_ul_SpecificParameters
->
logicalChannelGroup
=
logicalchannelgroup
;
SRB2_lchan_config
->
choice
.
explicitValue
.
ul_SpecificParameters
=
SRB2_ul_SpecificParameters
;
SRB2_lchan_config
->
choice
.
explicitValue
.
ul_SpecificParameters
=
SRB2_ul_SpecificParameters
;
// this list has the configuration for SRB1 and SRB2
ASN_SEQUENCE_ADD
(
&
SRB_configList
->
list
,
SRB2_config
);
// this list has only the configuration for SRB2
ASN_SEQUENCE_ADD
(
&
(
*
SRB_configList2
)
->
list
,
SRB2_config
);
// Configure DRB
ASN_SEQUENCE_ADD
(
&
SRB_configList
->
list
,
SRB2_config
);
// this list has the configuration for SRB1 and SRB2
//*DRB_configList = CALLOC(1, sizeof(*DRB_configList));
ASN_SEQUENCE_ADD
(
&
(
*
SRB_configList2
)
->
list
,
SRB2_config
);
// this list has only the configuration for SRB2
/* Configure DRB */
// list for all the configured DRB
// list for all the configured DRB
if
(
*
DRB_configList
)
{
if
(
*
DRB_configList
)
{
free
(
*
DRB_configList
);
free
(
*
DRB_configList
);
...
@@ -3749,8 +3756,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3749,8 +3756,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
*
DRB_configList
=
CALLOC
(
1
,
sizeof
(
**
DRB_configList
));
*
DRB_configList
=
CALLOC
(
1
,
sizeof
(
**
DRB_configList
));
memset
(
*
DRB_configList
,
0
,
sizeof
(
**
DRB_configList
));
memset
(
*
DRB_configList
,
0
,
sizeof
(
**
DRB_configList
));
// list for the configured DRB for a this xid
DRB_configList2
=&
ue_context_pP
->
ue_context
.
DRB_configList2
[
xid
];
DRB_configList2
=&
ue_context_pP
->
ue_context
.
DRB_configList2
[
xid
];
// list for the configured DRB for a this xid
if
(
*
DRB_configList2
)
{
if
(
*
DRB_configList2
)
{
free
(
*
DRB_configList2
);
free
(
*
DRB_configList2
);
...
@@ -3758,17 +3765,17 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3758,17 +3765,17 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
*
DRB_configList2
=
CALLOC
(
1
,
sizeof
(
**
DRB_configList2
));
*
DRB_configList2
=
CALLOC
(
1
,
sizeof
(
**
DRB_configList2
));
memset
(
*
DRB_configList2
,
0
,
sizeof
(
**
DRB_configList2
));
memset
(
*
DRB_configList2
,
0
,
sizeof
(
**
DRB_configList2
));
/// DRB
DRB_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
));
DRB_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_config
));
DRB_config
->
eps_BearerIdentity
=
CALLOC
(
1
,
sizeof
(
long
));
DRB_config
->
eps_BearerIdentity
=
CALLOC
(
1
,
sizeof
(
long
));
*
(
DRB_config
->
eps_BearerIdentity
)
=
5L
;
// LW set to first value, allowed value 5..15, value : x+4
*
(
DRB_config
->
eps_BearerIdentity
)
=
5L
;
// LW set to first value, allowed value 5..15, value : x+4
// DRB_config->drb_Identity = (LTE_DRB_Identity_t) 1; //allowed values 1..32
// NN: this is the 1st DRB for this ue, so set it to 1
// NN: this is the 1st DRB for this ue, so set it to 1
DRB_config
->
drb_Identity
=
(
LTE_DRB_Identity_t
)
1
;
// (ue_mod_idP+1); //allowed values 1..32, value: x
DRB_config
->
drb_Identity
=
(
LTE_DRB_Identity_t
)
1
;
// (ue_mod_idP+1); //allowed values 1..32, value: x
DRB_config
->
logicalChannelIdentity
=
CALLOC
(
1
,
sizeof
(
long
));
DRB_config
->
logicalChannelIdentity
=
CALLOC
(
1
,
sizeof
(
long
));
*
(
DRB_config
->
logicalChannelIdentity
)
=
(
long
)
3
;
// value : x+2
*
(
DRB_config
->
logicalChannelIdentity
)
=
(
long
)
3
;
// value : x+2
DRB_rlc_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_rlc_config
));
DRB_rlc_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_rlc_config
));
DRB_config
->
rlc_Config
=
DRB_rlc_config
;
DRB_config
->
rlc_Config
=
DRB_rlc_config
;
#ifdef RRC_DEFAULT_RAB_IS_AM
#ifdef RRC_DEFAULT_RAB_IS_AM
DRB_rlc_config
->
present
=
LTE_RLC_Config_PR_am
;
DRB_rlc_config
->
present
=
LTE_RLC_Config_PR_am
;
DRB_rlc_config
->
choice
.
am
.
ul_AM_RLC
.
t_PollRetransmit
=
LTE_T_PollRetransmit_ms50
;
DRB_rlc_config
->
choice
.
am
.
ul_AM_RLC
.
t_PollRetransmit
=
LTE_T_PollRetransmit_ms50
;
...
@@ -3781,21 +3788,25 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3781,21 +3788,25 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
DRB_rlc_config
->
present
=
LTE_RLC_Config_PR_um_Bi_Directional
;
DRB_rlc_config
->
present
=
LTE_RLC_Config_PR_um_Bi_Directional
;
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
ul_UM_RLC
.
sn_FieldLength
=
LTE_SN_FieldLength_size10
;
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
ul_UM_RLC
.
sn_FieldLength
=
LTE_SN_FieldLength_size10
;
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
dl_UM_RLC
.
sn_FieldLength
=
LTE_SN_FieldLength_size10
;
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
dl_UM_RLC
.
sn_FieldLength
=
LTE_SN_FieldLength_size10
;
#ifdef CBA
#ifdef CBA
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
dl_UM_RLC
.
t_Reordering
=
LTE_T_Reordering_ms5
;
//T_Reordering_ms25;
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
dl_UM_RLC
.
t_Reordering
=
LTE_T_Reordering_ms5
;
//T_Reordering_ms25;
#else
#else
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
dl_UM_RLC
.
t_Reordering
=
LTE_T_Reordering_ms35
;
DRB_rlc_config
->
choice
.
um_Bi_Directional
.
dl_UM_RLC
.
t_Reordering
=
LTE_T_Reordering_ms35
;
#endif
#endif
#endif
#endif
DRB_pdcp_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_pdcp_config
));
DRB_pdcp_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_pdcp_config
));
DRB_config
->
pdcp_Config
=
DRB_pdcp_config
;
DRB_config
->
pdcp_Config
=
DRB_pdcp_config
;
DRB_pdcp_config
->
discardTimer
=
CALLOC
(
1
,
sizeof
(
long
));
DRB_pdcp_config
->
discardTimer
=
CALLOC
(
1
,
sizeof
(
long
));
*
DRB_pdcp_config
->
discardTimer
=
LTE_PDCP_Config__discardTimer_infinity
;
*
DRB_pdcp_config
->
discardTimer
=
LTE_PDCP_Config__discardTimer_infinity
;
DRB_pdcp_config
->
rlc_AM
=
NULL
;
DRB_pdcp_config
->
rlc_AM
=
NULL
;
DRB_pdcp_config
->
rlc_UM
=
NULL
;
DRB_pdcp_config
->
rlc_UM
=
NULL
;
/*
a
void gcc warnings */
/*
A
void gcc warnings */
(
void
)
PDCP_rlc_AM
;
(
void
)
PDCP_rlc_AM
;
(
void
)
PDCP_rlc_UM
;
(
void
)
PDCP_rlc_UM
;
#ifdef RRC_DEFAULT_RAB_IS_AM // EXMIMO_IOT
#ifdef RRC_DEFAULT_RAB_IS_AM // EXMIMO_IOT
PDCP_rlc_AM
=
CALLOC
(
1
,
sizeof
(
*
PDCP_rlc_AM
));
PDCP_rlc_AM
=
CALLOC
(
1
,
sizeof
(
*
PDCP_rlc_AM
));
DRB_pdcp_config
->
rlc_AM
=
PDCP_rlc_AM
;
DRB_pdcp_config
->
rlc_AM
=
PDCP_rlc_AM
;
...
@@ -3805,52 +3816,97 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3805,52 +3816,97 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
DRB_pdcp_config
->
rlc_UM
=
PDCP_rlc_UM
;
DRB_pdcp_config
->
rlc_UM
=
PDCP_rlc_UM
;
PDCP_rlc_UM
->
pdcp_SN_Size
=
LTE_PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits
;
PDCP_rlc_UM
->
pdcp_SN_Size
=
LTE_PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits
;
#endif
#endif
DRB_pdcp_config
->
headerCompression
.
present
=
LTE_PDCP_Config__headerCompression_PR_notUsed
;
DRB_pdcp_config
->
headerCompression
.
present
=
LTE_PDCP_Config__headerCompression_PR_notUsed
;
DRB_lchan_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_lchan_config
));
DRB_lchan_config
=
CALLOC
(
1
,
sizeof
(
*
DRB_lchan_config
));
DRB_config
->
logicalChannelConfig
=
DRB_lchan_config
;
DRB_config
->
logicalChannelConfig
=
DRB_lchan_config
;
DRB_ul_SpecificParameters
=
CALLOC
(
1
,
sizeof
(
*
DRB_ul_SpecificParameters
));
DRB_ul_SpecificParameters
=
CALLOC
(
1
,
sizeof
(
*
DRB_ul_SpecificParameters
));
DRB_lchan_config
->
ul_SpecificParameters
=
DRB_ul_SpecificParameters
;
DRB_lchan_config
->
ul_SpecificParameters
=
DRB_ul_SpecificParameters
;
DRB_ul_SpecificParameters
->
priority
=
12
;
// lower priority than srb1, srb2 and other dedicated bearer
DRB_ul_SpecificParameters
->
priority
=
12
;
// lower priority than srb1, srb2 and other dedicated bearer
DRB_ul_SpecificParameters
->
prioritisedBitRate
=
LTE_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8
;
DRB_ul_SpecificParameters
->
prioritisedBitRate
=
LTE_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8
;
// LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
//LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity;
DRB_ul_SpecificParameters
->
bucketSizeDuration
=
LTE_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50
;
DRB_ul_SpecificParameters
->
bucketSizeDuration
=
LTE_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50
;
// LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM)
// LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM)
logicalchannelgroup_drb
=
CALLOC
(
1
,
sizeof
(
long
));
logicalchannelgroup_drb
=
CALLOC
(
1
,
sizeof
(
long
));
*
logicalchannelgroup_drb
=
1
;
*
logicalchannelgroup_drb
=
1
;
DRB_ul_SpecificParameters
->
logicalChannelGroup
=
logicalchannelgroup_drb
;
DRB_ul_SpecificParameters
->
logicalChannelGroup
=
logicalchannelgroup_drb
;
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList
)
->
list
,
DRB_config
);
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList
)
->
list
,
DRB_config
);
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList2
)
->
list
,
DRB_config
);
ASN_SEQUENCE_ADD
(
&
(
*
DRB_configList2
)
->
list
,
DRB_config
);
//ue_context_pP->ue_context.DRB_configList2[0] = &(*DRB_configList);
/* MAC Main Config */
// The different parts of MAC main config are set below
mac_MainConfig
=
CALLOC
(
1
,
sizeof
(
*
mac_MainConfig
));
mac_MainConfig
=
CALLOC
(
1
,
sizeof
(
*
mac_MainConfig
));
// ue_context_pP->ue_context.mac_MainConfig = LTE_MAC
_MainConfig;
ue_context_pP
->
ue_context
.
mac_MainConfig
=
mac
_MainConfig
;
mac_MainConfig
->
ul_SCH_Config
=
CALLOC
(
1
,
sizeof
(
*
mac_MainConfig
->
ul_SCH_Config
));
mac_MainConfig
->
ul_SCH_Config
=
CALLOC
(
1
,
sizeof
(
*
mac_MainConfig
->
ul_SCH_Config
));
maxHARQ_Tx
=
CALLOC
(
1
,
sizeof
(
long
));
maxHARQ_Tx
=
CALLOC
(
1
,
sizeof
(
long
));
*
maxHARQ_Tx
=
LTE_MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5
;
*
maxHARQ_Tx
=
LTE_MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5
;
mac_MainConfig
->
ul_SCH_Config
->
maxHARQ_Tx
=
maxHARQ_Tx
;
mac_MainConfig
->
ul_SCH_Config
->
maxHARQ_Tx
=
maxHARQ_Tx
;
/* BSR reconfiguration */
periodicBSR_Timer
=
CALLOC
(
1
,
sizeof
(
long
));
periodicBSR_Timer
=
CALLOC
(
1
,
sizeof
(
long
));
*
periodicBSR_Timer
=
LTE_PeriodicBSR_Timer_r12_sf64
;
*
periodicBSR_Timer
=
LTE_PeriodicBSR_Timer_r12_sf64
;
//LTE_PeriodicBSR_Timer_r12_infinity; // LTE_PeriodicBSR_Timer_r12_sf64; // LTE_PeriodicBSR_Timer_r12_sf20
mac_MainConfig
->
ul_SCH_Config
->
periodicBSR_Timer
=
periodicBSR_Timer
;
mac_MainConfig
->
ul_SCH_Config
->
periodicBSR_Timer
=
periodicBSR_Timer
;
mac_MainConfig
->
ul_SCH_Config
->
retxBSR_Timer
=
LTE_RetxBSR_Timer_r12_sf320
;
mac_MainConfig
->
ul_SCH_Config
->
retxBSR_Timer
=
LTE_RetxBSR_Timer_r12_sf320
;
// LTE_RetxBSR_Timer_r12_sf320; // LTE_RetxBSR_Timer_r12_sf5120
mac_MainConfig
->
ul_SCH_Config
->
ttiBundling
=
0
;
// FALSE
mac_MainConfig
->
ul_SCH_Config
->
ttiBundling
=
0
;
// FALSE
mac_MainConfig
->
timeAlignmentTimerDedicated
=
LTE_TimeAlignmentTimer_infinity
;
mac_MainConfig
->
timeAlignmentTimerDedicated
=
LTE_TimeAlignmentTimer_infinity
;
mac_MainConfig
->
drx_Config
=
NULL
;
/* PHR reconfiguration */
mac_MainConfig
->
phr_Config
=
CALLOC
(
1
,
sizeof
(
*
mac_MainConfig
->
phr_Config
));
mac_MainConfig
->
phr_Config
=
CALLOC
(
1
,
sizeof
(
*
mac_MainConfig
->
phr_Config
));
mac_MainConfig
->
phr_Config
->
present
=
LTE_MAC_MainConfig__phr_Config_PR_setup
;
mac_MainConfig
->
phr_Config
->
present
=
LTE_MAC_MainConfig__phr_Config_PR_setup
;
mac_MainConfig
->
phr_Config
->
choice
.
setup
.
periodicPHR_Timer
=
LTE_MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20
;
// sf20 = 20 subframes
mac_MainConfig
->
phr_Config
->
choice
.
setup
.
periodicPHR_Timer
=
LTE_MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf500
;
// sf20 = 20 subframes // LTE_MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_infinity
mac_MainConfig
->
phr_Config
->
choice
.
setup
.
prohibitPHR_Timer
=
LTE_MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20
;
// sf20 = 20 subframes
mac_MainConfig
->
phr_Config
->
choice
.
setup
.
prohibitPHR_Timer
=
LTE_MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf200
;
// sf20 = 20 subframes // LTE_MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf1000
mac_MainConfig
->
phr_Config
->
choice
.
setup
.
dl_PathlossChange
=
LTE_MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1
;
// Value dB1 =1 dB, dB3 = 3 dB
mac_MainConfig
->
phr_Config
->
choice
.
setup
.
dl_PathlossChange
=
LTE_MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB3
;
// Value dB1 =1 dB, dB3 = 3 dB
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
if
(
!
NODE_IS_CU
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
node_type
))
{
/* CDRX Configuration */
// Need to check if UE is a BR UE
rnti_t
rnti
=
ue_context_pP
->
ue_id_rnti
;
module_id_t
module_id
=
ctxt_pP
->
module_id
;
int
UE_id
=
find_UE_id
(
module_id
,
rnti
);
eNB_MAC_INST
*
mac
=
RC
.
mac
[
module_id
];
UE_list_t
*
UE_list
=
&
(
mac
->
UE_list
);
if
(
UE_id
!=
-
1
)
{
if
((
rrc_inst
->
carrier
[
cc_id
].
sib1
->
tdd_Config
==
NULL
)
&&
(
UE_list
->
UE_template
[
ue_context_pP
->
ue_context
.
primaryCC_id
][
UE_id
].
rach_resource_type
==
0
))
{
// CDRX can be only configured in case of FDD and non BR UE (09/04/19)
LOG_D
(
RRC
,
"Processing the DRX configuration in RRC Connection Reconfiguration
\n
"
);
/* Process the IE drx_Config */
if
(
cc_id
<
MAX_NUM_CCs
)
{
mac_MainConfig
->
drx_Config
=
do_DrxConfig
(
module_id
,
cc_id
,
&
rrc_inst
->
configuration
,
UEcap
);
// drx_Config IE
}
else
{
LOG_E
(
RRC
,
"Invalid CC_id for DRX configuration
\n
"
);
}
/* Set timers and thresholds values in local MAC context of UE */
eNB_Config_Local_DRX
(
module_id
,
ue_context_pP
->
ue_id_rnti
,
mac_MainConfig
->
drx_Config
);
LOG_D
(
RRC
,
"DRX configured in mac main config for RRC Connection Reconfiguration
\n
"
);
}
else
{
// CDRX not implemented for TDD and LTE-M (09/04/19)
mac_MainConfig
->
drx_Config
=
NULL
;
}
}
else
{
// UE_id invalid
LOG_E
(
RRC
,
"Invalid UE_id found!
\n
"
);
mac_MainConfig
->
drx_Config
=
NULL
;
}
}
else
{
// No CDRX with the CU/DU split in this version
LOG_E
(
RRC
,
"CU/DU split activated
\n
"
);
mac_MainConfig
->
drx_Config
=
NULL
;
}
#if (LTE_RRC_VERSION >= MAKE_VERSION(9, 0, 0))
sr_ProhibitTimer_r9
=
CALLOC
(
1
,
sizeof
(
long
));
sr_ProhibitTimer_r9
=
CALLOC
(
1
,
sizeof
(
long
));
*
sr_ProhibitTimer_r9
=
0
;
// SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR
*
sr_ProhibitTimer_r9
=
0
;
// SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2
= 2*SR
mac_MainConfig
->
ext1
=
CALLOC
(
1
,
sizeof
(
struct
LTE_MAC_MainConfig__ext1
));
mac_MainConfig
->
ext1
=
CALLOC
(
1
,
sizeof
(
struct
LTE_MAC_MainConfig__ext1
));
mac_MainConfig
->
ext1
->
sr_ProhibitTimer_r9
=
sr_ProhibitTimer_r9
;
mac_MainConfig
->
ext1
->
sr_ProhibitTimer_r9
=
sr_ProhibitTimer_r9
;
//sps_RA_ConfigList_rlola = NULL;
#endif
#endif
//change the transmission mode for the primary component carrier
//
change the transmission mode for the primary component carrier
//TODO: add codebook subset restriction here
//
TODO: add codebook subset restriction here
//TODO: change TM for secondary CC in SCelltoaddmodlist
//
TODO: change TM for secondary CC in SCelltoaddmodlist
if
(
*
physicalConfigDedicated
)
{
if
(
*
physicalConfigDedicated
)
{
if
((
*
physicalConfigDedicated
)
->
antennaInfo
)
{
if
((
*
physicalConfigDedicated
)
->
antennaInfo
)
{
(
*
physicalConfigDedicated
)
->
antennaInfo
->
choice
.
explicitValue
.
transmissionMode
=
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
;
(
*
physicalConfigDedicated
)
->
antennaInfo
->
choice
.
explicitValue
.
transmissionMode
=
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
;
...
@@ -3897,19 +3953,20 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3897,19 +3953,20 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
LOG_E
(
RRC
,
"antenna_info not present in physical_config_dedicated. Not reconfiguring!
\n
"
);
LOG_E
(
RRC
,
"antenna_info not present in physical_config_dedicated. Not reconfiguring!
\n
"
);
}
}
/* CSI
Configuration through RRC
*/
/* CSI
RRC Reconfiguration
*/
if
((
*
physicalConfigDedicated
)
->
cqi_ReportConfig
!=
NULL
)
{
if
((
*
physicalConfigDedicated
)
->
cqi_ReportConfig
!=
NULL
)
{
if
((
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
==
LTE_AntennaInfoDedicated__transmissionMode_tm4
)
||
if
((
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
==
LTE_AntennaInfoDedicated__transmissionMode_tm4
)
||
(
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
==
LTE_AntennaInfoDedicated__transmissionMode_tm5
)
||
(
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
==
LTE_AntennaInfoDedicated__transmissionMode_tm5
)
||
(
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
==
LTE_AntennaInfoDedicated__transmissionMode_tm6
))
{
(
rrc_inst
->
configuration
.
radioresourceconfig
[
0
].
ue_TransmissionMode
==
LTE_AntennaInfoDedicated__transmissionMode_tm6
))
{
//feedback mode needs to be set as well
//TODO: I think this is taken into account in the PHY automatically based on the transmission mode variable
// feedback mode needs to be set as well
LOG_I
(
RRC
,
"Setting cqi aperiodic reporting mode to rm31 (hardcoded)
\n
"
);
// TODO: I think this is taken into account in the PHY automatically based on the transmission mode variable
LOG_I
(
RRC
,
"Setting cqi reporting mode to rm31 (hardcoded)
\n
"
);
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
*
((
*
physicalConfigDedicated
)
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
)
=
LTE_CQI_ReportModeAperiodic_rm31
;
*
((
*
physicalConfigDedicated
)
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
)
=
LTE_CQI_ReportModeAperiodic_rm31
;
// HLC CQI, single PMI
#else
#else
*
((
*
physicalConfigDedicated
)
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
)
=
LTE_CQI_ReportConfig__cqi_ReportModeAperiodic_rm31
;
// HLC CQI, no
PMI
*
((
*
physicalConfigDedicated
)
->
cqi_ReportConfig
->
cqi_ReportModeAperiodic
)
=
LTE_CQI_ReportConfig__cqi_ReportModeAperiodic_rm31
;
// HLC CQI, single
PMI
#endif
#endif
}
}
}
else
{
}
else
{
...
@@ -3927,9 +3984,33 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3927,9 +3984,33 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
MeasId0
->
measObjectId
=
1
;
MeasId0
->
measObjectId
=
1
;
MeasId0
->
reportConfigId
=
1
;
MeasId0
->
reportConfigId
=
1
;
ASN_SEQUENCE_ADD
(
&
MeasId_list
->
list
,
MeasId0
);
ASN_SEQUENCE_ADD
(
&
MeasId_list
->
list
,
MeasId0
);
/*
MeasId1
=
CALLOC
(
1
,
sizeof
(
*
MeasId1
));
* Add one EUTRA Measurement Object
MeasId1
->
measId
=
2
;
*/
MeasId1
->
measObjectId
=
1
;
MeasId1
->
reportConfigId
=
2
;
ASN_SEQUENCE_ADD
(
&
MeasId_list
->
list
,
MeasId1
);
MeasId2
=
CALLOC
(
1
,
sizeof
(
*
MeasId2
));
MeasId2
->
measId
=
3
;
MeasId2
->
measObjectId
=
1
;
MeasId2
->
reportConfigId
=
3
;
ASN_SEQUENCE_ADD
(
&
MeasId_list
->
list
,
MeasId2
);
MeasId3
=
CALLOC
(
1
,
sizeof
(
*
MeasId3
));
MeasId3
->
measId
=
4
;
MeasId3
->
measObjectId
=
1
;
MeasId3
->
reportConfigId
=
4
;
ASN_SEQUENCE_ADD
(
&
MeasId_list
->
list
,
MeasId3
);
MeasId4
=
CALLOC
(
1
,
sizeof
(
*
MeasId4
));
MeasId4
->
measId
=
5
;
MeasId4
->
measObjectId
=
1
;
MeasId4
->
reportConfigId
=
5
;
ASN_SEQUENCE_ADD
(
&
MeasId_list
->
list
,
MeasId4
);
MeasId5
=
CALLOC
(
1
,
sizeof
(
*
MeasId5
));
MeasId5
->
measId
=
6
;
MeasId5
->
measObjectId
=
1
;
MeasId5
->
reportConfigId
=
6
;
ASN_SEQUENCE_ADD
(
&
MeasId_list
->
list
,
MeasId5
);
// LTE_RRCConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list;
// Add one EUTRA Measurement Object
MeasObj_list
=
CALLOC
(
1
,
sizeof
(
*
MeasObj_list
));
MeasObj_list
=
CALLOC
(
1
,
sizeof
(
*
MeasObj_list
));
memset
((
void
*
)
MeasObj_list
,
0
,
sizeof
(
*
MeasObj_list
));
memset
((
void
*
)
MeasObj_list
,
0
,
sizeof
(
*
MeasObj_list
));
// Configure MeasObject
// Configure MeasObject
...
@@ -3937,64 +4018,161 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -3937,64 +4018,161 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
memset
((
void
*
)
MeasObj
,
0
,
sizeof
(
*
MeasObj
));
memset
((
void
*
)
MeasObj
,
0
,
sizeof
(
*
MeasObj
));
MeasObj
->
measObjectId
=
1
;
MeasObj
->
measObjectId
=
1
;
MeasObj
->
measObject
.
present
=
LTE_MeasObjectToAddMod__measObject_PR_measObjectEUTRA
;
MeasObj
->
measObject
.
present
=
LTE_MeasObjectToAddMod__measObject_PR_measObjectEUTRA
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
carrierFreq
=
3350
;
//band 7, 2.68GHz
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
carrierFreq
=
//MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; //band 33, 1.909GHz
to_earfcn_DL
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
configuration
.
eutra_band
[
0
],
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
configuration
.
downlink_frequency
[
0
],
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
configuration
.
N_RB_DL
[
0
]);
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
allowedMeasBandwidth
=
LTE_AllowedMeasBandwidth_mbw25
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
allowedMeasBandwidth
=
LTE_AllowedMeasBandwidth_mbw25
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
presenceAntennaPort1
=
1
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
presenceAntennaPort1
=
1
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
buf
=
CALLOC
(
1
,
sizeof
(
uint8_t
));
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
buf
=
CALLOC
(
1
,
sizeof
(
uint8_t
));
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
buf
[
0
]
=
0
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
buf
[
0
]
=
0
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
size
=
1
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
size
=
1
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
bits_unused
=
6
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
neighCellConfig
.
bits_unused
=
6
;
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
offsetFreq
=
NULL
;
// Default is 15 or 0dB
*
(
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
offsetFreq
)
=
ue_context_pP
->
ue_context
.
measurement_info
->
offsetFreq
;
// Default is 15 or 0dB
if
(
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
num_neigh_cells
>
0
)
{
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
cellsToAddModList
=
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
cellsToAddModList
=
(
LTE_CellsToAddModList_t
*
)
CALLOC
(
1
,
sizeof
(
*
CellsToAddModList
));
(
LTE_CellsToAddModList_t
*
)
CALLOC
(
1
,
sizeof
(
*
CellsToAddModList
));
CellsToAddModList
=
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
cellsToAddModList
;
CellsToAddModList
=
MeasObj
->
measObject
.
choice
.
measObjectEUTRA
.
cellsToAddModList
;
}
// Add adjacent cell lists (6 per eNB)
/* TODO: Extend to multiple carriers */
for
(
i
=
0
;
i
<
6
;
i
++
)
{
// Add adjacent cell lists (max 6 per eNB)
for
(
i
=
0
;
i
<
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
num_neigh_cells
;
i
++
)
{
CellToAdd
=
(
LTE_CellsToAddMod_t
*
)
CALLOC
(
1
,
sizeof
(
*
CellToAdd
));
CellToAdd
=
(
LTE_CellsToAddMod_t
*
)
CALLOC
(
1
,
sizeof
(
*
CellToAdd
));
CellToAdd
->
cellIndex
=
i
+
1
;
CellToAdd
->
cellIndex
=
i
+
1
;
CellToAdd
->
physCellId
=
get_adjacent_cell_id
(
ctxt_pP
->
module_id
,
i
);
CellToAdd
->
physCellId
=
RC
.
rrc
[
ctxt_pP
->
module_id
]
->
neigh_cells_id
[
i
][
0
];
//
get_adjacent_cell_id(ctxt_pP->module_id, i);
CellToAdd
->
cellIndividualOffset
=
LTE_Q_OffsetRange_dB0
;
CellToAdd
->
cellIndividualOffset
=
ue_context_pP
->
ue_context
.
measurement_info
->
cellIndividualOffset
[
i
+
1
]
;
ASN_SEQUENCE_ADD
(
&
CellsToAddModList
->
list
,
CellToAdd
);
ASN_SEQUENCE_ADD
(
&
CellsToAddModList
->
list
,
CellToAdd
);
}
}
ASN_SEQUENCE_ADD
(
&
MeasObj_list
->
list
,
MeasObj
);
ASN_SEQUENCE_ADD
(
&
MeasObj_list
->
list
,
MeasObj
);
// LTE_RRCConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list;
// LTE_RRCConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list;
// Report Configurations for periodical, A1-A5 events
// Report Configurations for periodical, A1-A5 events
/* RRC Strategy Measurement */
if
(
strcmp
(
"one_shot"
,
trig_param
->
trigger_policy
)
==
0
)
{
trig_param
->
report_interval
=
0
;
trig_param
->
report_amount
=
0
;
}
else
if
(
strcmp
(
"event_driven"
,
trig_param
->
trigger_policy
)
==
0
)
{
trig_param
->
report_interval
=
6
;
trig_param
->
report_amount
=
2
;
}
else
if
(
strcmp
(
"periodical"
,
trig_param
->
trigger_policy
)
==
0
)
{
trig_param
->
report_interval
=
1
;
trig_param
->
report_amount
=
7
;
}
else
{
LOG_E
(
FLEXRAN_AGENT
,
"There is something wrong on RRC agent!"
);
}
ReportConfig_list
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_list
));
ReportConfig_list
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_list
));
ReportConfig_per
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_per
));
ReportConfig_per
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_per
));
// Periodical Measurement Report
ReportConfig_A1
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_A1
));
ReportConfig_A2
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_A2
));
ReportConfig_A3
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_A3
));
ReportConfig_A4
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_A4
));
ReportConfig_A5
=
CALLOC
(
1
,
sizeof
(
*
ReportConfig_A5
));
ReportConfig_per
->
reportConfigId
=
1
;
ReportConfig_per
->
reportConfigId
=
1
;
ReportConfig_per
->
reportConfig
.
present
=
LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA
;
ReportConfig_per
->
reportConfig
.
present
=
LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
present
=
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
present
=
LTE_ReportConfigEUTRA__triggerType_PR_periodical
;
LTE_ReportConfigEUTRA__triggerType_PR_periodical
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
periodical
.
purpose
=
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
periodical
.
purpose
=
LTE_ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells
;
LTE_ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells
;
// ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger = TimeToTrigger_ms40;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerQuantity
=
LTE_ReportConfigEUTRA__triggerQuantity_rsrp
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerQuantity
=
LTE_ReportConfigEUTRA__triggerQuantity_rsrp
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportQuantity
=
LTE_ReportConfigEUTRA__reportQuantity_both
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportQuantity
=
LTE_ReportConfigEUTRA__reportQuantity_both
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
maxReportCells
=
2
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
maxReportCells
=
2
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportInterval
=
trig_param
->
report_interval
;
//ReportInterval_ms2048; // RRC counter frame- ms1024 is 1ms
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportInterval
=
LTE_ReportInterval_ms120
;
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportAmount
=
trig_param
->
report_amount
;
//ReportConfigEUTRA__reportAmount_r2; // put r1 to see once, r2 for 2 times and ...
ReportConfig_per
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportAmount
=
LTE_ReportConfigEUTRA__reportAmount_infinity
;
ASN_SEQUENCE_ADD
(
&
ReportConfig_list
->
list
,
ReportConfig_per
);
ASN_SEQUENCE_ADD
(
&
ReportConfig_list
->
list
,
ReportConfig_per
);
ReportConfig_A1
->
reportConfigId
=
2
;
ReportConfig_A1
->
reportConfig
.
present
=
LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
present
=
LTE_ReportConfigEUTRA__triggerType_PR_event
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
present
=
LTE_ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA1
.
a1_Threshold
.
present
=
LTE_ThresholdEUTRA_PR_threshold_RSRP
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA1
.
a1_Threshold
.
choice
.
threshold_RSRP
=
10
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerQuantity
=
LTE_ReportConfigEUTRA__triggerQuantity_rsrp
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportQuantity
=
LTE_ReportConfigEUTRA__reportQuantity_both
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
maxReportCells
=
2
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportInterval
=
LTE_ReportInterval_ms120
;
ReportConfig_A1
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportAmount
=
LTE_ReportConfigEUTRA__reportAmount_infinity
;
ASN_SEQUENCE_ADD
(
&
ReportConfig_list
->
list
,
ReportConfig_A1
);
//if (ho_state == 1 /*HO_MEASURMENT */ ) {
LOG_I
(
RRC
,
"[eNB %d] frame %d: requesting A2, A3, A4, and A5 event reporting
\n
"
,
ctxt_pP
->
module_id
,
ctxt_pP
->
frame
);
ReportConfig_A2
->
reportConfigId
=
3
;
ReportConfig_A2
->
reportConfig
.
present
=
LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
present
=
LTE_ReportConfigEUTRA__triggerType_PR_event
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
present
=
LTE_ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA2
.
a2_Threshold
.
present
=
LTE_ThresholdEUTRA_PR_threshold_RSRP
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA2
.
a2_Threshold
.
choice
.
threshold_RSRP
=
10
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerQuantity
=
LTE_ReportConfigEUTRA__triggerQuantity_rsrp
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportQuantity
=
LTE_ReportConfigEUTRA__reportQuantity_both
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
maxReportCells
=
2
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportInterval
=
LTE_ReportInterval_ms120
;
ReportConfig_A2
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportAmount
=
LTE_ReportConfigEUTRA__reportAmount_infinity
;
ASN_SEQUENCE_ADD
(
&
ReportConfig_list
->
list
,
ReportConfig_A2
);
ReportConfig_A3
->
reportConfigId
=
4
;
ReportConfig_A3
->
reportConfig
.
present
=
LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
present
=
LTE_ReportConfigEUTRA__triggerType_PR_event
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
present
=
LTE_ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA3
.
a3_Offset
=
ue_context_pP
->
ue_context
.
measurement_info
->
events
->
a3_event
->
a3_offset
;
//10;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA3
.
reportOnLeave
=
ue_context_pP
->
ue_context
.
measurement_info
->
events
->
a3_event
->
reportOnLeave
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerQuantity
=
LTE_ReportConfigEUTRA__triggerQuantity_rsrp
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportQuantity
=
LTE_ReportConfigEUTRA__reportQuantity_both
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
maxReportCells
=
ue_context_pP
->
ue_context
.
measurement_info
->
events
->
a3_event
->
maxReportCells
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportInterval
=
LTE_ReportInterval_ms120
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportAmount
=
LTE_ReportConfigEUTRA__reportAmount_infinity
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
hysteresis
=
ue_context_pP
->
ue_context
.
measurement_info
->
events
->
a3_event
->
hysteresis
;
ReportConfig_A3
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
timeToTrigger
=
ue_context_pP
->
ue_context
.
measurement_info
->
events
->
a3_event
->
timeToTrigger
;
ASN_SEQUENCE_ADD
(
&
ReportConfig_list
->
list
,
ReportConfig_A3
);
ReportConfig_A4
->
reportConfigId
=
5
;
ReportConfig_A4
->
reportConfig
.
present
=
LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
present
=
LTE_ReportConfigEUTRA__triggerType_PR_event
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
present
=
LTE_ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA4
.
a4_Threshold
.
present
=
LTE_ThresholdEUTRA_PR_threshold_RSRP
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA4
.
a4_Threshold
.
choice
.
threshold_RSRP
=
10
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerQuantity
=
LTE_ReportConfigEUTRA__triggerQuantity_rsrp
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportQuantity
=
LTE_ReportConfigEUTRA__reportQuantity_both
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
maxReportCells
=
2
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportInterval
=
LTE_ReportInterval_ms120
;
ReportConfig_A4
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportAmount
=
LTE_ReportConfigEUTRA__reportAmount_infinity
;
ASN_SEQUENCE_ADD
(
&
ReportConfig_list
->
list
,
ReportConfig_A4
);
ReportConfig_A5
->
reportConfigId
=
6
;
ReportConfig_A5
->
reportConfig
.
present
=
LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
present
=
LTE_ReportConfigEUTRA__triggerType_PR_event
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
present
=
LTE_ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA5
.
a5_Threshold1
.
present
=
LTE_ThresholdEUTRA_PR_threshold_RSRP
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA5
.
a5_Threshold2
.
present
=
LTE_ThresholdEUTRA_PR_threshold_RSRP
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA5
.
a5_Threshold1
.
choice
.
threshold_RSRP
=
10
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerType
.
choice
.
event
.
eventId
.
choice
.
eventA5
.
a5_Threshold2
.
choice
.
threshold_RSRP
=
10
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
triggerQuantity
=
LTE_ReportConfigEUTRA__triggerQuantity_rsrp
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportQuantity
=
LTE_ReportConfigEUTRA__reportQuantity_both
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
maxReportCells
=
2
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportInterval
=
LTE_ReportInterval_ms120
;
ReportConfig_A5
->
reportConfig
.
choice
.
reportConfigEUTRA
.
reportAmount
=
LTE_ReportConfigEUTRA__reportAmount_infinity
;
ASN_SEQUENCE_ADD
(
&
ReportConfig_list
->
list
,
ReportConfig_A5
);
// LTE_RRCConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list;
rsrp
=
CALLOC
(
1
,
sizeof
(
LTE_RSRP_Range_t
));
*
rsrp
=
20
;
Sparams
=
CALLOC
(
1
,
sizeof
(
*
Sparams
));
Sparams
->
present
=
LTE_MeasConfig__speedStatePars_PR_setup
;
Sparams
->
choice
.
setup
.
timeToTrigger_SF
.
sf_High
=
LTE_SpeedStateScaleFactors__sf_Medium_oDot75
;
Sparams
->
choice
.
setup
.
timeToTrigger_SF
.
sf_Medium
=
LTE_SpeedStateScaleFactors__sf_High_oDot5
;
Sparams
->
choice
.
setup
.
mobilityStateParameters
.
n_CellChangeHigh
=
10
;
Sparams
->
choice
.
setup
.
mobilityStateParameters
.
n_CellChangeMedium
=
5
;
Sparams
->
choice
.
setup
.
mobilityStateParameters
.
t_Evaluation
=
LTE_MobilityStateParameters__t_Evaluation_s60
;
Sparams
->
choice
.
setup
.
mobilityStateParameters
.
t_HystNormal
=
LTE_MobilityStateParameters__t_HystNormal_s120
;
quantityConfig
=
CALLOC
(
1
,
sizeof
(
*
quantityConfig
));
quantityConfig
=
CALLOC
(
1
,
sizeof
(
*
quantityConfig
));
memset
((
void
*
)
quantityConfig
,
0
,
sizeof
(
*
quantityConfig
));
memset
((
void
*
)
quantityConfig
,
0
,
sizeof
(
*
quantityConfig
));
quantityConfig
->
quantityConfigEUTRA
=
CALLOC
(
1
,
sizeof
(
struct
LTE_QuantityConfigEUTRA
));
quantityConfig
->
quantityConfigEUTRA
=
CALLOC
(
1
,
sizeof
(
struct
LTE_QuantityConfigEUTRA
));
...
@@ -4006,8 +4184,9 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -4006,8 +4184,9 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
CALLOC
(
1
,
sizeof
(
*
(
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRP
)));
CALLOC
(
1
,
sizeof
(
*
(
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRP
)));
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
=
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
=
CALLOC
(
1
,
sizeof
(
*
(
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
)));
CALLOC
(
1
,
sizeof
(
*
(
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
)));
*
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRP
=
LTE_FilterCoefficient_fc4
;
*
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRP
=
ue_context_pP
->
ue_context
.
measurement_info
->
filterCoefficientRSRP
;
*
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
=
LTE_FilterCoefficient_fc4
;
*
quantityConfig
->
quantityConfigEUTRA
->
filterCoefficientRSRQ
=
ue_context_pP
->
ue_context
.
measurement_info
->
filterCoefficientRSRQ
;
/* Initialize NAS list */
/* Initialize NAS list */
dedicatedInfoNASList
=
CALLOC
(
1
,
sizeof
(
struct
LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList
));
dedicatedInfoNASList
=
CALLOC
(
1
,
sizeof
(
struct
LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList
));
...
@@ -4023,12 +4202,13 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -4023,12 +4202,13 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
}
}
/* TODO parameters yet to process ... */
/* TODO parameters yet to process ... */
//
{
{
// ue_context_pP->ue_context.e_rab[i].param.qos;
// ue_context_pP->ue_context.e_rab[i].param.qos;
// ue_context_pP->ue_context.e_rab[i].param.sgw_addr;
// ue_context_pP->ue_context.e_rab[i].param.sgw_addr;
// ue_context_pP->ue_context.e_rab[i].param.gtp_teid;
// ue_context_pP->ue_context.e_rab[i].param.gtp_teid;
// }
}
/* TODO should test if e RAB are Ok before! */
/* TODO should test if e RAB are OK before! */
ue_context_pP
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_DONE
;
ue_context_pP
->
ue_context
.
e_rab
[
i
].
status
=
E_RAB_STATUS_DONE
;
LOG_D
(
RRC
,
"setting the status for the default DRB (index %d) to (%d,%s)
\n
"
,
LOG_D
(
RRC
,
"setting the status for the default DRB (index %d) to (%d,%s)
\n
"
,
i
,
ue_context_pP
->
ue_context
.
e_rab
[
i
].
status
,
"E_RAB_STATUS_DONE"
);
i
,
ue_context_pP
->
ue_context
.
e_rab
[
i
].
status
,
"E_RAB_STATUS_DONE"
);
...
@@ -4044,38 +4224,35 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -4044,38 +4224,35 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
RC
.
rrc
[
ENB_INSTANCE_TO_MODULE_ID
(
ctxt_pP
->
instance
)]
->
configuration
.
enable_measurement_reports
;
RC
.
rrc
[
ENB_INSTANCE_TO_MODULE_ID
(
ctxt_pP
->
instance
)]
->
configuration
.
enable_measurement_reports
;
memset
(
buffer
,
0
,
RRC_BUF_SIZE
);
memset
(
buffer
,
0
,
RRC_BUF_SIZE
);
size
=
do_RRCConnectionReconfiguration
(
ctxt_pP
,
size
=
do_RRCConnectionReconfiguration
(
ctxt_pP
,
buffer
,
buffer
,
xid
,
//Transaction_id,
xid
,
// Transaction_id,
(
LTE_SRB_ToAddModList_t
*
)
NULL
,
// SRB_configList
(
LTE_SRB_ToAddModList_t
*
)
*
SRB_configList2
,
// SRB_configList
(
LTE_DRB_ToAddModList_t
*
)
NULL
,
(
LTE_DRB_ToAddModList_t
*
)
*
DRB_configList
,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
// DRB2_list,
(
LTE_DRB_ToReleaseList_t
*
)
NULL
,
// DRB2_list,
(
struct
LTE_SPS_Config
*
)
NULL
,
// *sps_Config,
(
struct
LTE_SPS_Config
*
)
NULL
,
// *sps_Config,
(
struct
LTE_PhysicalConfigDedicated
*
)
*
physicalConfigDedicated
,
(
struct
LTE_PhysicalConfigDedicated
*
)
*
physicalConfigDedicated
,
// #ifdef EXMIMO_IOT
measurements_enabled
?
(
LTE_MeasObjectToAddModList_t
*
)
MeasObj_list
:
NULL
,
// NULL, NULL, NULL,NULL,
measurements_enabled
?
(
LTE_ReportConfigToAddModList_t
*
)
ReportConfig_list
:
NULL
,
// #else
measurements_enabled
?
(
LTE_QuantityConfig_t
*
)
quantityConfig
:
NULL
,
measurements_enabled
?
(
LTE_MeasObjectToAddModList_t
*
)
MeasObj_list
:
NULL
,
measurements_enabled
?
(
LTE_MeasIdToAddModList_t
*
)
MeasId_list
:
NULL
,
measurements_enabled
?
(
LTE_ReportConfigToAddModList_t
*
)
ReportConfig_list
:
NULL
,
(
LTE_MAC_MainConfig_t
*
)
mac_MainConfig
,
measurements_enabled
?
(
LTE_QuantityConfig_t
*
)
quantityConfig
:
NULL
,
(
LTE_MeasGapConfig_t
*
)
NULL
,
measurements_enabled
?
(
LTE_MeasIdToAddModList_t
*
)
MeasId_list
:
NULL
,
(
LTE_MobilityControlInfo_t
*
)
NULL
,
// #endif
(
LTE_SecurityConfigHO_t
*
)
NULL
,
(
LTE_MAC_MainConfig_t
*
)
mac_MainConfig
,
(
struct
LTE_MeasConfig__speedStatePars
*
)
Sparams
,
(
LTE_MeasGapConfig_t
*
)
NULL
,
(
LTE_RSRP_Range_t
*
)
rsrp
,
(
LTE_MobilityControlInfo_t
*
)
NULL
,
(
LTE_C_RNTI_t
*
)
cba_RNTI
,
(
LTE_SecurityConfigHO_t
*
)
NULL
,
(
struct
LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList
*
)
dedicatedInfoNASList
,
(
struct
LTE_MeasConfig__speedStatePars
*
)
Sparams
,
(
LTE_SL_CommConfig_r12_t
*
)
NULL
,
(
LTE_RSRP_Range_t
*
)
rsrp
,
(
LTE_SL_DiscConfig_r12_t
*
)
NULL
(
LTE_C_RNTI_t
*
)
cba_RNTI
,
(
struct
LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList
*
)
dedicatedInfoNASList
,
(
LTE_SL_CommConfig_r12_t
*
)
NULL
,
(
LTE_SL_DiscConfig_r12_t
*
)
NULL
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
#if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
,
(
LTE_SCellToAddMod_r10_t
*
)
NULL
,
(
LTE_SCellToAddMod_r10_t
*
)
NULL
#endif
#endif
);
);
LOG_DUMPMSG
(
RRC
,
DEBUG_RRC
,(
char
*
)
buffer
,
size
,
"[MSG] RRC Connection Reconfiguration
\n
"
);
LOG_DUMPMSG
(
RRC
,
DEBUG_RRC
,(
char
*
)
buffer
,
size
,
"[MSG] RRC Connection Reconfiguration
\n
"
);
/* Free all NAS PDUs */
/* Free all NAS PDUs */
for
(
i
=
0
;
i
<
ue_context_pP
->
ue_context
.
nb_of_e_rabs
;
i
++
)
{
for
(
i
=
0
;
i
<
ue_context_pP
->
ue_context
.
nb_of_e_rabs
;
i
++
)
{
...
@@ -4086,14 +4263,22 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -4086,14 +4263,22 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
}
}
}
}
LOG_I
(
RRC
,
LOG_I
(
RRC
,
"[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate LTE_RRCConnectionReconfiguration (bytes %d, UE id %x)
\n
"
,
"[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate LTE_RRCConnectionReconfiguration (bytes %d, UE id %x)
\n
"
,
ctxt_pP
->
module_id
,
ctxt_pP
->
module_id
,
ctxt_pP
->
frame
,
size
,
ue_context_pP
->
ue_context
.
rnti
);
ctxt_pP
->
frame
,
LOG_D
(
RRC
,
size
,
"[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]
\n
"
,
ue_context_pP
->
ue_context
.
rnti
);
ctxt_pP
->
frame
,
ctxt_pP
->
module_id
,
size
,
ue_context_pP
->
ue_context
.
rnti
,
rrc_eNB_mui
,
ctxt_pP
->
module_id
,
DCCH
);
MSC_LOG_TX_MESSAGE
(
LOG_D
(
RRC
,
"[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]
\n
"
,
MSC_RRC_ENB
,
ctxt_pP
->
frame
,
ctxt_pP
->
module_id
,
size
,
ue_context_pP
->
ue_context
.
rnti
,
rrc_eNB_mui
,
ctxt_pP
->
module_id
,
DCCH
);
MSC_LOG_TX_MESSAGE
(
MSC_RRC_ENB
,
MSC_RRC_UE
,
MSC_RRC_UE
,
buffer
,
buffer
,
size
,
size
,
...
@@ -4102,8 +4287,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -4102,8 +4287,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
ue_context_pP
->
ue_context
.
rnti
,
ue_context_pP
->
ue_context
.
rnti
,
rrc_eNB_mui
,
rrc_eNB_mui
,
size
);
size
);
rrc_data_req
(
ctxt_pP
,
rrc_data_req
(
ctxt_pP
,
DCCH
,
DCCH
,
rrc_eNB_mui
++
,
rrc_eNB_mui
++
,
SDU_CONFIRM_NO
,
SDU_CONFIRM_NO
,
...
@@ -4133,7 +4318,6 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
...
@@ -4133,7 +4318,6 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
mac_MainConfig
=
NULL
;
mac_MainConfig
=
NULL
;
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
int
int
rrc_eNB_generate_RRCConnectionReconfiguration_SCell
(
rrc_eNB_generate_RRCConnectionReconfiguration_SCell
(
...
...
openair2/RRC/LTE/rrc_proto.h
View file @
1b90c4a0
...
@@ -306,8 +306,7 @@ void
...
@@ -306,8 +306,7 @@ void
flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration
(
flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_eNB_ue_context_t
*
const
ue_context_pP
,
rrc_eNB_ue_context_t
*
const
ue_context_pP
,
const
uint8_t
ho_state
,
const
uint8_t
ho_state
agent_reconf_rrc
*
trig_param
);
);
void
void
rrc_eNB_generate_HO_RRCConnectionReconfiguration
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
rrc_eNB_generate_HO_RRCConnectionReconfiguration
(
const
protocol_ctxt_t
*
const
ctxt_pP
,
...
...
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