Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
d6b7e02d
Commit
d6b7e02d
authored
Feb 18, 2016
by
alexandr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bugs fixed in PHY/MAC/RRC HO process + X2 features added
parent
ca86e1f0
Changes
29
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
402 additions
and
146 deletions
+402
-146
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+4
-3
cmake_targets/oaisim_noS1_build_oai/CMakeLists.template
cmake_targets/oaisim_noS1_build_oai/CMakeLists.template
+3
-1
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+41
-2
openair1/PHY/LTE_TRANSPORT/pucch.c
openair1/PHY/LTE_TRANSPORT/pucch.c
+2
-2
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+1
-0
openair2/ENB_APP/enb_app.c
openair2/ENB_APP/enb_app.c
+4
-1
openair2/LAYER2/MAC/config.c
openair2/LAYER2/MAC/config.c
+2
-0
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+6
-2
openair2/LAYER2/MAC/main.c
openair2/LAYER2/MAC/main.c
+1
-0
openair2/LAYER2/MAC/proto.h
openair2/LAYER2/MAC/proto.h
+2
-0
openair2/PHY_INTERFACE/defs.h
openair2/PHY_INTERFACE/defs.h
+1
-1
openair2/RRC/LITE/L2_interface.c
openair2/RRC/LITE/L2_interface.c
+1
-1
openair2/RRC/LITE/rrc_UE.c
openair2/RRC/LITE/rrc_UE.c
+64
-65
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+4
-1
openair2/UTIL/LOG/log.c
openair2/UTIL/LOG/log.c
+8
-0
openair2/X2AP/x2ap_common.h
openair2/X2AP/x2ap_common.h
+4
-0
openair2/X2AP/x2ap_eNB.c
openair2/X2AP/x2ap_eNB.c
+101
-11
openair2/X2AP/x2ap_eNB_decoder.c
openair2/X2AP/x2ap_eNB_decoder.c
+16
-2
openair2/X2AP/x2ap_eNB_decoder.h
openair2/X2AP/x2ap_eNB_decoder.h
+1
-1
openair2/X2AP/x2ap_eNB_defs.h
openair2/X2AP/x2ap_eNB_defs.h
+2
-0
openair2/X2AP/x2ap_eNB_encoder.c
openair2/X2AP/x2ap_eNB_encoder.c
+6
-3
openair2/X2AP/x2ap_eNB_generate_messages.c
openair2/X2AP/x2ap_eNB_generate_messages.c
+15
-4
openair2/X2AP/x2ap_eNB_handler.c
openair2/X2AP/x2ap_eNB_handler.c
+1
-1
openair2/X2AP/x2ap_eNB_management_procedures.c
openair2/X2AP/x2ap_eNB_management_procedures.c
+43
-11
openair2/X2AP/x2ap_eNB_management_procedures.h
openair2/X2AP/x2ap_eNB_management_procedures.h
+4
-0
openair3/UTILS/conversions.h
openair3/UTILS/conversions.h
+1
-1
targets/COMMON/create_tasks.c
targets/COMMON/create_tasks.c
+8
-7
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
...PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+24
-24
targets/SIMU/EXAMPLES/OSD/WEBXML/template_42.xml
targets/SIMU/EXAMPLES/OSD/WEBXML/template_42.xml
+32
-2
No files found.
cmake_targets/CMakeLists.txt
View file @
d6b7e02d
...
...
@@ -119,6 +119,7 @@ endmacro(add_list_string_option)
####################################################
# compilation flags
#############################################
#set(CMAKE_BUILD_TYPE "Debug")
if
(
CMAKE_BUILD_TYPE STREQUAL
""
)
set
(
CMAKE_BUILD_TYPE
"RelWithDebInfo"
)
endif
()
...
...
@@ -616,7 +617,7 @@ add_boolean_option(RRC_DEFAULT_RAB_IS_AM False "Otherwise it is UM, confi
##########################
# X2AP LAYER OPTIONS
##########################
add_boolean_option
(
ENABLE_USE_X2 False
"Enable X2 interface for X2 hanodover"
)
add_boolean_option
(
ENABLE_USE_X2 False
"Enable X2 interface for X2 hanodover"
)
##########################
# PROJECTS (IST, FRENCH COLL., etc)
...
...
@@ -1617,11 +1618,11 @@ add_executable(oaisim_nos1
target_include_directories
(
oaisim_nos1 PUBLIC
${
OPENAIR_TARGETS
}
/SIMU/USER
)
target_link_libraries
(
oaisim_nos1
-Wl,--start-group
RRC_LIB SECU_CN UTIL HASHTABLE SCHED_LIB PHY LFDS
${
MSC_LIB
}
L2
${
RAL_LIB
}
SIMU SIMU_ETH SECU_OSA
${
ITTI_LIB
}
${
MIH_LIB
}
${
X2AP_LIB
}
${
X2AP_ENB
}
RRC_LIB SECU_CN UTIL HASHTABLE SCHED_LIB PHY LFDS
${
MSC_LIB
}
L2
${
RAL_LIB
}
SIMU SIMU_ETH SECU_OSA
${
ITTI_LIB
}
${
MIH_LIB
}
${
X2AP_LIB
}
${
X2AP_ENB
}
SCTP_CLIENT
-Wl,--end-group
)
target_link_libraries
(
oaisim_nos1
${
LIBXML2_LIBRARIES
}
${
LAPACK_LIBRARIES
}
)
target_link_libraries
(
oaisim_nos1 pthread m
${
CONFIG_LIBRARIES
}
rt crypt
${
CRYPTO_LIBRARIES
}
${
OPENSSL_LIBRARIES
}
${
NETTLE_LIBRARIES
}
${
option_HW_lib
}
target_link_libraries
(
oaisim_nos1 pthread m
${
CONFIG_LIBRARIES
}
rt crypt
${
CRYPTO_LIBRARIES
}
${
OPENSSL_LIBRARIES
}
${
NETTLE_LIBRARIES
}
${
option_HW_lib
}
sctp
${
ATLAS_LIBRARIES
}
${
XFORMS_LIBRARIES
}
${
OPENPGM_LIBRARIES
}
)
#Force link with forms, regardless XFORMS option
target_link_libraries
(
oaisim_nos1 forms
)
...
...
cmake_targets/oaisim_noS1_build_oai/CMakeLists.template
View file @
d6b7e02d
cmake_minimum_required(VERSION 2.8)
set (ENABLE_USE_X2 True)
set ( CMAKE_BUILD_TYPE "RelWithDebInfo" )
set ( ADDR_CONF False )
set ( DEBUG_OMG False )
...
...
@@ -19,7 +21,7 @@ set ( ENABLE_USE_MME False )
set ( ENABLE_USE_RAW_SOCKET_FOR_SGI False)
set ( ENABLE_VCD_FIFO False )
set ( ENB_MODE True )
set ( EXMIMO_IOT
Tru
e )
set ( EXMIMO_IOT
Fals
e )
set ( HARD_RT False )
set ( JUMBO_FRAME True )
set ( LARGE_SCALE False )
...
...
openair1/PHY/INIT/lte_init.c
View file @
d6b7e02d
...
...
@@ -601,8 +601,8 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility
else
lte_frame_parms
->
nb_antennas_tx
=
1
;
//PHICH
if
(
radioResourceConfigCommon
->
antennaInfoCommon
)
{
//PHICH
(check if long to enum conversion is valid)
if
(
radioResourceConfigCommon
->
phich_Config
)
{
lte_frame_parms
->
phich_config_common
.
phich_resource
=
radioResourceConfigCommon
->
phich_Config
->
phich_Resource
;
lte_frame_parms
->
phich_config_common
.
phich_duration
=
radioResourceConfigCommon
->
phich_Config
->
phich_Duration
;
}
...
...
@@ -621,6 +621,9 @@ void phy_config_afterHO_ue(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_id, Mobility
PHY_vars_UE_g
[
Mod_id
][
CC_id
]
->
lte_ue_pdcch_vars
[
eNB_id
]
->
crnti
=
mobilityControlInfo
->
newUE_Identity
.
buf
[
0
]
|
(
mobilityControlInfo
->
newUE_Identity
.
buf
[
1
]
<<
8
);
// Update channels
PHY_vars_UE_g
[
Mod_id
][
CC_id
]
->
dlsch_ue
[
eNB_id
][
CC_id
]
->
rnti
=
mobilityControlInfo
->
newUE_Identity
.
buf
[
0
]
|
(
mobilityControlInfo
->
newUE_Identity
.
buf
[
1
]
<<
8
);
PHY_vars_UE_g
[
Mod_id
][
CC_id
]
->
ulsch_ue
[
eNB_id
]
->
rnti
=
mobilityControlInfo
->
newUE_Identity
.
buf
[
0
]
|
(
mobilityControlInfo
->
newUE_Identity
.
buf
[
1
]
<<
8
);
}
if
(
ho_failed
)
{
...
...
@@ -1481,3 +1484,39 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB,
return
(
0
);
}
// Configure ue state in case of handover
void
phy_config_ue_state_ho
(
uint8_t
Mod_id
,
uint8_t
CC_id
,
uint16_t
rnti
){
uint32_t
k
,
j
;
int
UE_id
=
find_UE_id
(
Mod_id
,
rnti
);
if
(
UE_id
==-
1
){
printf
(
"Program exited: phy_config_ue_state_ho: UE does not exist
\n
"
);
exit
(
-
1
);
}
LOG_I
(
PHY
,
"ho called for eNB %d CC %d rnti %x UE_id %d
\n
"
,
Mod_id
,
CC_id
,
rnti
,
UE_id
);
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
mode
=
PUSCH
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
ulsch_eNB
[
UE_id
]
->
Msg3_flag
=
0
;
// HARQ processes
for
(
k
=
0
;
k
<
8
;
k
++
){
//harq_processes
for
(
j
=
0
;
j
<
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
dlsch_eNB
[
UE_id
][
0
]
->
Mdlharq
;
j
++
)
{
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
dlsch_NAK
[
k
][
j
]
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
dlsch_ACK
[
k
][
j
]
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
dlsch_trials
[
k
][
j
]
=
0
;
}
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
dlsch_l2_errors
[
k
]
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
ulsch_errors
[
k
]
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
ulsch_consecutive_errors
=
0
;
for
(
j
=
0
;
j
<
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
ulsch_eNB
[
UE_id
]
->
Mdlharq
;
j
++
)
{
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
ulsch_decoding_attempts
[
k
][
j
]
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
ulsch_decoding_attempts_last
[
k
][
j
]
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
ulsch_round_errors
[
k
][
j
]
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
ulsch_round_fer
[
k
][
j
]
=
0
;
}
}
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
dlsch_sliding_cnt
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
dlsch_NAK_round0
=
0
;
PHY_vars_eNB_g
[
Mod_id
][
CC_id
]
->
eNB_UE_stats
[
UE_id
].
dlsch_mcs_offset
=
0
;
}
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
d6b7e02d
...
...
@@ -42,8 +42,8 @@
#include "LAYER2/MAC/extern.h"
//uint8_t ncs_cell[20][7];
//
#define DEBUG_PUCCH_TX
//
#define DEBUG_PUCCH_RX
#define DEBUG_PUCCH_TX
#define DEBUG_PUCCH_RX
int16_t
cfo_pucch_np
[
24
*
7
]
=
{
20787
,
-
25330
,
27244
,
-
18205
,
31356
,
-
9512
,
32767
,
0
,
31356
,
9511
,
27244
,
18204
,
20787
,
25329
,
27244
,
-
18205
,
30272
,
-
12540
,
32137
,
-
6393
,
32767
,
0
,
32137
,
6392
,
30272
,
12539
,
27244
,
18204
,
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
d6b7e02d
...
...
@@ -3751,6 +3751,7 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_
phy_vars_eNB
->
eNB_UE_stats
[
i
].
crnti
);
remove_ue
(
phy_vars_eNB
->
eNB_UE_stats
[
i
].
crnti
,
phy_vars_eNB
,
abstraction_flag
);
phy_vars_eNB
->
ulsch_eNB
[(
uint32_t
)
i
]
->
Msg3_active
=
0
;
/*this is a bug: we have to break here*/
}
/*
...
...
openair2/ENB_APP/enb_app.c
View file @
d6b7e02d
...
...
@@ -381,7 +381,7 @@ void *eNB_app_task(void *args_p)
itti_mark_task_ready
(
TASK_ENB_APP
);
# if defined(ENABLE_
USE_MME
)
# if defined(ENABLE_
ITTI
)
# if defined(OAI_EMU)
enb_nb
=
oai_emulation
.
info
.
nb_enb_local
;
enb_id_start
=
oai_emulation
.
info
.
first_enb_local
;
...
...
@@ -415,6 +415,9 @@ void *eNB_app_task(void *args_p)
# endif
# if defined(ENABLE_USE_X2)
enb_nb
=
oai_emulation
.
info
.
nb_enb_local
;
enb_id_start
=
oai_emulation
.
info
.
first_enb_local
;
enb_id_end
=
oai_emulation
.
info
.
first_enb_local
+
enb_nb
;
/* Try to register each eNB with each other */
x2_registered_enb
=
0
;
x2_register_enb_pending
=
eNB_app_register_x2
(
enb_id_start
,
enb_id_end
,
enb_properties_p
);
...
...
openair2/LAYER2/MAC/config.c
View file @
d6b7e02d
...
...
@@ -261,8 +261,10 @@ rrc_mac_config_req(
if
(
physicalConfigDedicated
!=
NULL
)
{
if
(
eNB_flagP
==
1
)
{
printf
(
"PHY-config-debug-enb
\n
"
);
mac_xface
->
phy_config_dedicated_eNB
(
Mod_id
,
CC_id
,
UE_RNTI
(
Mod_id
,
UE_id
),
physicalConfigDedicated
);
}
else
{
printf
(
"PHY-config-debug-ue
\n
"
);
mac_xface
->
phy_config_dedicated_ue
(
Mod_id
,
0
,
eNB_index
,
physicalConfigDedicated
);
UE_mac_inst
[
Mod_id
].
physicalConfigDedicated
=
physicalConfigDedicated
;
// for SR proc
}
...
...
openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
View file @
d6b7e02d
...
...
@@ -130,13 +130,17 @@ void rx_sdu(
enb_mod_idP
,
CC_idP
,
rx_ces
[
i
],
i
,
num_ce
,
payload_ptr
[
0
],
payload_ptr
[
1
]);
UE_id
=
find_UE_id
(
enb_mod_idP
,(((
uint16_t
)
payload_ptr
[
0
])
<<
8
)
+
payload_ptr
[
1
]);
/* TODO: maybe check that the CRNTI is in handover mode? */
if
(
UE_id
!=
-
1
)
rntiP
=
(((
uint16_t
)
payload_ptr
[
0
])
<<
8
)
+
payload_ptr
[
1
];
if
(
UE_id
!=
-
1
)
{
rntiP
=
(((
uint16_t
)
payload_ptr
[
0
])
<<
8
)
+
payload_ptr
[
1
];
phy_config_ue_state_ho
(
enb_mod_idP
,
CC_idP
,
rntiP
);
eNB_mac_inst
[
enb_mod_idP
].
UE_list
.
UE_template
[
UE_PCCID
(
enb_mod_idP
,
UE_id
)][
UE_id
].
configured
=
1
;
}
LOG_I
(
MAC
,
"[eNB %d] CC_id %d MAC CE_LCID %d : CRNTI %x (UE_id %d) in Msg3
\n
"
,
enb_mod_idP
,
CC_idP
,
rx_ces
[
i
],
(((
uint16_t
)
payload_ptr
[
0
])
<<
8
)
+
payload_ptr
[
1
],
UE_id
);
payload_ptr
+=
2
;
/* we don't process this CE yet */
if
(
msg3_flagP
!=
NULL
)
{
*
msg3_flagP
=
0
;
*
msg3_flagP
=
0
;
}
break
;
...
...
openair2/LAYER2/MAC/main.c
View file @
d6b7e02d
...
...
@@ -516,6 +516,7 @@ int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,ui
mac_xface
->
phy_config_sib2_eNB
=
phy_config_sib2_eNB
;
mac_xface
->
phy_config_sib2_ue
=
phy_config_sib2_ue
;
mac_xface
->
phy_config_afterHO_ue
=
phy_config_afterHO_ue
;
mac_xface
->
phy_config_ue_state_ho
=
phy_config_ue_state_ho
;
#ifdef Rel10
mac_xface
->
phy_config_sib13_eNB
=
phy_config_sib13_eNB
;
mac_xface
->
phy_config_sib13_ue
=
phy_config_sib13_ue
;
...
...
openair2/LAYER2/MAC/proto.h
View file @
d6b7e02d
...
...
@@ -758,6 +758,8 @@ int rrc_mac_config_req(module_id_t module_idP,
// Assign the new c-rnti in the UE context (during HO)
void
rrc_mac_get_new_crnti
(
protocol_ctxt_t
*
ctxt_pP
,
uint8_t
eNB_index
);
void
phy_config_ue_state_ho
(
uint8_t
Mod_id
,
uint8_t
CC_id
,
uint16_t
rnti
);
/** \brief get the estimated UE distance from the PHY->MAC layer.
@param Mod_id Instance ID of eNB
@param UE_id Index of UE if this is an eNB configuration
...
...
openair2/PHY_INTERFACE/defs.h
View file @
d6b7e02d
...
...
@@ -207,7 +207,7 @@ typedef struct {
void
(
*
phy_config_afterHO_ue
)(
module_id_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
CH_index
,
MobilityControlInfo_t
*
mobilityControlInfo
,
uint8_t
ho_failed
);
void
(
*
phy_config_ue_state_ho
)(
uint8_t
Mod_id
,
uint8_t
CC_id
,
uint16_t
rnti
);
/// Function to indicate failure of contention resolution or RA procedure
void
(
*
ra_failed
)(
module_id_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
eNB_index
);
...
...
openair2/RRC/LITE/L2_interface.c
View file @
d6b7e02d
...
...
@@ -752,5 +752,5 @@ void rrc_lite_ue_update_ho_status(module_id_t Mod_idP){
LOG_D
(
RRC
,
"Reset HO timer in RRC
\n
"
);
UE_rrc_inst
[
Mod_idP
].
Info
[
0
].
T304_active
=
0
;
// Stop the timer (MAC procedure was successful)
UE_rrc_inst
[
Mod_idP
].
HandoverInfoUe
.
measFlag
=
0
;
// Stop the measurements
UE_rrc_inst
[
Mod_idP
].
Info
[
0
].
State
=
RRC_CONNECT
ED
;
//UE_rrc_inst[Mod_idP].Info[1].State = RRC_RECONFIGUR
ED;
}
openair2/RRC/LITE/rrc_UE.c
View file @
d6b7e02d
...
...
@@ -972,7 +972,6 @@ rrc_ue_process_radioResourceConfigDedicated(
if
(
UE_rrc_inst
[
ctxt_pP
->
module_id
].
physicalConfigDedicated
[
eNB_index
])
{
memcpy
((
char
*
)
UE_rrc_inst
[
ctxt_pP
->
module_id
].
physicalConfigDedicated
[
eNB_index
],(
char
*
)
radioResourceConfigDedicated
->
physicalConfigDedicated
,
sizeof
(
struct
PhysicalConfigDedicated
));
}
else
{
UE_rrc_inst
[
ctxt_pP
->
module_id
].
physicalConfigDedicated
[
eNB_index
]
=
radioResourceConfigDedicated
->
physicalConfigDedicated
;
}
...
...
@@ -1093,39 +1092,39 @@ rrc_ue_process_radioResourceConfigDedicated(
LOG_D
(
RRC
,
"[FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 eNB %d) --->][MAC_UE][MOD %02d][]
\n
"
,
ctxt_pP
->
frame
,
ctxt_pP
->
module_id
,
eNB_index
,
ctxt_pP
->
module_id
);
rrc_mac_config_req
(
ctxt_pP
->
module_id
,
0
,
ENB_FLAG_NO
,
0
,
eNB_index
,
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
physicalConfigDedicated
[
eNB_index
],
#ifdef Rel10
(
SCellToAddMod_r10_t
*
)
NULL
,
//struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10,
#endif
(
MeasObjectToAddMod_t
**
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
mac_MainConfig
[
eNB_index
],
1
,
SRB1_logicalChannelConfig
,
(
MeasGapConfig_t
*
)
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
#ifdef Rel10
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
0
,
0
#endif
);
}
rrc_mac_config_req
(
ctxt_pP
->
module_id
,
0
,
ENB_FLAG_NO
,
0
,
eNB_index
,
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
physicalConfigDedicated
[
eNB_index
],
#ifdef Rel10
(
SCellToAddMod_r10_t
*
)
NULL
,
//struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10,
#endif
(
MeasObjectToAddMod_t
**
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
mac_MainConfig
[
eNB_index
],
1
,
SRB1_logicalChannelConfig
,
(
MeasGapConfig_t
*
)
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
#ifdef Rel10
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
0
,
0
#endif
);
}
else
{
if
(
UE_rrc_inst
[
ctxt_pP
->
module_id
].
SRB2_config
[
eNB_index
])
{
memcpy
(
UE_rrc_inst
[
ctxt_pP
->
module_id
].
SRB2_config
[
eNB_index
],
radioResourceConfigDedicated
->
srb_ToAddModList
->
list
.
array
[
cnt
],
...
...
@@ -1151,39 +1150,39 @@ rrc_ue_process_radioResourceConfigDedicated(
ctxt_pP
->
module_id
,
eNB_index
,
ctxt_pP
->
module_id
);
rrc_mac_config_req
(
ctxt_pP
->
module_id
,
0
,
ENB_FLAG_NO
,
0
,
eNB_index
,
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
physicalConfigDedicated
[
eNB_index
],
#ifdef Rel10
(
SCellToAddMod_r10_t
*
)
NULL
,
//struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10,
#endif
(
MeasObjectToAddMod_t
**
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
mac_MainConfig
[
eNB_index
],
2
,
SRB2_logicalChannelConfig
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
measGapConfig
[
eNB_index
],
(
TDD_Config_t
*
)
NULL
,
(
MobilityControlInfo_t
*
)
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
#ifdef Rel10
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
0
,
0
#endif
);
}
rrc_mac_config_req
(
ctxt_pP
->
module_id
,
0
,
ENB_FLAG_NO
,
0
,
eNB_index
,
(
RadioResourceConfigCommonSIB_t
*
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
physicalConfigDedicated
[
eNB_index
],
#ifdef Rel10
(
SCellToAddMod_r10_t
*
)
NULL
,
//struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10,
#endif
(
MeasObjectToAddMod_t
**
)
NULL
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
mac_MainConfig
[
eNB_index
],
2
,
SRB2_logicalChannelConfig
,
UE_rrc_inst
[
ctxt_pP
->
module_id
].
measGapConfig
[
eNB_index
],
(
TDD_Config_t
*
)
NULL
,
(
MobilityControlInfo_t
*
)
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
#ifdef Rel10
,
0
,
(
MBSFN_AreaInfoList_r9_t
*
)
NULL
,
(
PMCH_InfoList_r9_t
*
)
NULL
#endif
#ifdef CBA
,
0
,
0
#endif
);
}
}
}
...
...
openair2/RRC/LITE/rrc_eNB.c
View file @
d6b7e02d
...
...
@@ -2874,7 +2874,10 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
(
void
*
)
&
rrc_inst
->
carrier
[
0
]
/* CROUX TBC */
.
sib2
->
radioResourceConfigCommon
.
pdsch_ConfigCommon
,
sizeof
(
PDSCH_ConfigCommon_t
));
memcpy
((
void
*
)
&
mobilityInfo
->
radioResourceConfigCommon
.
pusch_ConfigCommon
,
(
void
*
)
&
rrc_inst
->
carrier
[
0
]
/* CROUX TBC */
.
sib2
->
radioResourceConfigCommon
.
pusch_ConfigCommon
,
sizeof
(
PUSCH_ConfigCommon_t
));
mobilityInfo
->
radioResourceConfigCommon
.
phich_Config
=
NULL
;
mobilityInfo
->
radioResourceConfigCommon
.
phich_Config
=
CALLOC
(
1
,
sizeof
(
*
mobilityInfo
->
radioResourceConfigCommon
.
phich_Config
));
mobilityInfo
->
radioResourceConfigCommon
.
phich_Config
->
phich_Duration
=
(
long
)
mac_xface
->
lte_frame_parms
->
phich_config_common
.
phich_duration
;
mobilityInfo
->
radioResourceConfigCommon
.
phich_Config
->
phich_Resource
=
(
long
)
mac_xface
->
lte_frame_parms
->
phich_config_common
.
phich_resource
;
mobilityInfo
->
radioResourceConfigCommon
.
pucch_ConfigCommon
=
CALLOC
(
1
,
sizeof
(
*
mobilityInfo
->
radioResourceConfigCommon
.
pucch_ConfigCommon
));
memcpy
((
void
*
)
mobilityInfo
->
radioResourceConfigCommon
.
pucch_ConfigCommon
,
...
...
openair2/UTIL/LOG/log.c
View file @
d6b7e02d
...
...
@@ -407,6 +407,14 @@ int logInit (void)
g_log
->
log_component
[
RRH
].
filelog
=
0
;
g_log
->
log_component
[
RRH
].
filelog_name
=
""
;
g_log
->
log_component
[
X2AP
].
name
=
"X2AP"
;
g_log
->
log_component
[
X2AP
].
level
=
LOG_EMERG
;
g_log
->
log_component
[
X2AP
].
flag
=
LOG_FULL
;
g_log
->
log_component
[
X2AP
].
interval
=
1
;
g_log
->
log_component
[
X2AP
].
fd
=
0
;
g_log
->
log_component
[
X2AP
].
filelog
=
0
;
g_log
->
log_component
[
X2AP
].
filelog_name
=
""
;
g_log
->
level2string
[
LOG_EMERG
]
=
"G"
;
//EMERG
g_log
->
level2string
[
LOG_ALERT
]
=
"A"
;
// ALERT
g_log
->
level2string
[
LOG_CRIT
]
=
"C"
;
// CRITIC
...
...
openair2/X2AP/x2ap_common.h
View file @
d6b7e02d
...
...
@@ -290,8 +290,12 @@
# define X2AP_PORT 36422
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
extern
int
asn_debug
;
extern
int
asn1_xer_print
;
...
...
openair2/X2AP/x2ap_eNB.c
View file @
d6b7e02d
...
...
@@ -40,7 +40,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <arpa/inet.h>
#include "intertask_interface.h"
...
...
@@ -53,12 +53,17 @@
#include "x2ap_eNB_handler.h"
#include "x2ap_ies_defs.h"
#include "x2ap_eNB_management_procedures.h"
#include "x2ap_eNB_generate_messages.h"
#include "msc.h"
#include "assertions.h"
#include "conversions.h"
struct
x2ap_enb_map
;
struct
x2ap_eNB_data_s
;
RB_PROTOTYPE
(
x2ap_enb_map
,
x2ap_eNB_data_s
,
entry
,
x2ap_eNB_compare_assoc_id
);
static
void
x2ap_eNB_handle_register_eNB
(
instance_t
instance
,
...
...
@@ -99,13 +104,37 @@ void x2ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_associa
DevAssert
(
sctp_new_association_resp
!=
NULL
);
printf
(
"x2ap_eNB_handle_sctp_association_resp at 1
\n
"
);
dump_trees
();
instance_p
=
x2ap_eNB_get_instance
(
instance
);
DevAssert
(
instance_p
!=
NULL
);
/* if the assoc_id is already known, it is certainly because an IND was received
* before. In this case, just update streams and return
*/
if
(
sctp_new_association_resp
->
assoc_id
!=
-
1
)
{
x2ap_enb_data_p
=
x2ap_get_eNB
(
instance_p
,
sctp_new_association_resp
->
assoc_id
,
sctp_new_association_resp
->
ulp_cnx_id
);
if
(
x2ap_enb_data_p
!=
NULL
)
{
/* some sanity check - to be refined at some point */
if
(
sctp_new_association_resp
->
sctp_state
!=
SCTP_STATE_ESTABLISHED
)
{
X2AP_ERROR
(
"x2ap_enb_data_p not NULL and sctp state not SCTP_STATE_ESTABLISHED, what to do?
\n
"
);
abort
();
}
x2ap_enb_data_p
->
in_streams
=
sctp_new_association_resp
->
in_streams
;
x2ap_enb_data_p
->
out_streams
=
sctp_new_association_resp
->
out_streams
;
return
;
}
}
x2ap_enb_data_p
=
x2ap_get_eNB
(
instance_p
,
-
1
,
sctp_new_association_resp
->
ulp_cnx_id
);
DevAssert
(
x2ap_enb_data_p
!=
NULL
);
printf
(
"x2ap_eNB_handle_sctp_association_resp at 2
\n
"
);
dump_trees
();
if
(
sctp_new_association_resp
->
sctp_state
!=
SCTP_STATE_ESTABLISHED
)
{
X2AP_WARN
(
"Received unsuccessful result for SCTP association (%u), instance %d, cnx_id %u
\n
"
,
sctp_new_association_resp
->
sctp_state
,
...
...
@@ -118,15 +147,70 @@ void x2ap_eNB_handle_sctp_association_resp(instance_t instance, sctp_new_associa
return
;
}
printf
(
"x2ap_eNB_handle_sctp_association_resp at 3
\n
"
);
dump_trees
();
/* Update parameters */
x2ap_enb_data_p
->
assoc_id
=
sctp_new_association_resp
->
assoc_id
;
x2ap_enb_data_p
->
in_streams
=
sctp_new_association_resp
->
in_streams
;
x2ap_enb_data_p
->
out_streams
=
sctp_new_association_resp
->
out_streams
;
printf
(
"x2ap_eNB_handle_sctp_association_resp at 4
\n
"
);
dump_trees
();
/* Prepare new x2 Setup Request */
x2ap_eNB_generate_x2_setup_request
(
instance_p
,
x2ap_enb_data_p
);
}
static
void
x2ap_eNB_handle_sctp_association_ind
(
instance_t
instance
,
sctp_new_association_ind_t
*
sctp_new_association_ind
)
{
x2ap_eNB_instance_t
*
instance_p
;
x2ap_eNB_data_t
*
x2ap_enb_data_p
;
printf
(
"x2ap_eNB_handle_sctp_association_ind at 1 (called for instance %d)
\n
"
,
instance
);
dump_trees
();
DevAssert
(
sctp_new_association_ind
!=
NULL
);
instance_p
=
x2ap_eNB_get_instance
(
instance
);
DevAssert
(
instance_p
!=
NULL
);
x2ap_enb_data_p
=
x2ap_get_eNB
(
instance_p
,
sctp_new_association_ind
->
assoc_id
,
-
1
);
if
(
x2ap_enb_data_p
!=
NULL
)
abort
();
// DevAssert(x2ap_enb_data_p != NULL);
if
(
x2ap_enb_data_p
==
NULL
)
{
/* Create new eNB descriptor */
x2ap_enb_data_p
=
calloc
(
1
,
sizeof
(
*
x2ap_enb_data_p
));
DevAssert
(
x2ap_enb_data_p
!=
NULL
);
x2ap_enb_data_p
->
cnx_id
=
x2ap_eNB_fetch_add_global_cnx_id
();
x2ap_enb_data_p
->
x2ap_eNB_instance
=
instance_p
;
/* Insert the new descriptor in list of known eNB
* but not yet associated.
*/
RB_INSERT
(
x2ap_enb_map
,
&
instance_p
->
x2ap_enb_head
,
x2ap_enb_data_p
);
x2ap_enb_data_p
->
state
=
X2AP_ENB_STATE_CONNECTED
;
instance_p
->
x2_target_enb_nb
++
;
if
(
instance_p
->
x2_target_enb_pending_nb
>
0
)
{
instance_p
->
x2_target_enb_pending_nb
--
;
}
}
else
{
X2AP_WARN
(
"x2ap_enb_data_p already exists
\n
"
);
}
printf
(
"x2ap_eNB_handle_sctp_association_ind at 2
\n
"
);
dump_trees
();
/* Update parameters */
x2ap_enb_data_p
->
assoc_id
=
sctp_new_association_ind
->
assoc_id
;
x2ap_enb_data_p
->
in_streams
=
sctp_new_association_ind
->
in_streams
;
x2ap_enb_data_p
->
out_streams
=
sctp_new_association_ind
->
out_streams
;
printf
(
"x2ap_eNB_handle_sctp_association_ind at 3
\n
"
);
dump_trees
();
}
int
x2ap_eNB_init_sctp
(
x2ap_eNB_instance_t
*
instance_p
,
net_ip_address_t
*
local_ip_addr
)
{
...
...
@@ -146,9 +230,13 @@ int x2ap_eNB_init_sctp (x2ap_eNB_instance_t *instance_p,
sctp_init
->
ipv6
=
0
;
sctp_init
->
nb_ipv4_addr
=
1
;
#if 0
memcpy(&sctp_init->ipv4_address,
local_ip_addr,
sizeof(*local_ip_addr));
#endif
sctp_init
->
ipv4_address
[
0
]
=
inet_addr
(
local_ip_addr
->
ipv4_address
);
/*
* SR WARNING: ipv6 multi-homing fails sometimes for localhost.
* * * * Disable it for now.
...
...
@@ -269,7 +357,7 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
for
(
index
=
0
;
index
<
x2ap_register_eNB
->
nb_x2
;
index
++
)
{
if
(
x2ap_register_eNB
->
target_enb_x2_ip_address
[
index
].
active
==
1
){
X2AP_INFO
(
"eNB[%d] eNB id %u acting as an initiator
\n
"
,
X2AP_INFO
(
"eNB[%d] eNB id %u acting as an initiator
(client)
\n
"
,
instance
,
x2ap_register_eNB
->
eNB_id
);
x2ap_eNB_register_eNB
(
new_instance
,
&
x2ap_register_eNB
->
target_enb_x2_ip_address
[
index
],
...
...
@@ -281,9 +369,9 @@ void x2ap_eNB_handle_register_eNB(instance_t instance,
/* initiate the SCTP listener */
if
(
x2ap_eNB_init_sctp
(
new_instance
,
&
x2ap_register_eNB
->
enb_x2_ip_address
)
<
0
)
{
X2AP_ERROR
(
"Error while sending SCTP_INIT_MSG to SCTP
\n
"
);
return
-
1
;
return
;
}
X2AP_INFO
(
"eNB[%d] eNB id %u acting as a listner
\n
"
,
X2AP_INFO
(
"eNB[%d] eNB id %u acting as a listner
(server)
\n
"
,
instance
,
x2ap_register_eNB
->
eNB_id
);
}
}
...
...
@@ -311,23 +399,25 @@ void *x2ap_task(void *arg)
break
;
case
X2AP_REGISTER_ENB_REQ
:
x2ap_eNB_handle_register_eNB
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
X2AP_REGISTER_ENB_REQ
(
received_msg
));
break
;
case
SCTP_NEW_ASSOCIATION_RESP
:
x2ap_eNB_handle_sctp_association_resp
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
received_msg
->
ittiMsg
.
sctp_new_association_resp
);
break
;
case
SCTP_DATA_IND
:
{
case
SCTP_NEW_ASSOCIATION_IND
:
x2ap_eNB_handle_sctp_association_ind
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
received_msg
->
ittiMsg
.
sctp_new_association_ind
);
break
;
case
SCTP_DATA_IND
:
x2ap_eNB_handle_sctp_data_ind
(
ITTI_MESSAGE_GET_INSTANCE
(
received_msg
),
&
received_msg
->
ittiMsg
.
sctp_data_ind
);
}
break
;
break
;
default:
X2AP_ERROR
(
"Received unhandled message: %d:%s
\n
"
,
ITTI_MSG_ID
(
received_msg
),
ITTI_MSG_NAME
(
received_msg
));
...
...
openair2/X2AP/x2ap_eNB_decoder.c
View file @
d6b7e02d
...
...
@@ -53,7 +53,7 @@ int x2ap_eNB_decode_initiating(x2ap_message *x2ap_message_p, X2ap_InitiatingMess
int
x2ap_eNB_decode_successful
(
x2ap_message
*
x2ap_message_p
,
X2ap_SuccessfulOutcome_t
*
successful_p
);
int
x2ap_eNB_decode_unsuccessful
(
x2ap_message
*
x2ap_message_p
,
X2ap_UnsuccessfulOutcome_t
*
unsuccessful_p
);
int
x2ap_eNB_decode_pdu
(
x2ap_message
*
x2ap_message_p
,
uint8_t
*
buffer
,
uint32_t
len
)
{
int
x2ap_eNB_decode_pdu
(
x2ap_message
*
x2ap_message_p
,
const
uint8_t
*
const
buffer
,
uint32_t
len
)
{
X2AP_PDU_t
pdu
;
X2AP_PDU_t
*
pdu_p
=
&
pdu
;
asn_dec_rval_t
dec_ret
;
...
...
@@ -117,7 +117,7 @@ x2ap_eNB_decode_initiating(x2ap_message *x2ap_message_p, X2ap_InitiatingMessage_
switch
(
x2ap_message_p
->
procedureCode
)
{
case
X2ap_ProcedureCode_id_x2Setup
:
ret
=
x2ap_decode_x2setuprequest_ies
(
&
x2ap_message_p
->
msg
.
x2SetupRequest_IEs
,
&
initiating_p
->
value
);
x2ap_xer_print_x2setuprequest_
(
x2ap_xer__print2sp
,
message_string
,
message
);
x2ap_xer_print_x2setuprequest_
(
x2ap_xer__print2sp
,
message_string
,
x2ap_message_p
);
message_id
=
X2AP_SETUP_REQUEST_LOG
;
message_string_size
=
strlen
(
message_string
);
message
=
itti_alloc_new_message_sized
(
TASK_X2AP
,
...
...
@@ -200,24 +200,31 @@ x2ap_eNB_decode_successful(x2ap_message *x2ap_message_p, X2ap_SuccessfulOutcome_
switch
(
x2ap_message_p
->
procedureCode
)
{
case
X2ap_ProcedureCode_id_x2Setup
:
ret
=
x2ap_decode_x2setupresponse_ies
(
&
x2ap_message_p
->
msg
.
x2SetupResponse_IEs
,
&
successful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_reset
:
ret
=
x2ap_decode_x2ap_resetresponse_ies
(
&
x2ap_message_p
->
msg
.
x2ap_ResetResponse_IEs
,
&
successful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_resourceStatusReportingInitiation
:
ret
=
x2ap_decode_x2ap_resourcestatusresponse_ies
(
&
x2ap_message_p
->
msg
.
x2ap_ResourceStatusResponse_IEs
,
&
successful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_mobilitySettingsChange
:
ret
=
x2ap_decode_x2ap_mobilitychangeacknowledge_ies
(
&
x2ap_message_p
->
msg
.
x2ap_MobilityChangeAcknowledge_IEs
,
&
successful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_eNBConfigurationUpdate
:
ret
=
x2ap_decode_x2ap_enbconfigurationupdateacknowledge_ies
(
&
x2ap_message_p
->
msg
.
x2ap_ENBConfigurationUpdateAcknowledge_IEs
,
&
successful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_handoverPreparation
:
ret
=
x2ap_decode_x2ap_handoverrequestacknowledge_ies
(
&
x2ap_message_p
->
msg
.
x2ap_HandoverRequestAcknowledge_IEs
,
&
successful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_cellActivation
:
ret
=
x2ap_decode_x2ap_cellactivationresponse_ies
(
&
x2ap_message_p
->
msg
.
x2ap_CellActivationResponse_IEs
,
&
successful_p
->
value
);
break
;
default:
X2AP_DEBUG
(
"Unknown procedure (%d) or not implemented"
,
(
int
)
x2ap_message_p
->
procedureCode
);
...
...
@@ -248,21 +255,28 @@ x2ap_eNB_decode_unsuccessful(x2ap_message *x2ap_message_p, X2ap_UnsuccessfulOutc
switch
(
x2ap_message_p
->
procedureCode
)
{
case
X2ap_ProcedureCode_id_x2Setup
:
ret
=
x2ap_decode_x2setupfailure_ies
(
&
x2ap_message_p
->
msg
.
x2SetupFailure_IEs
,
&
unsuccessful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_resourceStatusReportingInitiation
:
ret
=
x2ap_decode_x2ap_resourcestatusfailure_ies
(
&
x2ap_message_p
->
msg
.
x2ap_ResourceStatusFailure_IEs
,
&
unsuccessful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_mobilitySettingsChange
:
ret
=
x2ap_decode_x2ap_mobilitychangefailure_ies
(
&
x2ap_message_p
->
msg
.
x2ap_MobilityChangeFailure_IEs
,
&
unsuccessful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_eNBConfigurationUpdate
:
ret
=
x2ap_decode_x2ap_enbconfigurationupdatefailure_ies
(
&
x2ap_message_p
->
msg
.
x2ap_ENBConfigurationUpdateFailure_IEs
,
&
unsuccessful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_handoverPreparation
:
ret
=
x2ap_decode_x2ap_handoverpreparationfailure_ies
(
&
x2ap_message_p
->
msg
.
x2ap_HandoverPreparationFailure_IEs
,
&
unsuccessful_p
->
value
);
break
;
case
X2ap_ProcedureCode_id_cellActivation
:
ret
=
x2ap_decode_x2ap_cellactivationfailure_ies
(
&
x2ap_message_p
->
msg
.
x2ap_CellActivationFailure_IEs
,
&
unsuccessful_p
->
value
);
break
;
default:
X2AP_DEBUG
(
"Unknown procedure (%d) or not implemented"
,
(
int
)
x2ap_message_p
->
procedureCode
);
break
;
...
...
openair2/X2AP/x2ap_eNB_decoder.h
View file @
d6b7e02d
...
...
@@ -40,6 +40,6 @@
#ifndef X2AP_ENB_DECODER_H_
#define X2AP_ENB_DECODER_H_
int
x2ap_eNB_decode_pdu
(
x2ap_message
*
x2ap_message
,
uint8_t
*
buffer
,
uint32_t
len
);
int
x2ap_eNB_decode_pdu
(
x2ap_message
*
x2ap_message
,
const
uint8_t
*
const
buffer
,
uint32_t
len
);
#endif
/* X2AP_ENB_DECODER_H_ */
openair2/X2AP/x2ap_eNB_defs.h
View file @
d6b7e02d
...
...
@@ -180,6 +180,8 @@ typedef struct {
int
x2ap_eNB_compare_assoc_id
(
struct
x2ap_eNB_data_s
*
p1
,
struct
x2ap_eNB_data_s
*
p2
);
/* Generate the tree management functions */
struct
x2ap_eNB_map
;
struct
x2ap_eNB_data_s
;
RB_PROTOTYPE
(
x2ap_eNB_map
,
x2ap_eNB_data_s
,
entry
,
x2ap_eNB_compare_assoc_id
);
...
...
openair2/X2AP/x2ap_eNB_encoder.c
View file @
d6b7e02d
...
...
@@ -48,9 +48,9 @@
#include "assertions.h"
int
x2ap_encode_initiating
(
x2ap_message
*
x2ap_message_p
,
uint8_t
**
buf
,
uint32_t
*
length
);
int
x2ap_encode_successful
(
x2ap_message
*
x2ap_message_p
,
uint8_t
**
buf
,
uint32_t
*
length
);
int
x2ap_encode_unsuccessful
(
x2ap_message
*
x2ap_message_p
,
uint8_t
**
buf
,
uint32_t
*
length
);
int
x2ap_e
NB_e
ncode_initiating
(
x2ap_message
*
x2ap_message_p
,
uint8_t
**
buf
,
uint32_t
*
length
);
int
x2ap_e
NB_e
ncode_successful
(
x2ap_message
*
x2ap_message_p
,
uint8_t
**
buf
,
uint32_t
*
length
);
int
x2ap_e
NB_e
ncode_unsuccessful
(
x2ap_message
*
x2ap_message_p
,
uint8_t
**
buf
,
uint32_t
*
length
);
static
inline
int
x2ap_reset_request_encoder
(
X2ap_ResetRequest_IEs_t
*
resetRequest_IEs
,
uint8_t
**
buf
,
uint32_t
*
length
);
static
inline
int
x2_setup_response_encoder
(
X2SetupResponse_IEs_t
*
x2SetupResponse_IEs
,
uint8_t
**
buf
,
uint32_t
*
length
);
...
...
@@ -122,6 +122,7 @@ x2ap_eNB_encode_initiating(x2ap_message *x2ap_message_p, uint8_t **buf, uint32_t
#warning "do the same for the other messages"
x2ap_xer_print_x2ap_resetrequest_
(
x2ap_xer__print2sp
,
message_string
,
x2ap_message_p
);
message_string_size
=
strlen
(
message_string
)
+
1
;
message_id
=
X2AP_RESET_REQUST_LOG
;
message
=
itti_alloc_new_message_sized
(
TASK_X2AP
,
message_id
,
message_string_size
+
sizeof
(
IttiMsgText
));
message
->
ittiMsg
.
x2ap_reset_request_log
.
size
=
message_string_size
;
...
...
@@ -206,6 +207,7 @@ x2ap_eNB_encode_successful(x2ap_message *x2ap_message_p, uint8_t **buf, uint32_t
#warning "do the same for the other messages"
x2ap_xer_print_x2ap_resourcestatusresponse_
(
x2ap_xer__print2sp
,
message_string
,
x2ap_message_p
);
message_string_size
=
strlen
(
message_string
)
+
1
;
message_id
=
X2AP_RESOURCE_STATUS_RESPONSE_LOG
;
message
=
itti_alloc_new_message_sized
(
TASK_X2AP
,
message_id
,
message_string_size
+
sizeof
(
IttiMsgText
));
message
->
ittiMsg
.
x2ap_resource_status_response_log
.
size
=
message_string_size
;
...
...
@@ -258,6 +260,7 @@ x2ap_eNB_encode_unsuccessful(x2ap_message *x2ap_message_p, uint8_t **buf, uint32
ret
=
x2ap_resource_status_failure_encoder
(
&
x2ap_message_p
->
msg
.
x2ap_ResourceStatusFailure_IEs
,
buf
,
length
);
#warning "do the same for the other messages"
x2ap_xer_print_x2ap_resourcestatusfailure_
(
x2ap_xer__print2sp
,
message_string
,
x2ap_message_p
);
message_string_size
=
strlen
(
message_string
)
+
1
;
message_id
=
X2AP_RESOURCE_STATUS_FAILURE_LOG
;
message
=
itti_alloc_new_message_sized
(
TASK_X2AP
,
message_id
,
message_string_size
+
sizeof
(
IttiMsgText
));
message
->
ittiMsg
.
x2ap_resource_status_failure_log
.
size
=
message_string_size
;
...
...
openair2/X2AP/x2ap_eNB_generate_messages.c
View file @
d6b7e02d
...
...
@@ -40,6 +40,8 @@
#include "x2ap_eNB.h"
#include "x2ap_eNB_generate_messages.h"
#include "x2ap_eNB_encoder.h"
#include "x2ap_eNB_itti_messaging.h"
#include "msc.h"
#include "assertions.h"
...
...
@@ -123,7 +125,7 @@ int x2ap_eNB_generate_x2_setup_request(x2ap_eNB_instance_t *instance_p,
X2AP_ERROR
(
"Failed to encode X2 setup request
\n
"
);
return
-
1
;
}
MSC_LOG_TX_MESSAGE
(
MSC_X2AP_SRC_ENB
,
MSC_X2AP_TARGET_ENB
,
NULL
,
0
,
"0 X2Setup/initiatingMessage assoc_id %u"
,
x2ap_enb_data_p
->
assoc_id
);
/* Non UE-Associated signalling -> stream = 0 */
...
...
@@ -149,7 +151,7 @@ x2ap_generate_x2_setup_response (x2ap_eNB_data_t * eNB_association)
X2ap_PLMN_Identity_t
broadcast_plmnIdentity_2
;
X2ap_PLMN_Identity_t
broadcast_plmnIdentity_3
;
X2ap_ServedCellItem_t
*
served_cell
=
malloc
(
sizeof
(
X2ap_ServedCellItem_t
));;
X2ap_ServedCellItem_t
*
served_cell
=
calloc
(
1
,
sizeof
(
X2ap_ServedCellItem_t
));;
uint8_t
*
buffer
;
uint32_t
len
;
...
...
@@ -218,9 +220,14 @@ x2ap_generate_x2_setup_response (x2ap_eNB_data_t * eNB_association)
/*
* Non-UE signalling -> stream 0
*/
return
x2ap_eNB_itti_send_sctp_data_req
(
buffer
,
len
,
eNB_association
->
assoc_id
,
0
);
x2ap_eNB_itti_send_sctp_data_req
(
instance
->
instance
,
eNB_association
->
assoc_id
,
buffer
,
len
,
0
);
return
ret
;
}
int
x2ap_eNB_set_cause
(
X2ap_Cause_t
*
cause_p
,
X2ap_Cause_PR
cause_type
,
long
cause_value
);
int
x2ap_eNB_generate_x2_setup_failure
(
uint32_t
assoc_id
,
X2ap_Cause_PR
cause_type
,
...
...
@@ -231,6 +238,7 @@ int x2ap_eNB_generate_x2_setup_failure ( uint32_t assoc_id,
uint32_t
length
;
x2ap_message
message
;
X2SetupFailure_IEs_t
*
x2_setup_failure_p
;
int
ret
=
0
;
memset
(
&
message
,
0
,
sizeof
(
x2ap_message
));
x2_setup_failure_p
=
&
message
.
msg
.
x2SetupFailure_IEs
;
...
...
@@ -251,7 +259,10 @@ int x2ap_eNB_generate_x2_setup_failure ( uint32_t assoc_id,
MSC_X2AP_TARGET_ENB
,
NULL
,
0
,
"0 X2Setup/unsuccessfulOutcome assoc_id %u cause %u value %u"
,
assoc_id
,
cause_type
,
cause_value
);
return
x2ap_eNB_itti_send_sctp_data_req
(
buffer_p
,
length
,
assoc_id
,
0
);
x2ap_eNB_itti_send_sctp_data_req
(
/* instance? */
0
,
assoc_id
,
buffer_p
,
length
,
0
);
return
ret
;
}
int
x2ap_eNB_set_cause
(
X2ap_Cause_t
*
cause_p
,
...
...
openair2/X2AP/x2ap_eNB_handler.c
View file @
d6b7e02d
...
...
@@ -374,7 +374,7 @@ int x2ap_eNB_handle_x2_setup_response(uint32_t assoc_id,
uint32_t
eNB_id
=
0
;
DevAssert
(
message
!=
NULL
);
x2SetupResponse
=
&
message
->
msg
.
x2SetupRe
quest
_IEs
;
x2SetupResponse
=
&
message
->
msg
.
x2SetupRe
sponse
_IEs
;
MSC_LOG_RX_MESSAGE
(
MSC_X2AP_TARGET_ENB
,
MSC_X2AP_SRC_ENB
,
NULL
,
0
,
...
...
openair2/X2AP/x2ap_eNB_management_procedures.c
View file @
d6b7e02d
...
...
@@ -106,6 +106,30 @@ void x2ap_eNB_insert_new_instance(x2ap_eNB_instance_t *new_instance_p)
new_instance_p
,
x2ap_eNB_entries
);
}
void
dump_tree
(
x2ap_eNB_data_t
*
t
)
{
if
(
t
==
NULL
)
return
;
printf
(
"-----------------------
\n
"
);
printf
(
"eNB id %d %s
\n
"
,
t
->
eNB_id
,
t
->
eNB_name
);
printf
(
"state %d
\n
"
,
t
->
state
);
printf
(
"nextstream %d
\n
"
,
t
->
nextstream
);
printf
(
"in_streams %d out_streams %d
\n
"
,
t
->
in_streams
,
t
->
out_streams
);
printf
(
"cnx_id %d assoc_id %d
\n
"
,
t
->
cnx_id
,
t
->
assoc_id
);
dump_tree
(
t
->
entry
.
rbe_left
);
dump_tree
(
t
->
entry
.
rbe_right
);
}
void
dump_trees
(
void
)
{
x2ap_eNB_instance_t
*
zz
;
STAILQ_FOREACH
(
zz
,
&
x2ap_eNB_internal_data
.
x2ap_eNB_instances_head
,
x2ap_eNB_entries
)
{
printf
(
"here comes the tree (instance %d):
\n
---------------------------------------------
\n
"
,
zz
->
instance
);
dump_tree
(
zz
->
x2ap_enb_head
.
rbh_root
);
printf
(
"---------------------------------------------
\n
"
);
}
}
struct
x2ap_eNB_data_s
*
x2ap_get_eNB
(
x2ap_eNB_instance_t
*
instance_p
,
int32_t
assoc_id
,
uint16_t
cnx_id
)
...
...
@@ -113,6 +137,9 @@ struct x2ap_eNB_data_s *x2ap_get_eNB(x2ap_eNB_instance_t *instance_p,
struct
x2ap_eNB_data_s
temp
;
struct
x2ap_eNB_data_s
*
found
;
printf
(
"x2ap_get_eNB at 1 (looking for assoc_id %d cnx_id %d)
\n
"
,
assoc_id
,
cnx_id
);
dump_trees
();
memset
(
&
temp
,
0
,
sizeof
(
struct
x2ap_eNB_data_s
));
temp
.
assoc_id
=
assoc_id
;
...
...
@@ -153,11 +180,13 @@ x2ap_eNB_instance_t *x2ap_eNB_get_instance(instance_t instance)
/// utility functions
void
x2ap_dump_eNB
(
x2ap_eNB_data_t
*
eNB_ref
);
void
x2ap_dump_eNB_list
(
void
)
{
x2ap_eNB_instance_t
*
inst
=
NULL
;
struct
x2ap_eNB_data_s
*
found
=
NULL
;
struct
x2ap_eNB_data_s
*
temp
=
NULL
;
struct
x2ap_eNB_data_s
temp
;
memset
(
&
temp
,
0
,
sizeof
(
struct
x2ap_eNB_data_s
));
...
...
@@ -188,12 +217,13 @@ void x2ap_dump_eNB (x2ap_eNB_data_t * eNB_ref) {
x2ap_eNB_data_t
*
x2ap_is_eNB_id_in_list
(
const
uint32_t
eNB_id
)
{
x2ap_eNB_instance_t
*
eNB_ref
;
STAILQ_FOREACH
(
eNB_ref
,
&
x2ap_eNB_internal_data
.
x2ap_eNB_instances_head
,
x2ap_eNB_entries
)
{
if
(
eNB_ref
->
eNB_id
==
eNB_id
)
{
x2ap_eNB_instance_t
*
inst
;
struct
x2ap_eNB_data_s
*
elm
;
return
eNB_ref
;
STAILQ_FOREACH
(
inst
,
&
x2ap_eNB_internal_data
.
x2ap_eNB_instances_head
,
x2ap_eNB_entries
)
{
RB_FOREACH
(
elm
,
x2ap_enb_map
,
&
inst
->
x2ap_enb_head
)
{
if
(
elm
->
eNB_id
==
eNB_id
)
return
elm
;
}
}
return
NULL
;
...
...
@@ -201,12 +231,14 @@ x2ap_eNB_data_t * x2ap_is_eNB_id_in_list (const uint32_t eNB_id)
x2ap_eNB_data_t
*
x2ap_is_eNB_assoc_id_in_list
(
const
uint32_t
sctp_assoc_id
)
{
x2ap_eNB_instance_t
*
inst
=
NULL
;
struct
x2ap_eNB_data_s
*
found
=
NULL
;
struct
x2ap_eNB_data_s
*
temp
=
NULL
;
x2ap_eNB_instance_t
*
inst
;
struct
x2ap_eNB_data_s
*
found
;
struct
x2ap_eNB_data_s
temp
;
STAILQ_FOREACH
(
inst
,
&
x2ap_eNB_internal_data
.
x2ap_eNB_instances_head
,
x2ap_eNB_entries
)
{
temp
.
assoc_id
=
sctp_assoc_id
;
temp
.
cnx_id
=
-
1
;
STAILQ_FOREACH
(
inst
,
&
x2ap_eNB_internal_data
.
x2ap_eNB_instances_head
,
x2ap_eNB_entries
)
{
found
=
RB_FIND
(
x2ap_enb_map
,
&
inst
->
x2ap_enb_head
,
&
temp
);
if
(
found
!=
NULL
){
if
(
found
->
assoc_id
==
sctp_assoc_id
)
{
...
...
openair2/X2AP/x2ap_eNB_management_procedures.h
View file @
d6b7e02d
...
...
@@ -46,4 +46,8 @@ x2ap_eNB_data_t* x2ap_is_eNB_id_in_list(uint32_t eNB_id);
x2ap_eNB_data_t
*
x2ap_is_eNB_assoc_id_in_list
(
uint32_t
sctp_assoc_id
);
struct
x2ap_eNB_data_s
*
x2ap_get_eNB
(
x2ap_eNB_instance_t
*
instance_p
,
int32_t
assoc_id
,
uint16_t
cnx_id
);
#endif
/* X2AP_ENB_MANAGEMENT_PROCEDURES_H_ */
openair3/UTILS/conversions.h
View file @
d6b7e02d
...
...
@@ -295,7 +295,7 @@ do { \
(bITsTRING)->size = 3; \
(bITsTRING)->bits_unused = 4; \
} while(0)
/*
/* TS 36.413 v10.9.0 section 9.2.1.38:
* E-UTRAN CGI/Cell Identity
* The leftmost bits of the Cell
...
...
targets/COMMON/create_tasks.c
View file @
d6b7e02d
...
...
@@ -34,12 +34,12 @@
# ifdef OPENAIR2
# if defined(ENABLE_USE_MME)
# include "sctp_eNB_task.h"
# include "s1ap_eNB.h"
# include "nas_ue_task.h"
# include "udp_eNB_task.h"
# include "gtpv1u_eNB_task.h"
# endif
# include "sctp_eNB_task.h"
# if defined (ENABLE_USE_X2)
# include "x2ap_eNB.h"
# endif
...
...
@@ -59,11 +59,6 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb)
# if defined(ENABLE_USE_MME)
{
if
(
enb_nb
>
0
)
{
if
(
itti_create_task
(
TASK_SCTP
,
sctp_eNB_task
,
NULL
)
<
0
)
{
LOG_E
(
SCTP
,
"Create task for SCTP failed
\n
"
);
return
-
1
;
}
if
(
itti_create_task
(
TASK_S1AP
,
s1ap_eNB_task
,
NULL
)
<
0
)
{
LOG_E
(
S1AP
,
"Create task for S1AP failed
\n
"
);
return
-
1
;
...
...
@@ -90,13 +85,19 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb)
# endif
}
# endif
#if
defined(ENABLE_USE_X2)
#if
ENABLE_USE_X2
if
(
itti_create_task
(
TASK_X2AP
,
x2ap_task
,
NULL
)
<
0
)
{
LOG_E
(
X2AP
,
"Create task for X2AP failed
\n
"
);
return
-
1
;
}
#endif
if
(
itti_create_task
(
TASK_SCTP
,
sctp_eNB_task
,
NULL
)
<
0
)
{
LOG_E
(
SCTP
,
"Create task for SCTP failed
\n
"
);
return
-
1
;
}
if
(
enb_nb
>
0
)
{
if
(
itti_create_task
(
TASK_RRC_ENB
,
rrc_enb_task
,
NULL
)
<
0
)
{
LOG_E
(
RRC
,
"Create task for RRC eNB failed
\n
"
);
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
View file @
d6b7e02d
...
...
@@ -35,8 +35,8 @@ eNBs =
Nid_cell_mbsfn
=
0
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
1
20
;
tx_gain
=
25
;
rx_gain
=
20
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
...
...
@@ -46,7 +46,7 @@ eNBs =
pucch_nRB_CQI
=
1
;
pucch_nCS_AN
=
0
;
pucch_n1_AN
=
32
;
pdsch_referenceSignalPower
=
-
29
;
pdsch_referenceSignalPower
=
0
;
pdsch_p_b
=
0
;
pusch_n_SB
=
1
;
pusch_enable64QAM
=
"DISABLE"
;
...
...
@@ -55,7 +55,7 @@ eNBs =
pusch_groupHoppingEnabled
=
"ENABLE"
;
pusch_groupAssignment
=
0
;
pusch_sequenceHoppingEnabled
=
"DISABLE"
;
pusch_nDMRS1
=
1
;
pusch_nDMRS1
=
0
;
phich_duration
=
"NORMAL"
;
phich_resource
=
"ONESIXTH"
;
srs_enable
=
"DISABLE"
;
...
...
@@ -64,9 +64,9 @@ eNBs =
srs_ackNackST
=;
srs_MaxUpPts
=;*/
pusch_p0_Nominal
= -
90
;
pusch_p0_Nominal
= -
108
;
pusch_alpha
=
"AL1"
;
pucch_p0_Nominal
= -
96
;
pucch_p0_Nominal
= -
108
;
msg3_delta_Preamble
=
6
;
pucch_deltaF_Format1
=
"deltaF2"
;
pucch_deltaF_Format1b
=
"deltaF3"
;
...
...
@@ -81,8 +81,8 @@ eNBs =
rach_messageSizeGroupA
= ;
rach_messagePowerOffsetGroupB
= ;
*/
rach_powerRampingStep
=
4
;
rach_preambleInitialReceivedTargetPower
= -
10
8
;
rach_powerRampingStep
=
2
;
rach_preambleInitialReceivedTargetPower
= -
10
0
;
rach_preambleTransMax
=
10
;
rach_raResponseWindowSize
=
10
;
rach_macContentionResolutionTimer
=
48
;
...
...
@@ -142,9 +142,9 @@ eNBs =
///
X2
target_enb_x2_ip_address
= ( {
ipv4
=
"127.0.0.1"
;
target_enb_x2_ip_address
= ( {
ipv4
=
"127.0.0.1
1
"
;
ipv6
=
"192:168:30::17"
;
active
=
"
yes
"
;
active
=
"
no
"
;
preference
=
"ipv4"
;
}
);
...
...
@@ -159,8 +159,8 @@ eNBs =
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
ENB_INTERFACE_NAME_FOR_X2C
=
"lo"
;
ENB_IPV4_ADDRESS_FOR_X2C
=
"127.0.0.1/24"
;
ENB_PORT_FOR_X2C
=
1234
;
# Spec ?
ENB_IPV4_ADDRESS_FOR_X2C
=
"127.0.0.1
0
/24"
;
ENB_PORT_FOR_X2C
=
36422
;
ENB_INTERFACE_NAME_FOR_X2U
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_X2U
=
"10.0.1.100/24"
;
...
...
@@ -216,8 +216,8 @@ eNBs =
Nid_cell_mbsfn
=
0
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
1
20
;
tx_gain
=
25
;
rx_gain
=
20
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
...
...
@@ -227,7 +227,7 @@ eNBs =
pucch_nRB_CQI
=
1
;
pucch_nCS_AN
=
0
;
pucch_n1_AN
=
32
;
pdsch_referenceSignalPower
=
-
29
;
pdsch_referenceSignalPower
=
0
;
pdsch_p_b
=
0
;
pusch_n_SB
=
1
;
pusch_enable64QAM
=
"DISABLE"
;
...
...
@@ -236,7 +236,7 @@ eNBs =
pusch_groupHoppingEnabled
=
"ENABLE"
;
pusch_groupAssignment
=
0
;
pusch_sequenceHoppingEnabled
=
"DISABLE"
;
pusch_nDMRS1
=
1
;
pusch_nDMRS1
=
0
;
phich_duration
=
"NORMAL"
;
phich_resource
=
"ONESIXTH"
;
srs_enable
=
"DISABLE"
;
...
...
@@ -245,9 +245,9 @@ eNBs =
srs_ackNackST
=;
srs_MaxUpPts
=;*/
pusch_p0_Nominal
= -
90
;
pusch_p0_Nominal
= -
108
;
pusch_alpha
=
"AL1"
;
pucch_p0_Nominal
= -
96
;
pucch_p0_Nominal
= -
108
;
msg3_delta_Preamble
=
6
;
pucch_deltaF_Format1
=
"deltaF2"
;
pucch_deltaF_Format1b
=
"deltaF3"
;
...
...
@@ -262,8 +262,8 @@ eNBs =
rach_messageSizeGroupA
= ;
rach_messagePowerOffsetGroupB
= ;
*/
rach_powerRampingStep
=
4
;
rach_preambleInitialReceivedTargetPower
= -
10
8
;
rach_powerRampingStep
=
2
;
rach_preambleInitialReceivedTargetPower
= -
10
0
;
rach_preambleTransMax
=
10
;
rach_raResponseWindowSize
=
10
;
rach_macContentionResolutionTimer
=
48
;
...
...
@@ -323,9 +323,9 @@ eNBs =
///
X2
target_enb_x2_ip_address
= ( {
ipv4
=
"127.0.0.1"
;
target_enb_x2_ip_address
= ( {
ipv4
=
"127.0.0.1
0
"
;
ipv6
=
"192:168:30::17"
;
active
=
"
no
"
;
active
=
"
yes
"
;
preference
=
"ipv4"
;
}
);
...
...
@@ -340,8 +340,8 @@ eNBs =
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
ENB_INTERFACE_NAME_FOR_X2C
=
"lo"
;
ENB_IPV4_ADDRESS_FOR_X2C
=
"127.0.0.1/24"
;
ENB_PORT_FOR_X2C
=
1234
;
# Spec ?
ENB_IPV4_ADDRESS_FOR_X2C
=
"127.0.0.1
1
/24"
;
ENB_PORT_FOR_X2C
=
36422
;
# Spec ?
ENB_INTERFACE_NAME_FOR_X2U
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_X2U
=
"10.0.1.100/24"
;
...
...
targets/SIMU/EXAMPLES/OSD/WEBXML/template_42.xml
View file @
d6b7e02d
...
...
@@ -53,9 +53,39 @@
</eNB_MOBILITY>
</MOBILITY>
</TOPOLOGY_CONFIG>
<APPLICATION_CONFIG>
<CUSTOMIZED_TRAFFIC>
<SOURCE_ID>
2
</SOURCE_ID>
<TRANSPORT_PROTOCOL>
udp
</TRANSPORT_PROTOCOL>
<FLOW_START_ms>
1600
</FLOW_START_ms>
<FLOW_DURATION_ms>
3000
</FLOW_DURATION_ms>
<IP_VERSION>
ipv4
</IP_VERSION>
<DESTINATION_ID>
0
</DESTINATION_ID>
<IDT_DIST>
uniform
</IDT_DIST>
<IDT_MIN_ms>
10
</IDT_MIN_ms>
<IDT_MAX_ms>
50
</IDT_MAX_ms>
<SIZE_DIST>
uniform
</SIZE_DIST>
<SIZE_MIN_byte>
850
</SIZE_MIN_byte>
<SIZE_MAX_byte>
1408
</SIZE_MAX_byte>
</CUSTOMIZED_TRAFFIC>
</APPLICATION_CONFIG>
<EMULATION_CONFIG>
<EMULATION_TIME_ms>
10000
</EMULATION_TIME_ms>
<EMULATION_TIME_ms>
3000
</EMULATION_TIME_ms>
<CURVE>
disable
</CURVE>
<!-- option: enabled, disabled. If CURVE is enabled, graphes
are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
<BACKGROUND_STATS>
enable
</BACKGROUND_STATS>
<!-- option: enable, disable. If enable,
it allows to ptrint BACKGROUND statistics: Nb packets, throughputs,etc-->
<PERFORMANCE_METRICS>
<THROUGHPUT>
enable
</THROUGHPUT>
<!-- option: enable, disable. If enable,
throughput measurements are plotted in real time-->
<LATENCY>
enable
</LATENCY>
<!-- option: enable, disable. If enable, latency
measurements are plotted in real time-->
<OWD_RADIO_ACCESS>
enable
</OWD_RADIO_ACCESS>
<!-- option: enable, disable. If
enable owd curve shows the one way radio access delay, else it shows end to end owd -->
</PERFORMANCE_METRICS>
<LOG>
<!-- set the global log level -->
<LEVEL>
debug
</LEVEL>
...
...
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