Merge remote-tracking branch 'origin/remove-unused-stuff' into integration_2022_wk11
This commit is contained in:
@@ -37,12 +37,6 @@ include("cmake_targets/macros.cmake")
|
||||
###################################
|
||||
include(FindPkgConfig)
|
||||
|
||||
pkg_search_module(LIBXML2 libxml-2.0 REQUIRED)
|
||||
include_directories(${LIBXML2_INCLUDE_DIRS})
|
||||
|
||||
pkg_search_module(LIBXSLT libxslt REQUIRED)
|
||||
include_directories(${LIBXSLT_INCLUDE_DIRS})
|
||||
|
||||
pkg_search_module(OPENSSL openssl REQUIRED)
|
||||
include_directories(${OPENSSL_INCLUDE_DIRS})
|
||||
|
||||
@@ -743,7 +737,6 @@ include_directories("${OPENAIR2_DIR}/UTIL/OSA")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL/MEM")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL/LISTS")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL/FIFO")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL/OCG")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL/MATH")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL/TIMER")
|
||||
include_directories("${OPENAIR2_DIR}/UTIL/OMG")
|
||||
@@ -2162,7 +2155,6 @@ target_link_libraries(lte-softmodem PRIVATE
|
||||
${NAS_UE_LIB} ITTI SIMU SIMU_ETH
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries(lte-softmodem PRIVATE ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries(lte-softmodem PRIVATE pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp)
|
||||
target_link_libraries(lte-softmodem PRIVATE ${T_LIB})
|
||||
target_link_libraries(lte-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
@@ -2225,7 +2217,6 @@ target_link_libraries(lte-uesoftmodem PRIVATE
|
||||
${NAS_UE_LIB} ITTI ${ATLAS_LIBRARIES}
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries(lte-uesoftmodem PRIVATE ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries(lte-uesoftmodem PRIVATE pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${ATLAS_LIBRARIES})
|
||||
target_link_libraries(lte-uesoftmodem PRIVATE ${T_LIB})
|
||||
target_link_libraries(lte-uesoftmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
@@ -2267,7 +2258,6 @@ target_link_libraries(nr-softmodem PRIVATE
|
||||
x2ap f1ap m2ap m3ap e1ap
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries(nr-softmodem PRIVATE ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries(nr-softmodem PRIVATE pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} sctp ${ATLAS_LIBRARIES})
|
||||
target_link_libraries(nr-softmodem PRIVATE ${T_LIB})
|
||||
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
@@ -2330,7 +2320,6 @@ target_link_libraries(nr-uesoftmodem PRIVATE
|
||||
ITTI ${ATLAS_LIBRARIES} LIB_5GNAS_GNB LIB_NAS_SIMUE ${NAS_SIM_LIB} SIMU SIMU_ETH
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries(nr-uesoftmodem PRIVATE ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries(nr-uesoftmodem PRIVATE pthread m CONFIG_LIB rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries(nr-uesoftmodem PRIVATE ${T_LIB})
|
||||
target_link_libraries(nr-uesoftmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
# - Find freediameter
|
||||
# Find the native FreeDiameter includes and libraries
|
||||
#
|
||||
# FREEDIAMETER_FOUND - True if FreeDiameter found.
|
||||
# FREEDIAMETER_INCLUDE_DIR - where to find gnutls.h, etc.
|
||||
# FREEDIAMETER_LIBRARIES - List of libraries when using gnutls.
|
||||
# FREEDIAMETER_HSS_S6A_ENABLED - true if FreeDiameter enabled for S6A interface
|
||||
|
||||
|
||||
if (FREEDIAMETER_INCLUDE_DIR AND FREEDIAMETER_LIBRARIES)
|
||||
set(FREEDIAMETER_FIND_QUIETLY TRUE)
|
||||
endif (FREEDIAMETER_INCLUDE_DIR AND FREEDIAMETER_LIBRARIES)
|
||||
|
||||
# Include dir
|
||||
find_path(FREEDIAMETER_INCLUDE_DIR
|
||||
NAMES
|
||||
freeDiameter/freeDiameter-host.h
|
||||
freeDiameter/libfdcore.h
|
||||
freeDiameter/libfdproto.h
|
||||
)
|
||||
|
||||
# Library
|
||||
find_library(FREEDIAMETER_LIBRARY
|
||||
NAMES fdcore
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set FREEDIAMETER_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FREEDIAMETER DEFAULT_MSG FREEDIAMETER_LIBRARY FREEDIAMETER_INCLUDE_DIR)
|
||||
|
||||
IF(FREEDIAMETER_FOUND)
|
||||
SET( FREEDIAMETER_LIBRARIES ${FREEDIAMETER_LIBRARY} )
|
||||
ELSE(FREEDIAMETER_FOUND)
|
||||
SET( FREEDIAMETER_LIBRARIES )
|
||||
ENDIF(FREEDIAMETER_FOUND)
|
||||
|
||||
find_library(FREEDIAMETER_LIBRARY2
|
||||
NAMES fdproto
|
||||
)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FREEDIAMETER2 DEFAULT_MSG FREEDIAMETER_LIBRARY2 FREEDIAMETER_INCLUDE_DIR)
|
||||
IF(FREEDIAMETER2_FOUND)
|
||||
SET( FREEDIAMETER_LIBRARIES ${FREEDIAMETER_LIBRARIES} ${FREEDIAMETER_LIBRARY2} )
|
||||
ELSE(FREEDIAMETER2_FOUND)
|
||||
SET( FREEDIAMETER_LIBRARIES )
|
||||
ENDIF(FREEDIAMETER2_FOUND)
|
||||
|
||||
|
||||
# Lastly make it so that the FREEDIAMETER_LIBRARY and FREEDIAMETER_INCLUDE_DIR variables
|
||||
# only show up under the advanced options in the gui cmake applications.
|
||||
MARK_AS_ADVANCED( FREEDIAMETER_LIBRARY FREEDIAMETER_INCLUDE_DIR )
|
||||
|
||||
# Now check if the library is patched for OPENAIR HSS S6A.
|
||||
IF(FREEDIAMETER_FOUND)
|
||||
IF( FREEDIAMETER_INCLUDE_DIR )
|
||||
# Extract FD_PROJECT_VERSION_MAJOR, FD_PROJECT_VERSION_MINOR from freeDiameter-host.h
|
||||
# Read the whole file:
|
||||
#
|
||||
FILE(READ "${FREEDIAMETER_INCLUDE_DIR}/freeDiameter/freeDiameter-host.h" _freeDiameter_HOST_H_CONTENTS)
|
||||
|
||||
STRING(REGEX REPLACE ".*#define FD_PROJECT_VERSION_MAJOR ([0-9]+).*" "\\1" FD_PROJECT_VERSION_MAJOR "${_freeDiameter_HOST_H_CONTENTS}")
|
||||
STRING(REGEX REPLACE ".*#define FD_PROJECT_VERSION_MINOR ([0-9]+).*" "\\1" FD_PROJECT_VERSION_MINOR "${_freeDiameter_HOST_H_CONTENTS}")
|
||||
|
||||
IF(FD_PROJECT_VERSION_MAJOR GREATER 0)
|
||||
MATH(EXPR FREEDIAMETER_VERSION_VALUE "${FD_PROJECT_VERSION_MAJOR} * 100 + ${FD_PROJECT_VERSION_MINOR} * 10")
|
||||
SET(FREEDIAMETER_VERSION "${FREEDIAMETER_VERSION_VALUE}" CACHE INTERNAL "Freediameter release version")
|
||||
MESSAGE(STATUS "freeDiameter version found ${FREEDIAMETER_VERSION}")
|
||||
ENDIF(FD_PROJECT_VERSION_MAJOR GREATER 0)
|
||||
ENDIF( FREEDIAMETER_INCLUDE_DIR )
|
||||
GET_FILENAME_COMPONENT(FREEDIAMETER_PATH ${FREEDIAMETER_LIBRARY} PATH)
|
||||
IF( NOT( "${FREEDIAMETER_VERSION_TEST_FOR}" STREQUAL "${FREEDIAMETER_LIBRARIES}" ))
|
||||
INCLUDE (CheckLibraryExists)
|
||||
MESSAGE(STATUS "Checking freeDiameter patched for S6A")
|
||||
UNSET(FREEDIAMETER_HSS_S6A_ENABLED)
|
||||
UNSET(FREEDIAMETER_HSS_S6A_ENABLED CACHE)
|
||||
UNSET(DICT_S6A_FOUND)
|
||||
UNSET(DICT_S6A_FOUND CACHE)
|
||||
|
||||
|
||||
FIND_FILE(DICT_S6A_FOUND NAMES dict_s6a.fdx PATHS ${FREEDIAMETER_PATH} ${FREEDIAMETER_PATH}/freeDiameter)
|
||||
IF(DICT_S6A_FOUND)
|
||||
SET( FREEDIAMETER_HSS_S6A_ENABLED TRUE CACHE INTERNAL "dict_s6a.fdx Found")
|
||||
ELSE(DICT_S6A_FOUND)
|
||||
SET( FREEDIAMETER_HSS_S6A_ENABLED FALSE CACHE INTERNAL "dict_s6a.fdx not Found")
|
||||
ENDIF(DICT_S6A_FOUND)
|
||||
SET( FREEDIAMETER_VERSION_TEST_FOR ${FREEDIAMETER_LIBRARIES} CACHE INTERNAL "Version the test was made against" )
|
||||
ENDIF (NOT( "${FREEDIAMETER_VERSION_TEST_FOR}" STREQUAL "${FREEDIAMETER_LIBRARIES}" ))
|
||||
ENDIF(FREEDIAMETER_FOUND)
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
# - Find mysqlclient
|
||||
#
|
||||
# -*- cmake -*-
|
||||
#
|
||||
# Find the native MySQL includes and library
|
||||
#
|
||||
# MySQL_INCLUDE_DIR - where to find mysql.h, etc.
|
||||
# MySQL_LIBRARIES - List of libraries when using MySQL.
|
||||
# MySQL_FOUND - True if MySQL found.
|
||||
|
||||
IF (MySQL_INCLUDE_DIR AND MySQL_LIBRARY)
|
||||
# Already in cache, be silent
|
||||
SET(MySQL_FIND_QUIETLY TRUE)
|
||||
ENDIF (MySQL_INCLUDE_DIR AND MySQL_LIBRARY)
|
||||
|
||||
# Include dir
|
||||
FIND_PATH(MySQL_INCLUDE_DIR
|
||||
NAMES mysql.h
|
||||
PATH_SUFFIXES mysql
|
||||
)
|
||||
|
||||
# Library
|
||||
#SET(MySQL_NAMES mysqlclient mysqlclient_r)
|
||||
SET(MySQL_NAMES mysqlclient)
|
||||
FIND_LIBRARY(MySQL_LIBRARY
|
||||
NAMES ${MySQL_NAMES}
|
||||
PATHS /usr/lib /usr/local/lib
|
||||
PATH_SUFFIXES mysql
|
||||
)
|
||||
|
||||
IF (MySQL_INCLUDE_DIR AND MySQL_LIBRARY)
|
||||
SET(MySQL_FOUND TRUE)
|
||||
SET( MySQL_LIBRARIES ${MySQL_LIBRARY} )
|
||||
ELSE (MySQL_INCLUDE_DIR AND MySQL_LIBRARY)
|
||||
SET(MySQL_FOUND FALSE)
|
||||
SET( MySQL_LIBRARIES )
|
||||
ENDIF (MySQL_INCLUDE_DIR AND MySQL_LIBRARY)
|
||||
|
||||
|
||||
IF (MySQL_FOUND)
|
||||
IF (NOT MySQL_FIND_QUIETLY)
|
||||
MESSAGE(STATUS "Found MySQL: ${MySQL_LIBRARY}")
|
||||
ENDIF (NOT MySQL_FIND_QUIETLY)
|
||||
ELSE (MySQL_FOUND)
|
||||
IF (MySQL_FIND_REQUIRED)
|
||||
MESSAGE(STATUS "Looked for MySQL libraries named ${MySQL_NAMES}.")
|
||||
MESSAGE(FATAL_ERROR "Could NOT find MySQL library")
|
||||
ENDIF (MySQL_FIND_REQUIRED)
|
||||
ENDIF (MySQL_FOUND)
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
MySQL_LIBRARY
|
||||
MySQL_INCLUDE_DIR
|
||||
)
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
# - Find PostgreSQL library
|
||||
#
|
||||
# This module defines:
|
||||
# POSTGRESQL_FOUND - True if the package is found
|
||||
# POSTGRESQL_INCLUDE_DIR - containing libpq-fe.h
|
||||
# POSTGRESQL_LIBRARIES - Libraries to link to use PQ functions.
|
||||
|
||||
if (POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)
|
||||
set(POSTGRESQL_FIND_QUIETLY TRUE)
|
||||
endif (POSTGRESQL_INCLUDE_DIR AND POSTGRESQL_LIBRARIES)
|
||||
|
||||
# Include dir
|
||||
find_path(POSTGRESQL_INCLUDE_DIR
|
||||
NAMES libpq-fe.h
|
||||
PATH_SUFFIXES pgsql postgresql
|
||||
)
|
||||
|
||||
# Library
|
||||
find_library(POSTGRESQL_LIBRARY
|
||||
NAMES pq
|
||||
)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set POSTGRESQL_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(POSTGRESQL DEFAULT_MSG POSTGRESQL_LIBRARY POSTGRESQL_INCLUDE_DIR)
|
||||
|
||||
IF(POSTGRESQL_FOUND)
|
||||
SET( POSTGRESQL_LIBRARIES ${POSTGRESQL_LIBRARY} )
|
||||
ELSE(POSTGRESQL_FOUND)
|
||||
SET( POSTGRESQL_LIBRARIES )
|
||||
ENDIF(POSTGRESQL_FOUND)
|
||||
|
||||
# Lastly make it so that the POSTGRESQL_LIBRARY and POSTGRESQL_INCLUDE_DIR variables
|
||||
# only show up under the advanced options in the gui cmake applications.
|
||||
MARK_AS_ADVANCED( POSTGRESQL_LIBRARY POSTGRESQL_INCLUDE_DIR )
|
||||
@@ -1,264 +0,0 @@
|
||||
# Declare variables for path prefixes for different types of files.
|
||||
# NB: depends on 'multi_kernel' and 'uninstall_target'.
|
||||
|
||||
# fill_install_prefixes(<project_name> <project_prefix>
|
||||
# [BASE_INSTALL_PREFIX <base_install_prefix>]
|
||||
# [KERNEL]
|
||||
# )
|
||||
#
|
||||
# Setup variables <project_prefix>_* to the install prefixes for
|
||||
# different project components.
|
||||
# Precisely, variables with next sufficies are set:
|
||||
# INSTALL_PREFIX_EXEC - executables
|
||||
# INSTALL_PREFIX_READONLY - readonly files
|
||||
# INSTALL_PREFIX_GLOBAL_CONF - global configuration files
|
||||
# INSTALL_PREFIX_PREFIX_LIB - libraries
|
||||
# INSTALL_INCLUDE_DIR - include directory(for flags to compiler)
|
||||
# INSTALL_PREFIX_INCLUDE - include files
|
||||
# INSTALL_PREFIX_TEMP_SESSION - temporary files(exists until system restarts)
|
||||
# INSTALL_PREFIX_TEMP - temporary files(preserved even when system restats)
|
||||
# INSTALL_PREFIX_STATE - files which describe current state of the project.
|
||||
# INSTALL_PREFIX_CACHE - cache files
|
||||
# INSTALL_PREFIX_VAR - other modifiable files
|
||||
# INSTALL_PREFIX_DOC - documentation files
|
||||
# INSTALL_PREFIX_EXAMPLES - documentation files
|
||||
#
|
||||
# With 'KERNEL' option enabled paths for kernel-related files also set:
|
||||
# INSTALL_KINCLUDE_DIR - directory for include when build kernel components
|
||||
# INSTALL_PREFIX_KINCLUDE - include files for the kernel.
|
||||
#
|
||||
# Additionally, with 'KERNEL' option enabled, several variables are set to
|
||||
# paths, which contains "%kernel%" pattern.
|
||||
# These paths are intended for kernel-dependent files; for make paths
|
||||
# complete one should replace "%kernel%" substring with version of the
|
||||
# kernel.
|
||||
# Next kernel-dependend paths are set(sufficies only):
|
||||
# KERNEL_INSTALL_PREFIX_KMODULE - directory for install kernel modules
|
||||
# KERNEL_INSTALL_PREFIX_KSYMVERS - directory for install kernel modules' symvers files.
|
||||
# KERNEL_INSTALL_INCLUDE_KERNEL_DIR - include directory with kernel-dependent headers.
|
||||
# KERNEL_INSTALL_PREFIX_INCLUDE_KERNEL - include files, which depends from kernel.
|
||||
#
|
||||
# Iff option 'COMMON_INSTALL_PREFIX' is given, all paths above are
|
||||
# calculated using <base_install_prefix> as base prefix.
|
||||
# Otherwise, CMAKE_INSTALL_PREFIX is used for that purpose.
|
||||
#
|
||||
# Additionally,
|
||||
# INSTALL_TYPE
|
||||
# variable(suffix) is set to one of:
|
||||
# - "GLOBAL_OPT" - install into "/opt",
|
||||
# - "GLOBAL" - global installation except one into "/opt",
|
||||
# - "LOCAL" - local installation.
|
||||
function(fill_install_prefixes project_name project_prefix)
|
||||
cmake_parse_arguments(fip "KERNEL" "BASE_INSTALL_PREFIX" "" ${ARGN})
|
||||
if(fip_UNPARSED_ARGUMENTS)
|
||||
list(GET fip_UNPARSED_ARGUMENTS 0 exceeded_arg)
|
||||
message(SEND_ERROR "Exceeded argument: ${exceeded_arg}")
|
||||
endif(fip_UNPARSED_ARGUMENTS)
|
||||
if(NOT fip_BASE_INSTALL_PREFIX)
|
||||
set(fip_BASE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||
endif(NOT fip_BASE_INSTALL_PREFIX)
|
||||
|
||||
# Follow conventions about paths listed in
|
||||
# devel-docs/general/path_conventions.txt
|
||||
# in kedr-devel package.
|
||||
|
||||
# Determine type of installation
|
||||
if(fip_BASE_INSTALL_PREFIX MATCHES "^/opt")
|
||||
set(fip_INSTALL_TYPE "GLOBAL_OPT")
|
||||
elseif(fip_BASE_INSTALL_PREFIX MATCHES "^/usr"
|
||||
OR fip_BASE_INSTALL_PREFIX STREQUAL "/"
|
||||
)
|
||||
set(fip_INSTALL_TYPE "GLOBAL")
|
||||
else()
|
||||
set(fip_INSTALL_TYPE "LOCAL")
|
||||
endif()
|
||||
|
||||
# 1
|
||||
if(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
set(fip_INSTALL_PREFIX_EXEC "/opt/${project_name}/bin")
|
||||
else(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
set(fip_INSTALL_PREFIX_EXEC "${fip_BASE_INSTALL_PREFIX}/bin")
|
||||
endif(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
# 2
|
||||
set(fip_INSTALL_PREFIX_EXEC_AUX
|
||||
"${fip_BASE_INSTALL_PREFIX}/lib/${project_name}"
|
||||
)
|
||||
# 3
|
||||
set(fip_INSTALL_PREFIX_READONLY
|
||||
"${fip_BASE_INSTALL_PREFIX}/share/${project_name}"
|
||||
)
|
||||
# 4
|
||||
set(fip_INSTALL_PREFIX_MANPAGE
|
||||
"${fip_BASE_INSTALL_PREFIX}/share/man"
|
||||
)
|
||||
# 5
|
||||
if(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
set(fip_INSTALL_PREFIX_GLOBAL_CONF "/etc/opt/${project_name}")
|
||||
elseif(fip_INSTALL_TYPE STREQUAL "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_GLOBAL_CONF "/etc/${project_name}")
|
||||
else(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
set(fip_INSTALL_PREFIX_GLOBAL_CONF
|
||||
"${fip_BASE_INSTALL_PREFIX}/etc/${project_name}"
|
||||
)
|
||||
endif(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
# 6
|
||||
set(fip_INSTALL_PREFIX_LIB "${fip_BASE_INSTALL_PREFIX}/lib")
|
||||
# 7
|
||||
set(fip_INSTALL_PREFIX_LIB_AUX
|
||||
"${fip_BASE_INSTALL_PREFIX}/lib/${project_name}"
|
||||
)
|
||||
# 8
|
||||
set(fip_INSTALL_INCLUDE_DIR "${fip_BASE_INSTALL_PREFIX}/include")
|
||||
|
||||
set(fip_INSTALL_PREFIX_INCLUDE
|
||||
"${fip_INSTALL_INCLUDE_DIR}/${project_name}"
|
||||
)
|
||||
# 9
|
||||
set(fip_INSTALL_PREFIX_TEMP_SESSION "/tmp/${project_name}")
|
||||
# 10
|
||||
if(fip_INSTALL_TYPE MATCHES "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_TEMP "/var/tmp/${project_name}")
|
||||
else(fip_INSTALL_TYPE MATCHES "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_TEMP
|
||||
"${fip_BASE_INSTALL_PREFIX}/var/tmp/${project_name}"
|
||||
)
|
||||
endif(fip_INSTALL_TYPE MATCHES "GLOBAL")
|
||||
# 11
|
||||
if(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
set(fip_INSTALL_PREFIX_STATE
|
||||
"/var/opt/${project_name}/lib/${project_name}"
|
||||
)
|
||||
elseif(fip_INSTALL_TYPE STREQUAL "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_STATE "/var/lib/${project_name}")
|
||||
else(fip_INSTALL_TYPE STREQUAL "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_STATE
|
||||
"${fip_BASE_INSTALL_PREFIX}/var/lib/${project_name}"
|
||||
)
|
||||
endif(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
# 12
|
||||
if(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
set(fip_INSTALL_PREFIX_CACHE
|
||||
"/var/opt/${project_name}/cache/${project_name}"
|
||||
)
|
||||
elseif(fip_INSTALL_TYPE STREQUAL "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_CACHE "/var/cache/${project_name}")
|
||||
else(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
set(fip_INSTALL_PREFIX_CACHE
|
||||
"${fip_BASE_INSTALL_PREFIX}/var/cache/${project_name}"
|
||||
)
|
||||
endif(fip_INSTALL_TYPE STREQUAL "GLOBAL_OPT")
|
||||
# 13
|
||||
if(fip_INSTALL_TYPE MATCHES "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_VAR "/var/opt/${project_name}")
|
||||
else(fip_INSTALL_TYPE MATCHES "GLOBAL")
|
||||
set(fip_INSTALL_PREFIX_VAR
|
||||
"${fip_BASE_INSTALL_PREFIX}/var/${project_name}"
|
||||
)
|
||||
endif(fip_INSTALL_TYPE MATCHES "GLOBAL")
|
||||
# 14
|
||||
set(fip_INSTALL_PREFIX_DOC
|
||||
"${fip_BASE_INSTALL_PREFIX}/share/doc/${project_name}"
|
||||
)
|
||||
|
||||
# Set derivative install path and prefixes
|
||||
|
||||
# additional, 4
|
||||
set(fip_INSTALL_PREFIX_EXAMPLES
|
||||
"${fip_INSTALL_PREFIX_READONLY}/examples")
|
||||
|
||||
# Export symbols to the outer scope
|
||||
foreach(suffix
|
||||
INSTALL_TYPE
|
||||
INSTALL_PREFIX_EXEC
|
||||
INSTALL_PREFIX_EXEC_AUX
|
||||
INSTALL_PREFIX_READONLY
|
||||
INSTALL_PREFIX_MANPAGE
|
||||
INSTALL_PREFIX_GLOBAL_CONF
|
||||
INSTALL_PREFIX_LIB
|
||||
INSTALL_PREFIX_LIB_AUX
|
||||
INSTALL_INCLUDE_DIR
|
||||
INSTALL_PREFIX_INCLUDE
|
||||
INSTALL_PREFIX_TEMP_SESSION
|
||||
INSTALL_PREFIX_TEMP
|
||||
INSTALL_PREFIX_STATE
|
||||
INSTALL_PREFIX_CACHE
|
||||
INSTALL_PREFIX_VAR
|
||||
INSTALL_PREFIX_DOC
|
||||
INSTALL_PREFIX_EXAMPLES
|
||||
)
|
||||
set(${project_prefix}_${suffix} "${fip_${suffix}}" PARENT_SCOPE)
|
||||
endforeach(suffix)
|
||||
|
||||
if(fip_KERNEL)
|
||||
# Set derivative install path and prefixes
|
||||
# additional, 1
|
||||
if(fip_INSTALL_TYPE MATCHES GLOBAL)
|
||||
set(fip_KERNEL_INSTALL_PREFIX_KMODULE
|
||||
"/lib/modules/%kernel%/extra"
|
||||
)
|
||||
else(fip_INSTALL_TYPE MATCHES GLOBAL)
|
||||
set(fip_KERNEL_INSTALL_PREFIX_KMODULE
|
||||
"${fip_INSTALL_PREFIX_LIB}/modules/%kernel%/extra"
|
||||
)
|
||||
endif(fip_INSTALL_TYPE MATCHES GLOBAL)
|
||||
|
||||
# additional, 2
|
||||
set(fip_KERNEL_INSTALL_PREFIX_KSYMVERS
|
||||
"${fip_INSTALL_PREFIX_LIB}/modules/%kernel%/symvers"
|
||||
)
|
||||
# additional, 3
|
||||
set(fip_INSTALL_KINCLUDE_DIR "${fip_INSTALL_INCLUDE_DIR}")
|
||||
set(fip_INSTALL_PREFIX_KINCLUDE "${fip_INSTALL_PREFIX_INCLUDE}")
|
||||
|
||||
# Kernel include files, which depends from kernel version.
|
||||
# This prefix is not listed in path conventions.
|
||||
set(fip_KERNEL_INSTALL_INCLUDE_KERNEL_DIR
|
||||
"${fip_BASE_INSTALL_PREFIX}/include-kernel/%kernel%"
|
||||
)
|
||||
|
||||
set(fip_KERNEL_INSTALL_PREFIX_INCLUDE_KERNEL
|
||||
"${fip_KERNEL_INSTALL_INCLUDE_KERNEL_DIR}/${project_name}-kernel"
|
||||
)
|
||||
|
||||
# Export symbols to the outer scope
|
||||
foreach(suffix
|
||||
KERNEL_INSTALL_PREFIX_KMODULE
|
||||
KERNEL_INSTALL_PREFIX_KSYMVERS
|
||||
INSTALL_KINCLUDE_DIR
|
||||
INSTALL_PREFIX_KINCLUDE
|
||||
KERNEL_INSTALL_INCLUDE_KERNEL_DIR
|
||||
KERNEL_INSTALL_PREFIX_INCLUDE_KERNEL
|
||||
)
|
||||
set(${project_prefix}_${suffix} "${fip_${suffix}}" PARENT_SCOPE)
|
||||
endforeach(suffix)
|
||||
endif(fip_KERNEL)
|
||||
endfunction(fill_install_prefixes project_name project_prefix)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Kernel-dependent paths.
|
||||
#
|
||||
# Some deliverables may depends on linux kernel.
|
||||
#
|
||||
# For make "one user installation for several kernels" paradigm works,
|
||||
# installation directory for that deliverables should include
|
||||
# kernel-version part(like "3.10.2-generic").
|
||||
#
|
||||
# So, components installed by user installation can determine at runtime,
|
||||
# which kernel-dependent deliverable should be used on currently loaded system.
|
||||
# They do selection using 'uname -r' request.
|
||||
#
|
||||
# For define variables represented kernel-dependent directories,
|
||||
# we use strings containing "%kernel%" stem.
|
||||
|
||||
# kernel_path(kernel_version RESULT_VARIABLE pattern ...)
|
||||
#
|
||||
# Form concrete path representation from kernel-dependent pattern(s).
|
||||
# Replace occurence of %kernel% in pattern(s) with given @kernel_version string.
|
||||
# Result is stored in the RESULT_VARIABLE.
|
||||
#
|
||||
# @kernel_version may be concrete version of the kernel,
|
||||
# or variable reference in some language.
|
||||
macro(kernel_path kernel_version RESULT_VARIABLE pattern)
|
||||
string(REPLACE "%kernel%" "${kernel_version}" ${RESULT_VARIABLE} ${pattern} ${ARGN})
|
||||
endmacro(kernel_path kernel_version RESULT_VARIABLE pattern)
|
||||
@@ -594,19 +594,10 @@ check_install_oai_software() {
|
||||
case "$(get_distribution_release)" in
|
||||
"ubuntu18.04")
|
||||
add_cmake_repo
|
||||
specific_packages="libgcrypt11-dev guile-2.0-dev"
|
||||
;;
|
||||
"ubuntu20.04")
|
||||
specific_packages="guile-2.0-dev"
|
||||
;;
|
||||
"ubuntu21.04")
|
||||
specific_packages="guile-2.0-dev"
|
||||
;;
|
||||
"ubuntu22.04")
|
||||
specific_packages="guile-2.2-dev"
|
||||
specific_packages="libgcrypt11-dev"
|
||||
;;
|
||||
"debian11")
|
||||
specific_packages="guile-2.2-dev libz-dev"
|
||||
specific_packages="libz-dev"
|
||||
;;
|
||||
esac
|
||||
$SUDO apt-get install -y \
|
||||
@@ -627,8 +618,6 @@ check_install_oai_software() {
|
||||
libsctp-dev \
|
||||
libssl-dev \
|
||||
libtool \
|
||||
libxslt1-dev \
|
||||
libtasn1-6-dev \
|
||||
patch \
|
||||
openssl \
|
||||
xxd
|
||||
@@ -649,7 +638,6 @@ check_install_oai_software() {
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
git \
|
||||
guile-devel \
|
||||
atlas-devel \
|
||||
pkgconfig \
|
||||
libconfig-devel \
|
||||
@@ -657,9 +645,7 @@ check_install_oai_software() {
|
||||
libgcrypt-devel \
|
||||
lksctp-tools \
|
||||
lksctp-tools-devel \
|
||||
libtasn1 \
|
||||
libtool \
|
||||
libxslt-devel \
|
||||
ninja-build \
|
||||
make \
|
||||
openssl \
|
||||
|
||||
@@ -460,7 +460,6 @@ int logInit (void)
|
||||
register_log_component("OTG_GP","dat",OTG_GP);
|
||||
register_log_component("OTG_GP_BG","dat",OTG_GP_BG);
|
||||
register_log_component("OTG_JITTER","dat",OTG_JITTER);
|
||||
register_log_component("OCG","",OCG);
|
||||
register_log_component("PERF","",PERF);
|
||||
register_log_component("OIP","",OIP);
|
||||
register_log_component("OCM","log",OCM);
|
||||
|
||||
@@ -197,7 +197,6 @@ typedef enum {
|
||||
MAC,
|
||||
EMU,
|
||||
SIM,
|
||||
OCG,
|
||||
OMG,
|
||||
OPT,
|
||||
OTG,
|
||||
|
||||
@@ -801,27 +801,6 @@ ID = LEGACY_OTG_TRACE
|
||||
GROUP = ALL:LEGACY_OTG:LEGACY_GROUP_TRACE:LEGACY
|
||||
FORMAT = string,log
|
||||
|
||||
ID = LEGACY_OCG_INFO
|
||||
DESC = OCG legacy logs - info level
|
||||
GROUP = ALL:LEGACY_OCG:LEGACY_GROUP_INFO:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_OCG_ERROR
|
||||
DESC = OCG legacy logs - error level
|
||||
GROUP = ALL:LEGACY_OCG:LEGACY_GROUP_ERROR:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_OCG_WARNING
|
||||
DESC = OCG legacy logs - warning level
|
||||
GROUP = ALL:LEGACY_OCG:LEGACY_GROUP_WARNING:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_OCG_DEBUG
|
||||
DESC = OCG legacy logs - debug level
|
||||
GROUP = ALL:LEGACY_OCG:LEGACY_GROUP_DEBUG:LEGACY
|
||||
FORMAT = string,log
|
||||
ID = LEGACY_OCG_TRACE
|
||||
DESC = OCG legacy logs - trace level
|
||||
GROUP = ALL:LEGACY_OCG:LEGACY_GROUP_TRACE:LEGACY
|
||||
FORMAT = string,log
|
||||
|
||||
ID = LEGACY_OCM_INFO
|
||||
DESC = OCM legacy logs - info level
|
||||
GROUP = ALL:LEGACY_OCM:LEGACY_GROUP_INFO:LEGACY
|
||||
|
||||
@@ -986,9 +986,6 @@ INPUT = \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/ringbuffer_queue.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/message_queue.h \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/ASYNC_IF/link_manager.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OCG/OCG.h \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OCG/OCG_extern.h \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/OCG/OCG_vars.h \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/LISTS/list.h \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/LISTS/list.c \
|
||||
@CMAKE_CURRENT_SOURCE_DIR@/../openair2/UTIL/LISTS/list2.c \
|
||||
|
||||
@@ -84,8 +84,6 @@ COPY --from=phy-sim-build \
|
||||
/lib64/libforms.so.2 \
|
||||
/lib64/libblas.so.3 \
|
||||
/lib64/liblapack.so.3 \
|
||||
/lib64/libexslt.so.0 \
|
||||
/lib64/libxslt.so.1 \
|
||||
/usr/lib64/libasan.so.5 \
|
||||
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
|
||||
/oai-ran/cmake_targets/ran_build/build/libldpc.so \
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/vars.h"
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
#include "OCG_vars.h"
|
||||
|
||||
#include "UTIL/LOG/log.h"
|
||||
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
#include "defs.h"
|
||||
#include "extern.h"
|
||||
#include "proto.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/OCG/OCG_extern.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
#include "UTIL/LOG/vcd_signal_dumper.h"
|
||||
#include "openair1/SIMULATION/ETH_TRANSPORT/extern.h"
|
||||
|
||||
@@ -52,7 +52,6 @@
|
||||
#include "SCHED/sched_eNB.h"
|
||||
#include "SCHED_UE/sched_UE.h"
|
||||
#include "SIMULATION/TOOLS/sim.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "unitary_defs.h"
|
||||
#include "dummy_functions.c"
|
||||
#include "executables/thread-common.h"
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/vars.h"
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
#include "UTIL/LISTS/list.h"
|
||||
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "SCHED/vars.h"
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
|
||||
#include "OCG_vars.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
#include "UTIL/LISTS/list.h"
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "SCHED/extern.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
#ifdef IFFT_FPGA
|
||||
#include "PHY/LTE_REFSIG/mod_table.h"
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "SCHED/sched_eNB.h"
|
||||
#include "LAYER2/MAC/mac_vars.h"
|
||||
|
||||
#include "OCG_vars.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "UTIL/LISTS/list.h"
|
||||
|
||||
|
||||
@@ -40,8 +40,6 @@
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
#endif
|
||||
|
||||
#include "OCG_vars.h"
|
||||
|
||||
#include "unitary_defs.h"
|
||||
|
||||
PHY_VARS_eNB *eNB,*eNB1,*eNB2;
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/vars.h"
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
#include "OCG_vars.h"
|
||||
|
||||
#ifdef XFORMS
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
#include "SCHED/vars.h"
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
|
||||
#include "OCG_vars.h"
|
||||
|
||||
#include "unitary_defs.h"
|
||||
|
||||
int current_dlsch_cqi; //FIXME!
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "SCHED/vars.h"
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
|
||||
#include "OCG_vars.h"
|
||||
#include "UTIL/LOG/log_extern.h"
|
||||
|
||||
#include "unitary_defs.h"
|
||||
|
||||
@@ -41,8 +41,6 @@
|
||||
#include "PHY/TOOLS/lte_phy_scope.h"
|
||||
#endif
|
||||
|
||||
#include "OCG_vars.h"
|
||||
|
||||
#define BW 20.0
|
||||
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
#endif //XFORMS
|
||||
|
||||
|
||||
#include "OCG_vars.h"
|
||||
#include "openair_hw.h"
|
||||
|
||||
#define BW 5.0
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "SCHED/sched_eNB.h"
|
||||
#include "SCHED_UE/sched_UE.h"
|
||||
#include "SIMULATION/TOOLS/sim.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "unitary_defs.h"
|
||||
#include "dummy_functions.c"
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
|
||||
#include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h"
|
||||
#include "nr_unitary_defs.h"
|
||||
#include "OCG_vars.h"
|
||||
#include <openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h>
|
||||
#include <openair2/RRC/LTE/rrc_vars.h>
|
||||
#include <executables/softmodem-common.h>
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "PHY_INTERFACE/phy_interface_extern.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/OPT/opt.h" // to test OPT
|
||||
#include "common/ran_context.h"
|
||||
|
||||
|
||||
@@ -39,8 +39,6 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
|
||||
@@ -43,8 +43,6 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
|
||||
@@ -38,9 +38,8 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#include "PHY/phy_extern.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
#include "SIMULATION/TOOLS/sim.h"
|
||||
#include "LAYER2/MAC/mac_proto.h"
|
||||
#include "LAYER2/MAC/mac_extern.h"
|
||||
@@ -43,8 +44,6 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#include "rlc.h"
|
||||
#include "common/utils/lte/prach_utils.h"
|
||||
|
||||
@@ -37,8 +37,6 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
|
||||
@@ -42,8 +42,6 @@
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "SIMULATION/TOOLS/sim.h" // for taus
|
||||
|
||||
|
||||
@@ -39,8 +39,6 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
|
||||
@@ -38,9 +38,8 @@
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "RRC/LTE/rrc_eNB_UE_context.h"
|
||||
|
||||
@@ -40,8 +40,6 @@
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#include "rlc.h"
|
||||
|
||||
@@ -42,8 +42,6 @@
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "SIMULATION/TOOLS/sim.h" // for taus
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
|
||||
|
||||
@@ -33,8 +33,6 @@
|
||||
#include "mac_extern.h"
|
||||
#include "SIMULATION/TOOLS/sim.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "common/ran_context.h"
|
||||
|
||||
|
||||
@@ -33,8 +33,6 @@
|
||||
#include "mac_extern.h"
|
||||
#include "SIMULATION/TOOLS/sim.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "common/ran_context.h"
|
||||
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "openair2/PHY_INTERFACE/phy_stub_UE.h"
|
||||
|
||||
#include "pdcp.h"
|
||||
|
||||
@@ -39,8 +39,6 @@
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "RRC/NR/nr_rrc_extern.h"
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "RRC/NR/nr_rrc_extern.h"
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
|
||||
|
||||
@@ -41,8 +41,6 @@
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "openair2/LAYER2/nr_rlc/nr_rlc_oai_api.h"
|
||||
|
||||
|
||||
@@ -40,8 +40,6 @@
|
||||
#include "LAYER2/MAC/mac_extern.h"
|
||||
#include "RRC/LTE/rrc_proto.h"
|
||||
#include "pdcp_primitives.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "otg_rx.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include <inttypes.h>
|
||||
|
||||
@@ -51,8 +51,6 @@ extern int otg_enabled;
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#include "NETWORK_DRIVER/LITE/constant.h"
|
||||
//#include "SIMULATION/ETH_TRANSPORT/extern.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/OCG/OCG_extern.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "UTIL/OTG/otg_tx.h"
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
|
||||
@@ -54,8 +54,6 @@
|
||||
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "common/utils/system.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/OCG/OCG_extern.h"
|
||||
#include "LAYER2/MAC/mac_extern.h"
|
||||
|
||||
#include "pdcp.h"
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
#include "LTE_SL-CommConfig-r12.h"
|
||||
#include "LTE_PeriodicBSR-Timer-r12.h"
|
||||
#include "LTE_RetxBSR-Timer-r12.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
|
||||
#include "LTE_BCCH-BCH-Message-MBMS.h"
|
||||
#include "LTE_BCCH-DL-SCH-Message-MBMS.h"
|
||||
@@ -79,8 +80,6 @@
|
||||
|
||||
#include "RRC/NAS/nas_config.h"
|
||||
#include "RRC/NAS/rb_config.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "UTIL/OSA/osa_defs.h"
|
||||
|
||||
|
||||
@@ -74,8 +74,6 @@
|
||||
|
||||
#include "RRC/NAS/nas_config.h"
|
||||
#include "RRC/NAS/rb_config.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
|
||||
#include "UTIL/OSA/osa_defs.h"
|
||||
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
|
||||
|
||||
#include "cli.h"
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "log.h"
|
||||
#include "log_extern.h"
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
/*! \file oml.h
|
||||
* \brief Data structure for OCG of OpenAir emulator
|
||||
* \brief Data structure for OML
|
||||
* \author N. Nikaein and A. Hafsaoui
|
||||
* \date 2011
|
||||
* \version 1.0
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
[Dolphin]
|
||||
Sorting=6
|
||||
Timestamp=2011,2,7,10,19,55
|
||||
@@ -1,231 +0,0 @@
|
||||
# Doxyfile 1.5.3
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
PROJECT_NAME = OpenAirInterface
|
||||
PROJECT_NUMBER = V1.0
|
||||
OUTPUT_DIRECTORY =
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF =
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = YES
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
QT_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
CPP_CLI_SUPPORT = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
EXTRACT_ANON_NSPACES = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_DIRECTORIES = NO
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = OCG.h OCG_vars.h OCG_extern.h OCG_get_opt.h OCG_detect_file.h OCG_parse_filename.h OCG_create_dir.h OCG_parse_XML.h OCG_save_XML.h OCG_generate_report.h Readme.doxy
|
||||
INPUT_ENCODING = UTF-8
|
||||
FILE_PATTERNS =
|
||||
RECURSIVE = NO
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXCLUDE_SYMBOLS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH = images/
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
REFERENCES_LINK_SOURCE = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
HTML_DYNAMIC_SECTIONS = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = YES
|
||||
TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = YES
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED =
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
MSCGEN_PATH =
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = YES
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = YES
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
CALLER_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH = /usr/bin/dot
|
||||
DOTFILE_DIRS =
|
||||
DOT_GRAPH_MAX_NODES = 50
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
||||
@@ -1,263 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG.c
|
||||
* \brief Main function containing the FSM of OCG
|
||||
* \author Navid Nikaein and Lusheng Wang
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <math.h>
|
||||
#include "OCG.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "OCG_detect_file.h"
|
||||
#include "OCG_parse_filename.h"
|
||||
#include "OCG_create_dir.h"
|
||||
#include "OCG_parse_XML.h"
|
||||
#include "OCG_save_XML.h"
|
||||
#include "OCG_generate_report.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
//#define TEST_OCG
|
||||
|
||||
|
||||
|
||||
#ifdef TEST_OCG
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#else
|
||||
int OCG_main(char is_local_server[FILENAME_LENGTH_MAX])
|
||||
{
|
||||
#endif
|
||||
int state = STATE_START_OCG;
|
||||
char web_XML_folder[DIR_LENGTH_MAX] = "";
|
||||
char output_dir[DIR_LENGTH_MAX] = ""; // the output folder during the OCG procedure. Change step by step
|
||||
|
||||
char *OPENAIR_TARGETS=getenv("OPENAIR_TARGETS");
|
||||
|
||||
if (OPENAIR_TARGETS == NULL) {
|
||||
LOG_E(OCG, "please set the PATH for OPENAIR_TARGETS");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (!strcmp(is_local_server, "0")) { // Eurecom web server
|
||||
strcpy(web_XML_folder, WEB_XML_FOLDER);
|
||||
strcat(output_dir, OUTPUT_DIR);
|
||||
} else { // local user
|
||||
|
||||
sprintf(web_XML_folder,"%s/SIMU/EXAMPLES/OSD/WEBXML/",getenv("OPENAIR_TARGETS"));
|
||||
sprintf(output_dir,"%s/SIMU/EXAMPLES/OSD/RESULTS/",getenv("OPENAIR_TARGETS"));
|
||||
/*
|
||||
strcpy(web_XML_folder, OPENAIR_TARGETS);
|
||||
strcpy(output_dir, OPENAIR_TARGETS);
|
||||
|
||||
char *slash;
|
||||
slash = web_XML_folder + strlen(web_XML_folder) - 1;
|
||||
if (strcmp(slash, "/")) { // check if the path OPENAIR_TARGETS is ended with a '/'
|
||||
strcat(web_XML_folder, "/");
|
||||
strcat(output_dir, "/");
|
||||
}
|
||||
strcat(web_XML_folder, "SIMU/EXAMPLES/OSD/WEBXML/");
|
||||
strcat(output_dir, "SIMU/EXAMPLES/OSD/RESULTS/");
|
||||
*/
|
||||
}
|
||||
|
||||
LOG_I(OCG, "Folder for detecting the XML configuration file is %s\n", web_XML_folder);
|
||||
LOG_I(OCG, "Folder for generating the results is %s\n", output_dir);
|
||||
LOG_I(OCG, "OSD XML config file is %s\n", is_local_server);
|
||||
|
||||
|
||||
while(state != STATE_END) {
|
||||
|
||||
switch(state) {
|
||||
|
||||
case STATE_START_OCG :
|
||||
LOG_I(OCG, "OCG starts ...\n\n");
|
||||
get_opt_OK = MODULE_NOT_PROCESSED; // -9999 is the initial value, representing the module not processed
|
||||
detect_file_OK = MODULE_NOT_PROCESSED;
|
||||
create_dir_OK = MODULE_NOT_PROCESSED;
|
||||
|
||||
// to write the pid into a file 'OCG.pid' so that the web portal part could check if OCG is running
|
||||
/*
|
||||
pid_t pid;
|
||||
pid = getpid();
|
||||
FILE *OCG_pid;
|
||||
OCG_pid = fopen("OCG.pid", "w");
|
||||
fprintf(OCG_pid, "%d\n", pid);
|
||||
fclose(OCG_pid);
|
||||
*/
|
||||
#ifdef TEST_OCG
|
||||
state = STATE_GET_OPT;
|
||||
|
||||
case STATE_GET_OPT :
|
||||
get_opt_OK = get_opt(argc, argv);
|
||||
|
||||
if (get_opt_OK == MODULE_OK) {
|
||||
strcpy(src_file, LOCAL_XML_FOLDER);
|
||||
copy_or_move = 1;
|
||||
state = STATE_INI_EMU;
|
||||
} else if (get_opt_OK == GET_HELP) state = STATE_END;
|
||||
else state = STATE_DETECT_FILE;
|
||||
|
||||
break;
|
||||
#else
|
||||
state = STATE_DETECT_FILE;
|
||||
//get_opt_OK == MODULE_OK;
|
||||
#endif
|
||||
|
||||
case STATE_DETECT_FILE :
|
||||
strcpy(src_file, web_XML_folder);
|
||||
detect_file_OK = detect_file(src_file, is_local_server);
|
||||
|
||||
if (detect_file_OK == MODULE_OK) {
|
||||
if ((!strcmp(is_local_server, "0")) || (!strcmp(is_local_server, "-1"))) copy_or_move = 2;
|
||||
|
||||
state = STATE_INI_EMU;
|
||||
} else if (detect_file_OK == MODULE_ERROR) state = STATE_GENERATE_REPORT;
|
||||
else if (detect_file_OK == NO_FILE) {
|
||||
state = STATE_DETECT_FILE;
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case STATE_INI_EMU : // before initiating an emu, an XML file should be found above
|
||||
parse_filename_OK = MODULE_NOT_PROCESSED;
|
||||
create_dir_OK = MODULE_NOT_PROCESSED;
|
||||
parse_XML_OK = MODULE_NOT_PROCESSED;
|
||||
save_XML_OK = MODULE_NOT_PROCESSED;
|
||||
// call_emu_OK = MODULE_NOT_PROCESSED;
|
||||
//config_mobi_OK = MODULE_NOT_PROCESSED;
|
||||
generate_report_OK = MODULE_NOT_PROCESSED;
|
||||
|
||||
LOG_I(OCG, "An emulation for file %s is initiated\n", filename);
|
||||
state = STATE_PARSE_FILENAME;
|
||||
break;
|
||||
|
||||
case STATE_PARSE_FILENAME :
|
||||
strcat(src_file, filename);
|
||||
|
||||
if ((parse_filename_OK = parse_filename(filename)) == MODULE_OK) state = STATE_CREATE_DIR;
|
||||
else {
|
||||
if (copy_or_move == 2) {
|
||||
remove(src_file);
|
||||
state = STATE_DETECT_FILE;
|
||||
} else state = STATE_GENERATE_REPORT;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case STATE_CREATE_DIR :
|
||||
if ((create_dir_OK = create_dir(output_dir, user_name, file_date)) == MODULE_OK) {
|
||||
state = STATE_PARSE_XML;
|
||||
strcat(output_dir, user_name);
|
||||
strcat(output_dir, "/");
|
||||
strcat(output_dir, file_date);
|
||||
strcat(output_dir, "/");
|
||||
strcpy(dst_dir, output_dir);
|
||||
oai_emulation.info.output_path = dst_dir; // information for other modules within OAI
|
||||
} else state = STATE_GENERATE_REPORT;
|
||||
|
||||
break;
|
||||
|
||||
case STATE_PARSE_XML :
|
||||
if ((parse_XML_OK = parse_XML(src_file)) == MODULE_OK) state = STATE_SAVE_XML;
|
||||
else {
|
||||
if (copy_or_move == 2) remove(src_file);
|
||||
|
||||
state = STATE_GENERATE_REPORT;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case STATE_SAVE_XML :
|
||||
if ((save_XML_OK = save_XML(copy_or_move, src_file, output_dir, filename)) == MODULE_OK)
|
||||
state = STATE_CALL_EMU;
|
||||
else state = STATE_GENERATE_REPORT;
|
||||
|
||||
break;
|
||||
|
||||
case STATE_CALL_EMU : // change this state to set_params
|
||||
|
||||
if ((detect_file_OK == MODULE_OK) && (parse_filename_OK == MODULE_OK) && (create_dir_OK == MODULE_OK) && (parse_XML_OK == MODULE_OK) && (save_XML_OK == MODULE_OK)) {
|
||||
// if the above tasks are all successful, we could tell the oaisim_config.c that everything is ready before running the emulation
|
||||
oai_emulation.info.ocg_ok = 1;
|
||||
}
|
||||
|
||||
#ifdef TEST_OCG
|
||||
call_emu_OK = call_emu(output_dir);
|
||||
// config_mobi_OK = config_mobi("RWMEmulator.xml", filename); // generate the XML for Mobigen
|
||||
#endif
|
||||
state = STATE_GENERATE_REPORT;
|
||||
break;
|
||||
|
||||
case STATE_GENERATE_REPORT :
|
||||
if (create_dir_OK != MODULE_OK) {
|
||||
// a temp folder is required when the output folder could not be correctly generated
|
||||
strncpy(output_dir, OPENAIR_TARGETS, sizeof(output_dir));
|
||||
output_dir[sizeof(output_dir) - 1] = 0; // terminate string
|
||||
strncat(output_dir, "SIMU/EXAMPLES/OSD/", sizeof(output_dir) - strlen(output_dir) - 1);
|
||||
strncat(output_dir, TEMP_OUTPUT_DIR, sizeof(output_dir) - strlen(output_dir) - 1);
|
||||
struct stat st;
|
||||
|
||||
if(stat(output_dir, &st) != 0) { // if temp output directory does not exist, we create it here
|
||||
mkdir(output_dir, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
LOG_I(OCG, "temp output directory %s is created", output_dir);
|
||||
}
|
||||
} else {
|
||||
//strcat(output_dir, "SCENARIO/STATE/"); // if needeed the outpur directory can be further set
|
||||
LOG_I(OCG, "Output directory is %s \n", output_dir);
|
||||
}
|
||||
|
||||
generate_report(output_dir, "OCG_report.xml");
|
||||
|
||||
if (copy_or_move == 1) state = STATE_END;
|
||||
else state = STATE_END;
|
||||
|
||||
//else state = STATE_DETECT_FILE;
|
||||
break;
|
||||
}
|
||||
} // end while
|
||||
|
||||
// Cleanup function for the XML library.
|
||||
xmlCleanupParser();
|
||||
// this is to debug memory for regression tests
|
||||
xmlMemoryDump();
|
||||
LOG_I(OCG, "... OCG ends\n\n");
|
||||
#ifdef TEST_OCG
|
||||
return 0;
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,769 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG.h
|
||||
* \brief Data structure for OCG of OpenAir emulator
|
||||
* \author Navid Nikaein, Lusheng Wang and Andre Gomes(One source)
|
||||
* \date 2011
|
||||
* \version 1.0
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
//#include "SIMULATION/TOOLS/defs.h"
|
||||
|
||||
|
||||
#ifndef __OCG_H__
|
||||
#define __OCG_H__
|
||||
|
||||
#include "PHY/defs_common.h"
|
||||
#include "PHY/impl_defs_top.h"
|
||||
#include "platform_types.h"
|
||||
# include "s1ap_eNB.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
/** @defgroup _OCG OpenAir Config Generation (OCG)
|
||||
* @{*/
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _useful_macro Macro Definition
|
||||
* @ingroup _OCG
|
||||
* @brief the following macros will be used in the code of OCG
|
||||
* @{*/
|
||||
#define MODULE_NOT_PROCESSED -9999 /*!< \brief the module state indicator is set to -9999 before the module being processed */
|
||||
#define MODULE_ERROR -1 /*!< \brief the module state indicator is set to -1 for error */
|
||||
#define MODULE_OK 0 /*!< \brief the module state indicator is set to 0 when successfully processed */
|
||||
#define GET_HELP 1 /*!< \brief the module state indicator is set to 1 for get_opt_OK when the user types -h option */
|
||||
#define NO_FILE -2 /*!< \brief the module state indicator is set to -2 for detect_file_OK when no file is detected */
|
||||
#define WEB_XML_FOLDER "/nfs/webxml/" /*!< \brief the web portal generates XML files into this folder */
|
||||
#define LOCAL_XML_FOLDER "local_XML/" /*!< \brief this folder contains some XML files for demo, users could also put their own XML files into this folder for a direct emulation without using the web portal */
|
||||
#define TEMP_OUTPUT_DIR "temp_output/" /*!< \brief temporary output files will be generated in this folder when folders for an emulation could not be created due to errors */
|
||||
#define OUTPUT_DIR "/nfs/emu_results/" /*!< \brief this folder contains all the output files when folders for an emulation could be successfully created */
|
||||
#define FILENAME_LENGTH_MAX 128 /*!< \brief the maximum length of a filename */
|
||||
#define DIR_LENGTH_MAX 128 /*!< \brief the maximum length of the path name */
|
||||
#define MOBI_XML_FOLDER "mobi_XML/" /*!< \brief the folder that mobigen generate XML files in */
|
||||
#define DIR_TO_MOBIGEN "XML_to_mobigen/" /*!< \brief the folder that mobigen detects XML file from OCG */
|
||||
|
||||
#define NUMBER_OF_MASTER_MAX 20
|
||||
|
||||
/* @}*/
|
||||
|
||||
|
||||
|
||||
/** @defgroup _enum_fsm OCG Finite State Machine (FSM)
|
||||
* @ingroup _OCG
|
||||
* @brief See the flow chart for details
|
||||
* @{*/
|
||||
|
||||
/** @defgroup _fsm_flow FSM Flow Chart
|
||||
* @ingroup _enum_fsm
|
||||
* @brief This flow chart shows how the FSM works
|
||||
|
||||
There are the following steps the OCG module should contain :
|
||||
- start OCG
|
||||
- get option
|
||||
- detect file
|
||||
- initiate an emulation
|
||||
- parse filename
|
||||
- create directory
|
||||
- parse XML
|
||||
- save XML
|
||||
- call OAI emulator
|
||||
- generate report
|
||||
- end OCG
|
||||
|
||||
The following diagram is based on graphviz (http://www.graphviz.org/), you need to install the package to view the diagram.
|
||||
|
||||
* \dot
|
||||
* digraph ocg_flow_chart {
|
||||
* node [shape=rect, fontname=Helvetica, fontsize=14,style=filled,fillcolor=lightgrey];
|
||||
* a [ label = " start OCG"];
|
||||
* b1 [ label = " get option"];
|
||||
* b2 [ label = " detect file"];
|
||||
* c [ label = " initiate an emulation"];
|
||||
* d [ label = " parse filename"];
|
||||
* e [ label = " create directory"];
|
||||
* f [ label = " parse XML"];
|
||||
* g [ label = " save XML"];
|
||||
* i [ label = " generate report"];
|
||||
* j [ label = " end OCG"];
|
||||
* a->b1;
|
||||
* b1->b2 [ label = "OCG" ];
|
||||
* b1->c [ label = "OCG -f filename" ];
|
||||
* b1->j [ label = "OCG -h or command wrong" ];
|
||||
* b2->c [ label = "file detected" ];
|
||||
* b2->b2 [ label = "check every sec" ];
|
||||
* c->d;
|
||||
* d->e [ label = "OK" ];
|
||||
* d->i [ label = "error" ];
|
||||
* e->f [ label = "OK" ];
|
||||
* e->i [ label = "error" ];
|
||||
* f->g [ label = "OK" ];
|
||||
* f->i [ label = "error" ];
|
||||
* g->i [ label = "OK" ];
|
||||
* g->i [ label = "error" ];
|
||||
* i->b2;
|
||||
* label = "OCG Flow Chart"
|
||||
*
|
||||
* }
|
||||
* \enddot
|
||||
*/
|
||||
|
||||
enum {
|
||||
STATE_START_OCG, /*!< \brief initiate OCG */
|
||||
STATE_GET_OPT, /*!< \brief get options of OCG command */
|
||||
STATE_DETECT_FILE, /*!< \brief detect the configuration file in folder USER_XML_FOLDER */
|
||||
STATE_INI_EMU, /*!< \brief initiate an emulation after finding a configuration file */
|
||||
STATE_PARSE_FILENAME, /*!< \brief parse the filename into user_name and file_date */
|
||||
STATE_CREATE_DIR, /*!< \brief create directory for current emulation */
|
||||
STATE_PARSE_XML, /*!< \brief parse the configuration file */
|
||||
STATE_SAVE_XML, /*!< \brief save the configuration file to the created directory */
|
||||
STATE_CALL_EMU, /*!< \brief call the emulator */
|
||||
STATE_GENERATE_REPORT, /*!< \brief generate some information of OCG */
|
||||
STATE_END /*!< \brief lead to an end of the OCG process */
|
||||
};
|
||||
/* @}*/
|
||||
|
||||
// the OSD_basic :
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int free_space;
|
||||
int urban;
|
||||
int rural;
|
||||
} Large_Scale;
|
||||
|
||||
////// options of generic
|
||||
typedef struct {
|
||||
double pathloss_exponent; // default 2
|
||||
double pathloss_0_dB; // default -50 dB
|
||||
} Free_Space_Model_Parameters;
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int SCM_A; //3GPP 36.384 Spatial channel model A
|
||||
int SCM_B;
|
||||
int SCM_C;
|
||||
int SCM_D;
|
||||
int rayleigh_8tap; // updated to advanced
|
||||
int ricean_8tap;
|
||||
int EPA;
|
||||
int EVA;
|
||||
int ETU;
|
||||
} Small_Scale;
|
||||
|
||||
////// options of Ricean_8Tap
|
||||
typedef struct {
|
||||
int rice_factor_dB; // default 10 dB
|
||||
} Ricean_8Tap;
|
||||
|
||||
typedef struct {
|
||||
double decorrelation_distance_m; // (m), default 100m
|
||||
double variance_dB; // (dB), default 10dB
|
||||
double inter_site_correlation; // (0...1), default 1, not yet implemented
|
||||
} Shadowing;
|
||||
|
||||
typedef struct {
|
||||
Large_Scale large_scale;
|
||||
Small_Scale small_scale;
|
||||
Shadowing shadowing;
|
||||
|
||||
Free_Space_Model_Parameters free_space_model_parameters;
|
||||
Ricean_8Tap ricean_8tap;
|
||||
} Fading;
|
||||
|
||||
typedef struct {
|
||||
int number_of_sectors; /// Number of sectors (1-3), for UE always 1
|
||||
double beam_width_dB; /// Antenna 3dB beam width (in radians) (set to 2*M_PI for onmidirectional antennas), for UE always 2*M_PI
|
||||
double alpha_rad[3]; /// Antenna orientation for each sector (for non-omnidirectional antennas) in radians wrt north
|
||||
double antenna_gain_dBi; /// Antenna gain (dBi) (same for Tx and Rx)
|
||||
double tx_power_dBm; /// Tx power (dBm)
|
||||
double rx_noise_level_dB; /// Rx noise level (dB)
|
||||
double antenna_orientation_degree[3]; // 3 is the number of sectors for OpenAir // we need think about how to parse it from the XML ??????
|
||||
} eNB_Antenna;
|
||||
|
||||
typedef struct {
|
||||
double antenna_gain_dBi; /// Antenna gain (dBi) (same for Tx and Rx)
|
||||
double tx_power_dBm; /// Tx power (dBm)
|
||||
double rx_noise_level_dB; /// Rx noise level (dB)
|
||||
} UE_Antenna;
|
||||
|
||||
typedef struct {
|
||||
eNB_Antenna eNB_antenna;
|
||||
UE_Antenna UE_antenna;
|
||||
} Antenna;
|
||||
|
||||
/** @defgroup _envi_config Environment Configuration
|
||||
* @ingroup _OSD_basic
|
||||
* @brief Including simulation area, geography, topography, fading information, etc
|
||||
* @{*/
|
||||
typedef struct {
|
||||
Fading fading;
|
||||
double wall_penetration_loss_dB;
|
||||
double system_bandwidth_MB;
|
||||
double system_frequency_GHz;
|
||||
Antenna antenna;
|
||||
} Environment_System_Config;
|
||||
/* @}*/
|
||||
|
||||
|
||||
typedef struct {
|
||||
double x_m;
|
||||
double y_m;
|
||||
//double zz; // for test
|
||||
} Area;
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int homogeneous;
|
||||
int heterogeneous;
|
||||
} Network_Type;
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int macrocell;
|
||||
int microcell;
|
||||
int picocell;
|
||||
int femtocell;
|
||||
} Cell_Type;
|
||||
|
||||
typedef struct {
|
||||
int number_of_relays;
|
||||
} Relay; // may not exist in the XML if RELAY is not selected by the user
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int fixed; // static
|
||||
int random_waypoint;
|
||||
int random_walk;
|
||||
int grid_walk;
|
||||
int trace;
|
||||
int sumo;
|
||||
} UE_Mobility_Type;
|
||||
|
||||
////// options of UE_Mobility_Type
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int horizontal_grid;
|
||||
int vertical_grid;
|
||||
} Grid_Map;
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int random_destination; // TRIP_RANDOM
|
||||
int random_turn; // TRIP_NONE
|
||||
} Grid_Trip_Type;
|
||||
|
||||
typedef struct {
|
||||
Grid_Map grid_map;
|
||||
Grid_Trip_Type grid_trip_type; // JHNote: modificaiton
|
||||
} Grid_Walk;
|
||||
//////
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int random;
|
||||
int concentrated;
|
||||
int grid;
|
||||
} UE_Initial_Distribution;
|
||||
|
||||
////// options of UE_Initial_Distribution
|
||||
typedef struct {
|
||||
int number_of_nodes;
|
||||
} Random_UE_Distribution;
|
||||
|
||||
typedef struct {
|
||||
int number_of_nodes;
|
||||
} Concentrated_UE_Distribution;
|
||||
|
||||
typedef struct {
|
||||
int number_of_nodes;
|
||||
} Random_Grid;
|
||||
|
||||
typedef struct {
|
||||
int number_of_nodes;
|
||||
} Border_Grid;
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
Random_Grid random_grid; // random choice of vertex in Grid_Graph mobility
|
||||
Border_Grid border_grid; // random choice of vertex located on the border in Grid_Graph mobility
|
||||
} Grid_UE_Distribution;
|
||||
//////
|
||||
|
||||
typedef struct {
|
||||
double min_speed_mps; // m/s
|
||||
double max_speed_mps;
|
||||
double min_sleep_ms;
|
||||
double max_sleep_ms;
|
||||
double min_journey_time_ms;
|
||||
double max_journey_time_ms;
|
||||
} UE_Moving_Dynamics; // now, we use uniform distribution for these dynamics
|
||||
typedef struct {
|
||||
char *trace_mobility_file;
|
||||
} Trace_Configuration;
|
||||
typedef struct {
|
||||
char *command;
|
||||
char *file; //!< 256 bytes memory (see oaisim_config.c)
|
||||
int start;
|
||||
int end;
|
||||
int step;
|
||||
char *hip;
|
||||
int hport;
|
||||
} SUMO_Configuration;
|
||||
typedef struct {
|
||||
UE_Mobility_Type UE_mobility_type;
|
||||
// ! Note: Grid_Walk is a UE_Mobility_Type, we put it here for the sake of simplicity of the XML file
|
||||
Grid_Walk grid_walk;
|
||||
|
||||
UE_Initial_Distribution UE_initial_distribution;
|
||||
// ! Note: the following three options are for UE_Initial_Distribution, we put them here for the sake of simplicity of the XML file
|
||||
Random_UE_Distribution random_UE_distribution;
|
||||
Concentrated_UE_Distribution concentrated_UE_distribution;
|
||||
Grid_UE_Distribution grid_UE_distribution;
|
||||
|
||||
UE_Moving_Dynamics UE_moving_dynamics;
|
||||
Trace_Configuration trace_config;
|
||||
SUMO_Configuration sumo_config;
|
||||
} UE_Mobility;
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int fixed;
|
||||
int mobile; // at this moment, it is OMG who decides this mobility type, so there is even no config of moving dynamics for eNB
|
||||
} eNB_Mobility_Type;
|
||||
|
||||
typedef struct {
|
||||
char *selected_option;
|
||||
int random;
|
||||
int hexagonal;
|
||||
int grid;
|
||||
} eNB_Initial_Distribution;
|
||||
|
||||
typedef struct {
|
||||
double pos_x;
|
||||
double pos_y;
|
||||
} Fixed_eNB_Distribution;
|
||||
|
||||
////// options of eNB_Initial_Distribution
|
||||
typedef struct {
|
||||
int number_of_cells;
|
||||
} Random_eNB_Distribution;
|
||||
|
||||
typedef struct {
|
||||
int number_of_cells;
|
||||
double inter_eNB_distance_km;
|
||||
} Hexagonal_eNB_Distribution;
|
||||
|
||||
typedef struct {
|
||||
int number_of_grid_x;
|
||||
int number_of_grid_y;
|
||||
} Grid_eNB_Distribution; // inter_eNB_distance = (x/num_x) and (y/num_y) for horizontal and vertical dimensions
|
||||
//////
|
||||
|
||||
typedef struct {
|
||||
eNB_Mobility_Type eNB_mobility_type;
|
||||
|
||||
eNB_Initial_Distribution eNB_initial_distribution;
|
||||
// ! Note: the following four options are for eNB_Initial_Distribution, we put them here for the sake of simplicity of the XML file
|
||||
Fixed_eNB_Distribution fixed_eNB_distribution;
|
||||
Random_eNB_Distribution random_eNB_distribution;
|
||||
Hexagonal_eNB_Distribution hexagonal_eNB_distribution;
|
||||
Grid_eNB_Distribution grid_eNB_distribution;
|
||||
Trace_Configuration trace_config;
|
||||
} eNB_Mobility;
|
||||
|
||||
typedef struct {
|
||||
UE_Mobility UE_mobility;
|
||||
eNB_Mobility eNB_mobility;
|
||||
} Mobility;
|
||||
|
||||
/** @defgroup _topo_config Topology Configuration
|
||||
* @ingroup _OSD_basic
|
||||
* @brief Including cell type, eNB topology, UE distribution, mobility information, etc
|
||||
* @{*/
|
||||
typedef struct {
|
||||
Area area;
|
||||
Network_Type network_type;
|
||||
Cell_Type cell_type;
|
||||
Relay relay;
|
||||
Mobility mobility;
|
||||
int omv;
|
||||
} Topology_Config;
|
||||
/* @}*/
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint16_t priority[11];//pas possible d'acceder au MAX_NUM_LCID
|
||||
//
|
||||
uint8_t DCI_aggregation_min;
|
||||
uint8_t DLSCH_dci_size_bits;
|
||||
//UL transmission bandwidth in RBs
|
||||
uint8_t ul_bandwidth[11];
|
||||
//DL transmission bandwidth in RBs
|
||||
uint8_t dl_bandwidth[11];
|
||||
//UL transmission bandwidth in RBs
|
||||
uint8_t min_ul_bandwidth[11];
|
||||
//DL transmission bandwidth in RBs
|
||||
uint8_t min_dl_bandwidth[11];
|
||||
//aggregated bit rate of non-gbr bearer per UE
|
||||
uint64_t ue_AggregatedMaximumBitrateDL;
|
||||
//aggregated bit rate of non-gbr bearer per UE
|
||||
uint64_t ue_AggregatedMaximumBitrateUL;
|
||||
//CQI scheduling interval in subframes.
|
||||
uint16_t cqiSchedInterval;
|
||||
//Contention resolution timer used during random access
|
||||
uint8_t mac_ContentionResolutionTimer;
|
||||
uint16_t max_allowed_rbs[11];
|
||||
uint8_t max_mcs[11];
|
||||
|
||||
|
||||
uint8_t num_groups;
|
||||
|
||||
|
||||
} Mac_config;
|
||||
|
||||
/** @defgroup _Predefined_traffic Configuration
|
||||
* @ingroup _OSD_basic
|
||||
* @brief Including Application type, Source, destination, background, etc
|
||||
* @{*/
|
||||
typedef struct {
|
||||
char *application_type[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *source_id[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *destination_id[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *background[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int aggregation_level[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int flow_start[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int flow_duration[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
|
||||
} Predefined_Traffic;
|
||||
/* @}*/
|
||||
|
||||
|
||||
/*
|
||||
typedef struct
|
||||
{
|
||||
|
||||
} M2M_Traffic;*/
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _customized_traffic Configuration
|
||||
* @ingroup _OSD_basic
|
||||
* @brief Including Application type, Source, destination, background, idt, packet size, etc
|
||||
* @{*/
|
||||
typedef struct {
|
||||
//int pu;
|
||||
//double prob_off_pu;
|
||||
//double prob_pu_ed;
|
||||
//double holding_time_off_pu;
|
||||
//int pe;
|
||||
//double prob_off_ed;
|
||||
//double prob_ed_pe;
|
||||
//double holding_time_off_ed;
|
||||
//int ed;
|
||||
//double holding_time_off_pe;
|
||||
|
||||
char *application_type[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *source_id[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *destination_id[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *traffic[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *transport_protocol[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *ip_version[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *background[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *idt_dist[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int idt_min_ms[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int idt_max_ms[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double idt_standard_deviation[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double idt_lambda[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double idt_scale[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double idt_shape[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
char *size_dist[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int size_min_byte[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int size_max_byte[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double size_standard_deviation[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double size_lambda[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double size_scale[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double size_shape[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int stream[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int destination_port[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int aggregation_level[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int flow_start[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
int flow_duration[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
|
||||
char *m2m[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
//M2M_Traffic m2m_traffic;
|
||||
double prob_off_pu[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double prob_off_ed[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double prob_off_pe[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double prob_pu_ed[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double prob_pu_pe[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double prob_ed_pe[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
double prob_ed_pu[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int holding_time_off_ed[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int holding_time_off_pu[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int holding_time_off_pe[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int holding_time_pe_off[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int pu_size_pkts[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
unsigned int ed_size_pkts[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
|
||||
} Customized_Traffic;
|
||||
/* @}*/
|
||||
|
||||
|
||||
|
||||
|
||||
/** @defgroup _app_config Application Configuration
|
||||
* @ingroup _OSD_basic
|
||||
* @brief Including application type and traffic information
|
||||
* @{*/
|
||||
typedef struct {
|
||||
char *packet_gen_type;
|
||||
Predefined_Traffic predefined_traffic;
|
||||
Customized_Traffic customized_traffic;
|
||||
} Application_Config;
|
||||
/* @}*/
|
||||
|
||||
typedef struct {
|
||||
char *throughput;
|
||||
char *latency;
|
||||
char *loss_rate;
|
||||
int signalling_overhead;
|
||||
char *owd_radio_access;
|
||||
} Performance_Metrics;
|
||||
|
||||
typedef struct {
|
||||
int phy;
|
||||
int mac;
|
||||
int rlc;
|
||||
int rrc;
|
||||
int pdcp;
|
||||
int omg;
|
||||
int emu;
|
||||
int otg;
|
||||
} Layer;
|
||||
|
||||
typedef struct {
|
||||
char *level;
|
||||
char *verbosity;
|
||||
int interval;
|
||||
} Log_Emu;
|
||||
|
||||
typedef struct {
|
||||
int enabled;
|
||||
unsigned int start_time;
|
||||
unsigned int end_time;
|
||||
} Packet_Trace;
|
||||
|
||||
typedef struct {
|
||||
int value;
|
||||
} Seed;
|
||||
|
||||
|
||||
/** @defgroup _emu_config Emulation Configuration
|
||||
* @ingroup _OSD_basic
|
||||
* @brief Including emulation time and performance output
|
||||
* @{*/
|
||||
typedef struct {
|
||||
double emulation_time_ms;
|
||||
Performance_Metrics performance_metrics;
|
||||
Layer layer;
|
||||
Log_Emu log_emu;
|
||||
Packet_Trace packet_trace;
|
||||
Seed seed;
|
||||
char *curve;
|
||||
char *background_stats;
|
||||
// CLI tags are in Info
|
||||
//char g_log_level[20];
|
||||
} Emulation_Config;
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _OSD_basic OAI protocol config
|
||||
* @ingroup _OCG
|
||||
* @brief OAI Emulation struct for protocol configuration
|
||||
* @{*/
|
||||
|
||||
typedef struct {
|
||||
uint8_t num_groups;
|
||||
} eNB_MAC_Config;
|
||||
|
||||
typedef struct {
|
||||
eNB_MAC_Config eNB_mac_config; /*!< \brief eNB MAC configuration parameters */
|
||||
|
||||
} Protocol_Config;
|
||||
|
||||
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _OSD_basic Basic OpenAirInterface Scenario Descriptor
|
||||
* @ingroup _OCG
|
||||
* @brief OAI Emulation struct for OSD_basic
|
||||
* @{*/
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned char nb_ue;
|
||||
module_id_t first_ue;
|
||||
unsigned char nb_enb;
|
||||
module_id_t first_enb;
|
||||
} master_info_t;
|
||||
|
||||
typedef struct {
|
||||
char *output_path; /*!< \brief The path where we generate all the emulation results */
|
||||
int ocg_ok;
|
||||
|
||||
// distributed emulation params
|
||||
master_info_t master[NUMBER_OF_MASTER_MAX];
|
||||
unsigned char nb_ue_local;
|
||||
unsigned char nb_ue_remote;
|
||||
unsigned char nb_enb_local;
|
||||
unsigned char nb_enb_remote;
|
||||
unsigned char nb_ru_local;
|
||||
unsigned char nb_ru_remote;
|
||||
unsigned char nb_rn_local;
|
||||
unsigned char nb_rn_remote;
|
||||
module_id_t first_enb_local;
|
||||
module_id_t first_rn_local;
|
||||
module_id_t first_ue_local;
|
||||
unsigned short master_id;
|
||||
unsigned char nb_master;
|
||||
unsigned int master_list;
|
||||
unsigned int is_primary_master;
|
||||
unsigned int ethernet_id;
|
||||
char local_server[128]; // for the oaisim -c option : 0 = EURECOM web portal; -1 = local; 1 - N or filename = running a specific XML configuration file
|
||||
unsigned char ethernet_flag;
|
||||
unsigned char multicast_group;
|
||||
char *multicast_ifname;
|
||||
// status
|
||||
unsigned char ocg_enabled; // openair config generator
|
||||
unsigned char ocm_enabled; // openair channel modeling
|
||||
unsigned char opt_enabled;//openair packet tracer
|
||||
unsigned char opt_mode; // openair packet tracer mode: wireshark, pcap
|
||||
unsigned char otg_enabled; // openair traffic generator
|
||||
unsigned char omv_enabled; // openair mobility visulizer
|
||||
unsigned char opp_enabled; // openair performance profiler
|
||||
unsigned char oeh_enabled; // openair event handler, with CLI this could provide a remote event management
|
||||
unsigned char vcd_enabled;
|
||||
char *vcd_file;
|
||||
unsigned char eMBMS_active_state;
|
||||
unsigned char cba_group_active;
|
||||
unsigned char cba_backoff;
|
||||
unsigned char handover_active;
|
||||
char *otg_traffic;
|
||||
unsigned char otg_bg_traffic_enabled;
|
||||
unsigned char omg_model_rn;
|
||||
unsigned char omg_model_enb;
|
||||
unsigned char omg_model_ue;
|
||||
unsigned char omg_rwp_type;
|
||||
unsigned char omg_model_ue_current; // when mixed mbility is used
|
||||
// control eNB/UE instance through CLI
|
||||
unsigned char cli_enabled;
|
||||
unsigned char cli_num_enb;
|
||||
unsigned char cli_start_enb[NUMBER_OF_eNB_MAX];
|
||||
unsigned char cli_num_ue;
|
||||
unsigned char cli_start_ue[NUMBER_OF_UE_MAX];
|
||||
unsigned char oai_ifup[NUMBER_OF_eNB_MAX+NUMBER_OF_UE_MAX];
|
||||
// emu related
|
||||
unsigned int seed;
|
||||
unsigned int frame;
|
||||
double time_s;
|
||||
double time_ms;
|
||||
unsigned int g_log_level;
|
||||
unsigned int g_log_verbosity;
|
||||
char *g_log_verbosity_option;
|
||||
// phy related params
|
||||
unsigned int n_frames;
|
||||
unsigned int n_frames_flag; // if set, then let the emulation goes to infinity
|
||||
node_function_t node_function[MAX_NUM_CCs];
|
||||
node_timing_t node_timing[MAX_NUM_CCs];
|
||||
unsigned char frame_type[MAX_NUM_CCs]; //! LTE frame type (TDD=1, FDD=0). \note this should be converted to \ref frame_type_t (header file reorganization needed)
|
||||
char *frame_type_name[MAX_NUM_CCs];
|
||||
unsigned char tdd_config[MAX_NUM_CCs];
|
||||
unsigned char tdd_config_S[MAX_NUM_CCs];
|
||||
unsigned char extended_prefix_flag[MAX_NUM_CCs];
|
||||
unsigned char N_RB_DL[MAX_NUM_CCs];
|
||||
unsigned char transmission_mode[MAX_NUM_CCs];
|
||||
int max_predefined_traffic_config_index;
|
||||
int max_customized_traffic_config_index;
|
||||
s1ap_eNB_config_t s1ap_config;
|
||||
|
||||
/* Per-Slot ISR
|
||||
* Interval between two ISR = 500usec
|
||||
*/
|
||||
unsigned char slot_isr;
|
||||
int slot_sfd;
|
||||
} Info;
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _OSD_basic Basic OpenAirInterface Scenario Descriptor
|
||||
* @ingroup _OCG
|
||||
* @brief OAI Emulation struct for OSD_basic
|
||||
* @{*/
|
||||
typedef struct {
|
||||
Mac_config mac_config[NUMBER_OF_UE_MAX];
|
||||
Environment_System_Config environment_system_config; /*!< \brief Evironment configuration */
|
||||
Topology_Config topology_config; /*!< \brief Topology configuration */
|
||||
Application_Config application_config; /*!< \brief Applications configuration */
|
||||
Emulation_Config emulation_config; /*!< \brief Emulation configuration */
|
||||
Protocol_Config protocol_config; /* specific protocol configuration*/
|
||||
Info info; /*!< \brief Some important information which should be able to be reached by OAISIM */
|
||||
char *profile;
|
||||
} OAI_Emulation;
|
||||
/* @}*/
|
||||
|
||||
|
||||
/** @defgroup _fn Functions in OCG
|
||||
* @ingroup _OCG
|
||||
* @brief describing all the functions used by OCG
|
||||
* @{*/
|
||||
/* @} */
|
||||
|
||||
/** @defgroup _log_gen LOG GEN Commands
|
||||
* @ingroup _OCG
|
||||
* @brief using the following macro instead of "printf"
|
||||
* @{*/
|
||||
|
||||
//#define LOG_A printf("OCG: "); printf /*!< \brief alert */
|
||||
//#define LOG_C printf("OCG: "); printf /*!< \brief critical */
|
||||
//#define LOG_W printf("OCG: "); printf /*!< \brief warning */
|
||||
//#define LOG_N printf("OCG: "); printf /*!< \brief notice */
|
||||
//#define LOG_E printf("OCG: "); printf /*!< \brief error */
|
||||
//#define LOG_I printf("OCG: "); printf /*!< \brief info */
|
||||
//#define LOG_D printf("OCG: "); printf /*!< \brief debug */
|
||||
//#define LOG_T printf("OCG: "); printf /*!< \brief trace */
|
||||
/* @}*/
|
||||
|
||||
int OCG_main (char is_local_server[FILENAME_LENGTH_MAX]);
|
||||
|
||||
// void init_oai_emulation (void);
|
||||
//#include "UTIL/LOG/log.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,60 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
Lusheng Wang and
|
||||
/*! \file OCG_call_emu.c
|
||||
* \brief Call the emulator
|
||||
* \author Lusheng Wang and Navid Nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "OCG_vars.h"
|
||||
#include "OCG_call_emu.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
OAI_Emulation oai_emulation;
|
||||
|
||||
int call_emu(char dst_dir[DIR_LENGTH_MAX])
|
||||
{
|
||||
|
||||
|
||||
////////// print the configuration
|
||||
FILE *file;
|
||||
char dst_file[DIR_LENGTH_MAX] = "";
|
||||
strcat(dst_file, dst_dir);
|
||||
strcat(dst_file, "emulation_result.txt");
|
||||
file = fopen(dst_file,"w");
|
||||
//system("../../../openair1/SIMULATION/LTE_PHY_L2/physim --help");
|
||||
|
||||
fclose(file);
|
||||
|
||||
LOG_I(OCG, "Emulation finished\n");
|
||||
return MODULE_OK;
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_call_emu.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_CALL_EMU_H__
|
||||
|
||||
#define __OCG_CALL_EMU_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _call_emu Call Emu
|
||||
* @ingroup _fn
|
||||
* @brief Call the emulator
|
||||
* @{*/
|
||||
int call_emu(char dst_dir[DIR_LENGTH_MAX]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,117 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_config_mobi.c
|
||||
* \brief Generate an XML to configure the mobility
|
||||
* \author Lusheng Wang & Navid Nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <string.h>
|
||||
#include <libxml/encoding.h>
|
||||
#include <libxml/xmlwriter.h>
|
||||
#include "OCG.h"
|
||||
#include "OCG_extern.h"
|
||||
#include "OCG_config_mobi.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
int config_mobi(char mobigen_filename[FILENAME_LENGTH_MAX], char filename[FILENAME_LENGTH_MAX]) {
|
||||
// for the xml writer, refer to http://xmlsoft.org/html/libxml-xmlwriter.html
|
||||
char dir_to_mobigen_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX];
|
||||
char mobi_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX] = "";
|
||||
xmlTextWriterPtr writer;
|
||||
strcpy(dir_to_mobigen_file, DIR_TO_MOBIGEN);
|
||||
strcat(dir_to_mobigen_file, mobigen_filename);
|
||||
/* Create a new XmlWriter for uri, with no compression. */
|
||||
writer = xmlNewTextWriterFilename(dir_to_mobigen_file, 0);
|
||||
// set the output format of the XML file
|
||||
xmlTextWriterSetIndent(writer, 1);
|
||||
xmlTextWriterSetIndentString(writer, " ");
|
||||
/* Start the document with the xml default for the version,
|
||||
* encoding ISO 8859-1 and the default for the standalone
|
||||
* declaration. */
|
||||
xmlTextWriterStartDocument(writer, NULL, NULL, NULL);
|
||||
/* Start an element named "EXAMPLE". Since this is the first
|
||||
* element, this will be the root element of the document. */
|
||||
xmlTextWriterStartElement(writer, "universe");
|
||||
/* Write an element named "X_ORDER_ID" as child of HEADER. */
|
||||
xmlTextWriterWriteFormatElement(writer, "dimx", "%lf", oai_emulation.topo_config.area.x);
|
||||
/* Write an element named "X_ORDER_ID" as child of HEADER. */
|
||||
xmlTextWriterWriteFormatElement(writer, "dimy", "%lf", oai_emulation.topo_config.area.y);
|
||||
xmlTextWriterWriteFormatElement(writer, "seed", "%d", 1);
|
||||
xmlTextWriterStartElement(writer, "extension");
|
||||
xmlTextWriterWriteAttribute(writer, "class", "de.uni_stuttgart.informatik.canu.mobisim.simulations.TimeSimulation");
|
||||
xmlTextWriterWriteFormatAttribute(writer, "param", "%lf", oai_emulation.emu_config.emu_time);
|
||||
xmlTextWriterEndElement(writer);
|
||||
xmlTextWriterStartElement(writer, "extension");
|
||||
xmlTextWriterWriteAttribute(writer, "class", "de.uni_stuttgart.informatik.canu.spatialmodel.core.SpatialModel");
|
||||
xmlTextWriterWriteFormatAttribute(writer, "max_x", "%lf", oai_emulation.topo_config.area.x);
|
||||
xmlTextWriterWriteFormatAttribute(writer, "max_y", "%lf", oai_emulation.topo_config.area.y);
|
||||
xmlTextWriterWriteAttribute(writer, "min_x", "0");
|
||||
xmlTextWriterWriteAttribute(writer, "min_y", "0");
|
||||
xmlTextWriterWriteFormatElement(writer, "dump_boundary_points", "%s", "false");
|
||||
xmlTextWriterWriteFormatElement(writer, "separated_flow", "%s", "false");
|
||||
xmlTextWriterWriteFormatElement(writer, "max_traffic_lights", "%d", 500);
|
||||
xmlTextWriterEndElement(writer);
|
||||
xmlTextWriterStartElement(writer, "extension");
|
||||
xmlTextWriterWriteAttribute(writer, "class", "de.uni_stuttgart.informatik.canu.mobisim.extensions.ReportNodeMobility");
|
||||
strcpy(mobi_file, MOBI_XML_FOLDER);
|
||||
strcat(mobi_file, filename);
|
||||
xmlTextWriterWriteAttribute(writer, "output", mobi_file);
|
||||
xmlTextWriterWriteFormatElement(writer, "step", "%d", 1);
|
||||
xmlTextWriterEndElement(writer);
|
||||
xmlTextWriterStartElement(writer, "nodegroup");
|
||||
xmlTextWriterWriteAttribute(writer, "car2x", "false");
|
||||
xmlTextWriterWriteAttribute(writer, "id", "");
|
||||
xmlTextWriterWriteAttribute(writer, "n", "50");
|
||||
xmlTextWriterWriteAttribute(writer, "type", "car");
|
||||
xmlTextWriterStartElement(writer, "position");
|
||||
xmlTextWriterWriteAttribute(writer, "random", "true");
|
||||
xmlTextWriterWriteFormatElement(writer, "z", "%s", "0.0");
|
||||
xmlTextWriterEndElement(writer);
|
||||
xmlTextWriterStartElement(writer, "extension");
|
||||
xmlTextWriterWriteAttribute(writer, "class", "de.uni_stuttgart.informatik.canu.mobisim.mobilitymodels.RandomWaypointWalk");
|
||||
|
||||
if (!strcmp(oai_emulation.topo_config.UE_mobility.UE_mobility_type.selected_option, "fixed")) {
|
||||
xmlTextWriterWriteFormatElement(writer, "minspeed", "%d", 0);
|
||||
xmlTextWriterWriteFormatElement(writer, "maxspeed", "%d", 0);
|
||||
xmlTextWriterWriteFormatElement(writer, "minstay", "%d", 9999);
|
||||
xmlTextWriterWriteFormatElement(writer, "maxstay", "%d", 9999);
|
||||
} else if (!strcmp(oai_emulation.topo_config.UE_mobility.UE_mobility_type.selected_option, "random_waypoint")) {
|
||||
xmlTextWriterWriteFormatElement(writer, "minspeed", "%lf", oai_emulation.topo_config.UE_mobility.UE_moving_dynamics.min_speed);
|
||||
xmlTextWriterWriteFormatElement(writer, "maxspeed", "%lf", oai_emulation.topo_config.UE_mobility.UE_moving_dynamics.max_speed);
|
||||
xmlTextWriterWriteFormatElement(writer, "minstay", "%lf", oai_emulation.topo_config.UE_mobility.UE_moving_dynamics.min_pause_time);
|
||||
xmlTextWriterWriteFormatElement(writer, "maxstay", "%lf", oai_emulation.topo_config.UE_mobility.UE_moving_dynamics.max_pause_time);
|
||||
}
|
||||
|
||||
// Close the element named HEADER.
|
||||
xmlTextWriterEndElement(writer);
|
||||
xmlTextWriterEndDocument(writer);
|
||||
xmlFreeTextWriter(writer);
|
||||
return MODULE_OK;
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_config_mobi.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_CONFIG_MOBI_H__
|
||||
|
||||
#define __OCG_CONFIG_MOBI_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _config_mobi Config Mobigen
|
||||
* @ingroup _fn
|
||||
* @brief Generate configuration XML for mobigen
|
||||
* @{*/
|
||||
int config_mobi(char mobigen_filename[FILENAME_LENGTH_MAX], char filename[FILENAME_LENGTH_MAX]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,93 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_create_dir.c
|
||||
* \brief Create directory for current emulation
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include "OCG_vars.h"
|
||||
#include "OCG_create_dir.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
int create_dir(char output_dir[DIR_LENGTH_MAX], char user_name[FILENAME_LENGTH_MAX / 2], char file_date[FILENAME_LENGTH_MAX / 2])
|
||||
{
|
||||
|
||||
char directory[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX] = "";
|
||||
mode_t process_mask = umask(0);
|
||||
|
||||
strncpy(directory, output_dir, FILENAME_LENGTH_MAX + DIR_LENGTH_MAX);
|
||||
directory[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX - 1] = 0; // terminate string
|
||||
|
||||
struct stat st;
|
||||
|
||||
if(stat(directory, &st) != 0) { // if output_dir does not exist, we create it here
|
||||
mkdir(directory, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
LOG_I(OCG, "output_dir %s is created", directory);
|
||||
}
|
||||
|
||||
strncat(directory, user_name, FILENAME_LENGTH_MAX + DIR_LENGTH_MAX - strlen(directory) - 1);
|
||||
|
||||
mkdir(directory, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
|
||||
strncat(directory, "/", FILENAME_LENGTH_MAX + DIR_LENGTH_MAX - strlen(directory) - 1);
|
||||
strncat(directory, file_date, FILENAME_LENGTH_MAX + DIR_LENGTH_MAX - strlen(directory) - 1);
|
||||
|
||||
mkdir(directory, S_IRWXU | S_IRWXG |S_IRWXO);
|
||||
|
||||
//char directory_extension[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX + 64] = "";
|
||||
/*strcpy(directory_extension, directory); // to create some more folders
|
||||
strcat(directory_extension, "/LOGS");
|
||||
mkdir(directory_extension, S_IRWXU | S_IRWXG |S_IRWXO);
|
||||
|
||||
strcpy(directory_extension, directory);
|
||||
strcat(directory_extension, "/PACKET_TRACE");
|
||||
mkdir(directory_extension, S_IRWXU | S_IRWXG |S_IRWXO);
|
||||
|
||||
strcpy(directory_extension, directory);
|
||||
strcat(directory_extension, "/SCENARIO");
|
||||
mkdir(directory_extension, S_IRWXU | S_IRWXG |S_IRWXO);
|
||||
|
||||
strcpy(directory_extension, directory);
|
||||
strcat(directory_extension, "/SCENARIO/XML");
|
||||
mkdir(directory_extension, S_IRWXU | S_IRWXG |S_IRWXO);
|
||||
|
||||
strcpy(directory_extension, directory);
|
||||
strcat(directory_extension, "/SCENARIO/STATE");
|
||||
mkdir(directory_extension, S_IRWXU | S_IRWXG |S_IRWXO);
|
||||
*/
|
||||
umask(process_mask);
|
||||
|
||||
LOG_I(OCG, "Directory for current emulation is created\n");
|
||||
return MODULE_OK;
|
||||
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_create_dir.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_CREATE_DIR_H__
|
||||
|
||||
#define __OCG_CREATE_DIR_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _create_dir Create Dir
|
||||
* @ingroup _fn
|
||||
* @brief Create directory in OUTPUT_DIR for current emulation
|
||||
* @{*/
|
||||
int create_dir(char output_dir[DIR_LENGTH_MAX], char user_name[FILENAME_LENGTH_MAX / 2], char file_date[FILENAME_LENGTH_MAX / 2]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,117 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_detect_file.c
|
||||
* \brief Detect if a new XML is generated from the web portal
|
||||
* \author Lusheng Wang & Navid Nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
#include "OCG_vars.h"
|
||||
#include "OCG_detect_file.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
int detect_file(char src_dir[DIR_LENGTH_MAX], char is_local_server[FILENAME_LENGTH_MAX])
|
||||
{
|
||||
DIR *dir = NULL;
|
||||
struct dirent *file = NULL;
|
||||
char template[FILENAME_LENGTH_MAX] = "";
|
||||
char manual[FILENAME_LENGTH_MAX] = "";
|
||||
|
||||
if((dir = opendir(src_dir)) == NULL) {
|
||||
LOG_E(OCG, "Folder %s for detecting the XML configuration file is not found\n", src_dir);
|
||||
return MODULE_ERROR;
|
||||
}
|
||||
|
||||
while((file = readdir(dir)) != NULL) {
|
||||
if(strcmp(file->d_name, ".") && strcmp(file->d_name, "..")) {
|
||||
if(file->d_type != DT_DIR) {
|
||||
if ((!strcmp(is_local_server, "0")) || (!strcmp(is_local_server, "-1"))) { // for EURECOM web or local user without specifying the file name
|
||||
strncpy(template, file->d_name, sizeof("template") - 1);
|
||||
strncpy(manual, file->d_name, sizeof("manual") - 1);
|
||||
|
||||
if ((!strcmp(template, "template")) || (!strcmp(manual, "manual"))) { // should skip the templates and the manual XML files
|
||||
|
||||
} else {
|
||||
if (strlen(file->d_name) <= FILENAME_LENGTH_MAX) {
|
||||
strcpy(filename, file->d_name);
|
||||
LOG_I(OCG, "Configuration file \"%s\" is detected\n", filename);
|
||||
closedir(dir);
|
||||
return MODULE_OK; // find a good file and return
|
||||
} else {
|
||||
LOG_E(OCG, "File name too long: char filename[] should be less than 64 characters\n");
|
||||
closedir(dir);
|
||||
return MODULE_ERROR;
|
||||
}
|
||||
}
|
||||
} else { // should use a template or a manual XML file
|
||||
strncpy(template, is_local_server, sizeof("template") - 1);
|
||||
strncpy(manual, is_local_server, sizeof("manual") - 1);
|
||||
|
||||
if ((!strcmp(template, "template")) || (!strcmp(manual, "manual"))) {
|
||||
strcpy(filename, is_local_server);
|
||||
} else {
|
||||
strcpy(filename, "template_");
|
||||
strcat(filename, is_local_server);
|
||||
strcat(filename, ".xml");
|
||||
}
|
||||
|
||||
char check_src_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX];
|
||||
strncpy(check_src_file, src_dir, FILENAME_LENGTH_MAX + DIR_LENGTH_MAX);
|
||||
check_src_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX - 1] = 0; // terminate string
|
||||
strncat(check_src_file, filename, FILENAME_LENGTH_MAX + DIR_LENGTH_MAX - strlen(check_src_file) - 1);
|
||||
struct stat st;
|
||||
|
||||
if(stat(check_src_file, &st) != 0) {
|
||||
LOG_E(OCG, "file %s does not exist\n", check_src_file);
|
||||
closedir(dir);
|
||||
return MODULE_ERROR;
|
||||
} else {
|
||||
LOG_I(OCG, "template/manual file \"%s\" is used\n", filename);
|
||||
closedir(dir);
|
||||
return MODULE_OK;
|
||||
}
|
||||
}
|
||||
} else { // this option is not used at this moment : NO directory should be put in the src_dir
|
||||
//detect_file(strncat(src_dir, file->d_name, FILENAME_LENGTH_MAX + DIR_LENGTH_MAX));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
|
||||
if (strcmp(is_local_server, "0") && strcmp(is_local_server, "-1")) {
|
||||
LOG_E(OCG, "file %s does not exist in directory %s\n", is_local_server, src_dir);
|
||||
return MODULE_ERROR;
|
||||
} else return NO_FILE;
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_detect_file.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_DETECT_FILE_H__
|
||||
|
||||
#define __OCG_DETECT_FILE_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _detect_file Detect File
|
||||
* @ingroup _fn
|
||||
* @brief Detect new XML configuration file in USER_XML_FOLDER
|
||||
* @{*/
|
||||
//int detect_file(int argc, char *argv[], char folder[DIR_LENGTH_MAX]);
|
||||
int detect_file(char folder[DIR_LENGTH_MAX], char is_local_server[FILENAME_LENGTH_MAX]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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 __OCG_EXTERN_H__
|
||||
#define __OCG_EXTERN_H__
|
||||
|
||||
extern char filename[]; /*!< \brief user_name.file_date.xml */
|
||||
extern char user_name[]; /*!< \brief user_name */
|
||||
extern char file_date[]; /*!< \brief file_date */
|
||||
extern char src_file[]; /*!< \brief USER_XML_FOLDER/user_name.file_date.xml or DEMO_XML_FOLDER/user_name.file_date.xml */
|
||||
extern char dst_dir[]; /*!< \brief user_name/file_date/ */
|
||||
extern int copy_or_move; /*!< \brief indicating if the current emulation is with a local XML or an XML generated from the web portal */
|
||||
extern int file_detected; /*!< \brief indicate whether a new file is detected */
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _oks OCG Module State Indicators
|
||||
* @ingroup _OCG
|
||||
* @brief Indicate whether a module has processed successfully
|
||||
* @{*/
|
||||
extern int get_opt_OK; /*!< \brief value: -9999, -1, 0 or 1 */
|
||||
extern int detect_file_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
extern int parse_filename_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
extern int create_dir_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
extern int parse_XML_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
extern int save_XML_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
extern int call_emu_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
extern int config_mobi_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
extern int generate_report_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
/* @}*/
|
||||
|
||||
extern OAI_Emulation oai_emulation;
|
||||
|
||||
#endif
|
||||
@@ -1,70 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_generate_report.c
|
||||
* \brief Generate a brief report for debug of OCG
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <libxml/encoding.h>
|
||||
#include <libxml/xmlwriter.h>
|
||||
#include "OCG_vars.h"
|
||||
#include "OCG_generate_report.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
int generate_report(char dst_dir[DIR_LENGTH_MAX], char filename[FILENAME_LENGTH_MAX]) {
|
||||
// for the xml writer, refer to http://xmlsoft.org/html/libxml-xmlwriter.html
|
||||
char dst_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX];
|
||||
strncpy(dst_file, dst_dir, FILENAME_LENGTH_MAX + DIR_LENGTH_MAX - strlen(filename) - 1);
|
||||
strcat(dst_file, filename);
|
||||
xmlTextWriterPtr writer;
|
||||
writer = xmlNewTextWriterFilename(dst_file, 0);
|
||||
// set the output format of the XML file
|
||||
xmlTextWriterSetIndent(writer, 1);
|
||||
xmlTextWriterSetIndentString(writer,(unsigned char *) " ");
|
||||
xmlTextWriterStartDocument(writer, NULL, NULL, NULL);
|
||||
/* Write an element named "X_ORDER_ID" as child of HEADER. */
|
||||
xmlTextWriterWriteFormatElement(writer,(unsigned char *) "COMMENT ", " in this output file, %d means NOT_PROCESSED; %d means NO_FILE; %d means ERROR; %d means OK ", MODULE_NOT_PROCESSED,
|
||||
NO_FILE, MODULE_ERROR, MODULE_OK);
|
||||
xmlTextWriterWriteFormatElement(writer,(unsigned char *) "OCG_GET_OPT ", " %d ", get_opt_OK);
|
||||
xmlTextWriterWriteFormatElement(writer,(unsigned char *) "OCG_DETECT_FILE ", " %d ", detect_file_OK);
|
||||
xmlTextWriterWriteFormatElement(writer,(unsigned char *) "OCG_PARSE_FILENAME", " %d ", parse_filename_OK);
|
||||
xmlTextWriterWriteFormatElement(writer,(unsigned char *) "OCG_CREATE_DIR ", " %d ", create_dir_OK);
|
||||
xmlTextWriterWriteFormatElement(writer,(unsigned char *) "OCG_PARSE_XML ", " %d ", parse_XML_OK);
|
||||
xmlTextWriterWriteFormatElement(writer,(unsigned char *) "OCG_SAVE_XML ", " %d ", save_XML_OK);
|
||||
// xmlTextWriterWriteFormatElement(writer, "OCG_CALL_EMU ", " %d ", call_emu_OK);
|
||||
xmlTextWriterEndDocument(writer);
|
||||
xmlFreeTextWriter(writer);
|
||||
LOG_I(OCG, "A report of OCG is generated in directory \"%s\"\n\n", dst_dir);
|
||||
return MODULE_OK;
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_generate_report.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_GENERATE_REPORT_H__
|
||||
|
||||
#define __OCG_GENERATE_REPORT_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _generate_report Generate report
|
||||
* @ingroup _fn
|
||||
* @brief Generate a report to show the states of OCG modules
|
||||
* @{*/
|
||||
int generate_report(char dst_dir[DIR_LENGTH_MAX], char filename[FILENAME_LENGTH_MAX]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,69 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_get_opt.c
|
||||
* \brief Get Options of the OCG command
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "OCG.h"
|
||||
#include "OCG_get_opt.h"
|
||||
//#include "log.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
char filename[FILENAME_LENGTH_MAX];
|
||||
|
||||
int get_opt(int argc, char *argv[])
|
||||
{
|
||||
char opts;
|
||||
|
||||
while((opts = getopt(argc, argv, "f:h")) != -1) {
|
||||
|
||||
switch (opts) {
|
||||
case 'f' :
|
||||
strcpy(filename, optarg);
|
||||
LOG_D(OCG, "User specified configuration file is \"%s\"\n", filename);
|
||||
return MODULE_OK;
|
||||
|
||||
case 'h' :
|
||||
LOG_I(OCG, "OCG command : OCG -f \"filename.xml\"\n");
|
||||
return GET_HELP;
|
||||
|
||||
default :
|
||||
LOG_E(OCG, "OCG command : OCG -f \"filename.xml\"\n");
|
||||
return GET_HELP;
|
||||
}
|
||||
}
|
||||
|
||||
return NO_FILE;
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_get_opt.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
#ifndef __OCG_GET_OPT_H__
|
||||
|
||||
#define __OCG_GET_OPT_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _get_opt Get Opt
|
||||
* @ingroup _fn
|
||||
* @brief Get options of the OCG command, e.g. "OCG -f" and "OCG -h"
|
||||
* @{*/
|
||||
int get_opt(int argc, char *argv[]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,64 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_if.h
|
||||
* \brief Interfaces to the outside of OCG
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __UTIL_OCG_OCG_IF__H__
|
||||
#define __UTIL_OCG_OCG_IF__H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
# include "OCG.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
# ifdef COMPONENT_CONFIGEN
|
||||
# ifdef COMPONENT_CONFIGEN_IF
|
||||
# define private_configen_if(x) x
|
||||
# define friend_configen_if(x) x
|
||||
# define public_configen_if(x) x
|
||||
# else
|
||||
# define private_configen_if(x)
|
||||
# define friend_configen_if(x) extern x
|
||||
# define public_configen_if(x) extern x
|
||||
# endif
|
||||
# else
|
||||
# define private_configen_if(x)
|
||||
# define friend_configen_if(x)
|
||||
# define public_configen_if(x) extern x
|
||||
# endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,58 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_parse_XML.h
|
||||
* \brief Variables indicating the element which is currently parsed
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_PARSE_XML_H__
|
||||
|
||||
#define __OCG_PARSE_XML_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _parsing_position_indicator Parsing Position Indicator
|
||||
* @ingroup _parse_XML
|
||||
* @brief Indicate the position where the program is current parsing in the XML file
|
||||
* @{*/
|
||||
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _parse_XML Parse XML
|
||||
* @ingroup _fn
|
||||
* @brief Parse the XML configuration file
|
||||
* @{*/
|
||||
int parse_XML(char src_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_parse_filename.c
|
||||
* \brief Parse the filename of the XML file
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "OCG_vars.h"
|
||||
#include "OCG_parse_filename.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
int parse_filename(char filename[FILENAME_LENGTH_MAX])
|
||||
{
|
||||
char *delim = "._";
|
||||
char tmp_filename[FILENAME_LENGTH_MAX];
|
||||
char *fd_tmp;
|
||||
char *un_tmp;
|
||||
char *ex_tmp;
|
||||
|
||||
//delim = "._";
|
||||
strncpy(tmp_filename, filename, FILENAME_LENGTH_MAX);
|
||||
tmp_filename[FILENAME_LENGTH_MAX - 1] = 0; // terminate string
|
||||
|
||||
un_tmp = strtok(tmp_filename, delim);
|
||||
fd_tmp = strtok(NULL, delim);
|
||||
ex_tmp = strtok(NULL, delim);
|
||||
|
||||
if ((ex_tmp == NULL) || ((strcmp(ex_tmp, "xml")) && (strcmp(ex_tmp, "XML")))) {
|
||||
LOG_E(OCG,
|
||||
"Please use .xml file for configuration with the format \"user_name.file_date.xml\"\nfile_date = \"year month day hour minute second\" without space, \ne.g. 20100201193045 represents in the year 2010, February 1st, 19:30:45\n");
|
||||
return MODULE_ERROR;
|
||||
} else {
|
||||
strncpy(file_date, fd_tmp, sizeof(file_date));
|
||||
file_date[sizeof(file_date) - 1] = 0; // terminate string
|
||||
strncpy(user_name, un_tmp, sizeof(user_name));
|
||||
user_name[sizeof(user_name) - 1] = 0; // terminate string
|
||||
|
||||
LOG_I(OCG, "File name is parsed as user_name = %s, file_date = %s\n", user_name, file_date);
|
||||
return MODULE_OK;
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_parse_filename.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_PARSE_FILENAME_H__
|
||||
|
||||
#define __OCG_PARSE_FILENAME_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _parse_filename Parse Filename
|
||||
* @ingroup _fn
|
||||
* @brief Parse the filename to get user_name and file_date
|
||||
* @{*/
|
||||
int parse_filename(char filename[FILENAME_LENGTH_MAX]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,82 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_save_XML.c
|
||||
* \brief Save the XML configuration file in the created directory for current emulation
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
/*--- INCLUDES ---------------------------------------------------------------*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "OCG_vars.h"
|
||||
#include "OCG_save_XML.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
//int save_XML(int copy_or_move, char src_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX], char dst_dir[DIR_LENGTH_MAX], char filename[FILENAME_LENGTH_MAX]) {
|
||||
int save_XML(int copy_or_move, char *src_file, char *output_dir, char *filename)
|
||||
{
|
||||
|
||||
FILE *fs, *ft;
|
||||
int ch;
|
||||
char dst_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX + 32] = "";
|
||||
char XML_saving_dir[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX + 32] = "";
|
||||
|
||||
strncpy(dst_file, output_dir, sizeof(dst_file));
|
||||
dst_file[sizeof(dst_file) - 1] = 0; // terminate string
|
||||
//strcat(dst_file, "SCENARIO/XML/");
|
||||
strncpy(XML_saving_dir, dst_file, sizeof(XML_saving_dir));
|
||||
XML_saving_dir[sizeof(XML_saving_dir) - 1] = 0; // terminate string
|
||||
strncat(dst_file, filename, sizeof(dst_file) - strlen(dst_file) - 1);
|
||||
fs = fopen(src_file, "r");
|
||||
ft = fopen(dst_file, "w");
|
||||
|
||||
if ((ft !=NULL)&&(fs!=NULL)) {
|
||||
while(1) {
|
||||
ch = getc(fs);
|
||||
|
||||
if(ch == EOF) {
|
||||
break;
|
||||
} else {
|
||||
putc(ch, ft);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (fs)
|
||||
fclose(fs);
|
||||
|
||||
if (ft)
|
||||
fclose(ft);
|
||||
|
||||
if (copy_or_move == 2) remove(src_file);
|
||||
|
||||
LOG_I(OCG, "The file is saved in directory \"%s\"\n", XML_saving_dir);
|
||||
return MODULE_OK;
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*! \file OCG_save_XML.h
|
||||
* \brief
|
||||
* \author Lusheng Wang and navid nikaein
|
||||
* \date 2011
|
||||
* \version 0.1
|
||||
* \company Eurecom
|
||||
* \email: navid.nikaein@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifndef __OCG_SAVE_XML_H__
|
||||
|
||||
#define __OCG_SAVE_XML_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/** @defgroup _save_XML Save XML
|
||||
* @ingroup _fn
|
||||
* @brief Save the XML configuration file in dst_dir
|
||||
* @{*/
|
||||
int save_XML(int demo_or_user, char src_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX], char dst_dir[DIR_LENGTH_MAX], char filename[FILENAME_LENGTH_MAX]);
|
||||
/* @}*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,59 +0,0 @@
|
||||
/*
|
||||
* 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 __OCG_VARS_H__
|
||||
#define __OCG_VARS_H__
|
||||
|
||||
#include "OCG.h"
|
||||
|
||||
/** @defgroup _main_val Main Variables
|
||||
* @ingroup _OCG
|
||||
* @brief Variables used by the main function
|
||||
* @{*/
|
||||
char filename[FILENAME_LENGTH_MAX]; /*!< \brief user_name.file_date.xml */
|
||||
char user_name[FILENAME_LENGTH_MAX / 2]; /*!< \brief user_name */
|
||||
char file_date[FILENAME_LENGTH_MAX / 2]; /*!< \brief file_date */
|
||||
char src_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX]; /*!< \brief USER_XML_FOLDER/user_name.file_date.xml or DEMO_XML_FOLDER/user_name.file_date.xml */
|
||||
char dst_dir[DIR_LENGTH_MAX]; /*!< \brief user_name/file_date/ */
|
||||
int copy_or_move; /*!< \brief indicating if the current emulation is with a local XML or an XML generated from the web portal */
|
||||
int file_detected; /*!< \brief indicate whether a new file is detected */
|
||||
/* @}*/
|
||||
|
||||
/** @defgroup _oks OCG Module State Indicators
|
||||
* @ingroup _OCG
|
||||
* @brief Indicate whether a module has processed successfully
|
||||
* @{*/
|
||||
int get_opt_OK; /*!< \brief value: -9999, -1, 0 or 1 */
|
||||
int detect_file_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
int parse_filename_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
int create_dir_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
int parse_XML_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
int save_XML_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
int call_emu_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
int config_mobi_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
int generate_report_OK; /*!< \brief value: -9999, -1 or 0 */
|
||||
|
||||
OAI_Emulation oai_emulation;
|
||||
|
||||
|
||||
/* @}*/
|
||||
#endif
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<universe>
|
||||
<dimx>1.000000</dimx>
|
||||
<dimy>1.000000</dimy>
|
||||
<seed>1</seed>
|
||||
<extension class="de.uni_stuttgart.informatik.canu.mobisim.simulations.TimeSimulation" param="1.000000"/>
|
||||
<extension class="de.uni_stuttgart.informatik.canu.spatialmodel.core.SpatialModel" max_x="1.000000" max_y="1.000000" min_x="0" min_y="0">
|
||||
<dump_boundary_points>false</dump_boundary_points>
|
||||
<separated_flow>false</separated_flow>
|
||||
<max_traffic_lights>500</max_traffic_lights>
|
||||
</extension>
|
||||
<extension class="de.uni_stuttgart.informatik.canu.mobisim.extensions.ReportNodeMobility" output="mobi_XML/root.20110309123817.xml">
|
||||
<step>1</step>
|
||||
</extension>
|
||||
<nodegroup car2x="false" id="" n="50" type="car">
|
||||
<position random="true">
|
||||
<z>0.0</z>
|
||||
</position>
|
||||
<extension class="de.uni_stuttgart.informatik.canu.mobisim.mobilitymodels.RandomWaypointWalk">
|
||||
<minspeed>0</minspeed>
|
||||
<maxspeed>0</maxspeed>
|
||||
<minstay>9999</minstay>
|
||||
<maxstay>9999</maxstay>
|
||||
</extension>
|
||||
</nodegroup>
|
||||
</universe>
|
||||
@@ -1,92 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<OPENAIRINTERFACE>
|
||||
<ENVICONFIG>
|
||||
<AREA>
|
||||
<X>100</X>
|
||||
<Y>1.5</Y>
|
||||
</AREA>
|
||||
<GEOGRAPHY>home</GEOGRAPHY>
|
||||
<TOPOGRAPHY>obstructed</TOPOGRAPHY>
|
||||
<FADING>
|
||||
<FREESPACEPROPAGATION>
|
||||
<PATHLOSSEXPONENT>2.3</PATHLOSSEXPONENT>
|
||||
<PATHLOSS0>56</PATHLOSS0>
|
||||
</FREESPACEPROPAGATION>
|
||||
<SMALLSCALE>
|
||||
<RAYLEIGH>
|
||||
<DELAYSPREAD>15</DELAYSPREAD>
|
||||
</RAYLEIGH>
|
||||
</SMALLSCALE>
|
||||
</FADING>
|
||||
<WALLPENETRATIONLOSS>1</WALLPENETRATIONLOSS>
|
||||
<NOISEPOWER>-10</NOISEPOWER>
|
||||
</ENVICONFIG>
|
||||
<TOPOCONFIG>
|
||||
<TYPE>homogeneous</TYPE>
|
||||
<CELLTYPE>macrocell</CELLTYPE>
|
||||
<RELAY>
|
||||
<NUMBEROFRELAYS>5</NUMBEROFRELAYS>
|
||||
</RELAY>
|
||||
<ENBTOPOLOGY>
|
||||
<HEXAGONAL>
|
||||
<NUMBEROFCELLS>23</NUMBEROFCELLS>
|
||||
</HEXAGONAL>
|
||||
</ENBTOPOLOGY>
|
||||
<INTERENBDISTANCE>25</INTERENBDISTANCE>
|
||||
<UEDISTRIBUTION>
|
||||
<CONCENTRATED>1</CONCENTRATED>
|
||||
</UEDISTRIBUTION>
|
||||
<SYSTEMBANDWIDTH>100</SYSTEMBANDWIDTH>
|
||||
<UEFREQUENCY>99</UEFREQUENCY>
|
||||
<MOBILITY>
|
||||
<MOBILITYTYPE>random_waypoint</MOBILITYTYPE>
|
||||
<MOVINGDYNAMICS>
|
||||
<MINSPEED>1</MINSPEED>
|
||||
<MAXSPEED>3</MAXSPEED>
|
||||
<MINPAUSETIME>1</MINPAUSETIME>
|
||||
<MAXPAUSETIME>2</MAXPAUSETIME>
|
||||
</MOVINGDYNAMICS>
|
||||
</MOBILITY>
|
||||
</TOPOCONFIG>
|
||||
<APPCONFIG>
|
||||
<APPTYPE>cbr</APPTYPE>
|
||||
<TRAFFIC>
|
||||
<TRANSPORTPROTOCOL>udp</TRANSPORTPROTOCOL>
|
||||
<PACKETSIZE>
|
||||
<FIXED>
|
||||
<FIXEDVALUE>54</FIXEDVALUE>
|
||||
</FIXED>
|
||||
</PACKETSIZE>
|
||||
<INTERARRIVALTIME>
|
||||
<FIXED>
|
||||
<FIXEDVALUE>19</FIXEDVALUE>
|
||||
</FIXED>
|
||||
</INTERARRIVALTIME>
|
||||
</TRAFFIC>
|
||||
</APPCONFIG>
|
||||
<EMUCONFIG>
|
||||
<EMUTIME>15</EMUTIME>
|
||||
<PERFORMANCE>
|
||||
<METRIC>
|
||||
<THROUGHPUT>1</THROUGHPUT>
|
||||
<LATENCY>1</LATENCY>
|
||||
<SIGNALLINGOVERHEAD></SIGNALLINGOVERHEAD>
|
||||
</METRIC>
|
||||
<LAYER>
|
||||
<MAC>1</MAC>
|
||||
<RLC></RLC>
|
||||
<PDCP></PDCP>
|
||||
</LAYER>
|
||||
<LOGEMU>
|
||||
<DEBUG>1</DEBUG>
|
||||
<INFO></INFO>
|
||||
<WARNING></WARNING>
|
||||
<ERROR>1</ERROR>
|
||||
</LOGEMU>
|
||||
<PACKETTRACE>
|
||||
<MAC></MAC>
|
||||
</PACKETTRACE>
|
||||
</PERFORMANCE>
|
||||
</EMUCONFIG>
|
||||
<PROFILE>EURECOM</PROFILE>
|
||||
</OPENAIRINTERFACE>
|
||||
@@ -1,92 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<OPENAIRINTERFACE>
|
||||
<ENVICONFIG>
|
||||
<AREA>
|
||||
<X>100</X>
|
||||
<Y>1.5</Y>
|
||||
</AREA>
|
||||
<GEOGRAPHY>home</GEOGRAPHY>
|
||||
<TOPOGRAPHY>obstructed</TOPOGRAPHY>
|
||||
<FADING>
|
||||
<FREESPACEPROPAGATION>
|
||||
<PATHLOSSEXPONENT>2.3</PATHLOSSEXPONENT>
|
||||
<PATHLOSS0>56</PATHLOSS0>
|
||||
</FREESPACEPROPAGATION>
|
||||
<SMALLSCALE>
|
||||
<RAYLEIGH>
|
||||
<DELAYSPREAD>15</DELAYSPREAD>
|
||||
</RAYLEIGH>
|
||||
</SMALLSCALE>
|
||||
</FADING>
|
||||
<WALLPENETRATIONLOSS>1</WALLPENETRATIONLOSS>
|
||||
<NOISEPOWER>-10</NOISEPOWER>
|
||||
</ENVICONFIG>
|
||||
<TOPOCONFIG>
|
||||
<TYPE>homogeneous</TYPE>
|
||||
<CELLTYPE>macrocell</CELLTYPE>
|
||||
<RELAY>
|
||||
<NUMBEROFRELAYS>5</NUMBEROFRELAYS>
|
||||
</RELAY>
|
||||
<ENBTOPOLOGY>
|
||||
<HEXAGONAL>
|
||||
<NUMBEROFCELLS>23</NUMBEROFCELLS>
|
||||
</HEXAGONAL>
|
||||
</ENBTOPOLOGY>
|
||||
<INTERENBDISTANCE>25</INTERENBDISTANCE>
|
||||
<UEDISTRIBUTION>
|
||||
<CONCENTRATED>1</CONCENTRATED>
|
||||
</UEDISTRIBUTION>
|
||||
<SYSTEMBANDWIDTH>100</SYSTEMBANDWIDTH>
|
||||
<UEFREQUENCY>99</UEFREQUENCY>
|
||||
<MOBILITY>
|
||||
<MOBILITYTYPE>random_waypoint</MOBILITYTYPE>
|
||||
<MOVINGDYNAMICS>
|
||||
<MINSPEED>1</MINSPEED>
|
||||
<MAXSPEED>3</MAXSPEED>
|
||||
<MINPAUSETIME>1</MINPAUSETIME>
|
||||
<MAXPAUSETIME>2</MAXPAUSETIME>
|
||||
</MOVINGDYNAMICS>
|
||||
</MOBILITY>
|
||||
</TOPOCONFIG>
|
||||
<APPCONFIG>
|
||||
<APPTYPE>cbr</APPTYPE>
|
||||
<TRAFFIC>
|
||||
<TRANSPORTPROTOCOL>udp</TRANSPORTPROTOCOL>
|
||||
<PACKETSIZE>
|
||||
<FIXED>
|
||||
<FIXEDVALUE>54</FIXEDVALUE>
|
||||
</FIXED>
|
||||
</PACKETSIZE>
|
||||
<INTERARRIVALTIME>
|
||||
<FIXED>
|
||||
<FIXEDVALUE>19</FIXEDVALUE>
|
||||
</FIXED>
|
||||
</INTERARRIVALTIME>
|
||||
</TRAFFIC>
|
||||
</APPCONFIG>
|
||||
<EMUCONFIG>
|
||||
<EMUTIME>15</EMUTIME>
|
||||
<PERFORMANCE>
|
||||
<METRIC>
|
||||
<THROUGHPUT>1</THROUGHPUT>
|
||||
<LATENCY>1</LATENCY>
|
||||
<SIGNALLINGOVERHEAD></SIGNALLINGOVERHEAD>
|
||||
</METRIC>
|
||||
<LAYER>
|
||||
<MAC>1</MAC>
|
||||
<RLC></RLC>
|
||||
<PDCP></PDCP>
|
||||
</LAYER>
|
||||
<LOGEMU>
|
||||
<DEBUG>1</DEBUG>
|
||||
<INFO></INFO>
|
||||
<WARNING></WARNING>
|
||||
<ERROR>1</ERROR>
|
||||
</LOGEMU>
|
||||
<PACKETTRACE>
|
||||
<MAC></MAC>
|
||||
</PACKETTRACE>
|
||||
</PERFORMANCE>
|
||||
</EMUCONFIG>
|
||||
<PROFILE>EURECOM</PROFILE>
|
||||
</OPENAIRINTERFACE>
|
||||
@@ -1,72 +0,0 @@
|
||||
include $(OPENAIR_DIR)/common/utils/Makefile.inc
|
||||
LIB = -lxml2
|
||||
|
||||
TOP_DIR = ../..
|
||||
OPENAIR1_TOP = ../..
|
||||
OPENAIR2_TOP = ../../../openair2
|
||||
OPENAIR3_TOP = ../../../openair3
|
||||
OPENAIR3 = $(OPENAIR3_DIR)
|
||||
|
||||
CFLAGS += -DPHYSIM -DNODE_RG -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TX=2 -DMAX_MODULES=1 -I/usr/include/X11 #-Wno-packed-bitfield-compat
|
||||
|
||||
|
||||
CFLAGS += -m32 -DOPENAIR_LTE -DOPENAIR2 #-DOFDMA_ULSCH -DIFFT_FPGA -DIFFT_FPGA_UE
|
||||
|
||||
#CFLAGS += -DXFORMS
|
||||
|
||||
ifdef DEBUG_PHY
|
||||
CFLAGS += -DDEBUG_PHY
|
||||
endif
|
||||
|
||||
ifdef PDCP_USE_NETLINK
|
||||
CFLAGS += -DPDCP_USE_NETLINK -DLINUX -DDEBUG_CONTROL
|
||||
endif
|
||||
|
||||
#ifdef OCG
|
||||
CFLAGS += -I/usr/include/libxml2 -lxml2
|
||||
#endif
|
||||
|
||||
include $(OPENAIR1_DIR)/PHY/Makefile.inc
|
||||
include $(OPENAIR1_DIR)/SCHED/Makefile.inc
|
||||
include $(OPENAIR2_DIR)/LAYER2/Makefile.inc
|
||||
include $(OPENAIR1_DIR)/SIMULATION/ETH_TRANSPORT/Makefile.inc
|
||||
|
||||
SIMULATION_OBJS = $(TOP_DIR)/SIMULATION/TOOLS/gauss.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/random_channel.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/rangen_double.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/taus.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/TOOLS/multipath_channel.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/rf.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/adc.o
|
||||
SIMULATION_OBJS += $(TOP_DIR)/SIMULATION/RF/dac.o
|
||||
|
||||
OBJ = $(PHY_OBJS) $(SIMULATION_OBJS) $(ETHERNET_TRANSPORT_OBJS) $(TOOLS_OBJS) $(SCHED_OBJS) $(STATS_OBJS)
|
||||
|
||||
all: physim
|
||||
|
||||
|
||||
$(OBJ) : %.o : %.c
|
||||
$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -DPHY_CONTEXT=1 -I$(TOP_DIR) $(L2_incl) -o $@ $<
|
||||
|
||||
$(L2_OBJS) : %.o : %.c
|
||||
$(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) -DMAC_CONTEXT=1 -DPHY_CONTEXT=1 -I$(TOP_DIR) $(L2_incl) -o $@ $<
|
||||
|
||||
physim : $(OBJ) $(L2_OBJS) OCG.c OCG_get_opt.c OCG_detect_file.c OCG_parse_filename.c OCG_create_dir.c OCG_parse_XML.c OCG_save_XML.c OCG_config_mobi.c OCG_generate_report.c
|
||||
$(CC) OCG.c OCG_get_opt.c OCG_detect_file.c OCG_parse_filename.c OCG_create_dir.c OCG_parse_XML.c OCG_save_XML.c OCG_config_mobi.c OCG_generate_report.c -I$(TOP_DIR) $(L2_incl) -o physim $(CFLAGS) $(EXTRA_CFLAGS) $(OBJ) $(L2_OBJS) -lm -lforms -L/usr/local/lib -lforms -lX11 -L/usr/X11R6/lib -lXpm -lblas -lpthread
|
||||
|
||||
clean:
|
||||
rm -f physim
|
||||
rm -f $(OBJ)
|
||||
rm -f $(L2_OBJS)
|
||||
rm -f *.o
|
||||
rm -f *.exe*
|
||||
|
||||
cleanl1:
|
||||
rm -f physim
|
||||
rm -f $(OBJ)
|
||||
rm -f *.o
|
||||
rm -f *.exe
|
||||
cleanl2:
|
||||
rm -f $(L2_OBJS)
|
||||
|
||||
|
||||
@@ -1,174 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/*________________________OEPNAIR/OPENAIR0/________________________
|
||||
|
||||
File : Readme.txt
|
||||
Authors : Lusheng Wang
|
||||
Company : EURECOM
|
||||
Emails : lusheng.wang@eurecom.fr
|
||||
________________________________________________________________*/
|
||||
|
||||
|
||||
-----------------
|
||||
Table of contents
|
||||
-----------------
|
||||
|
||||
The content of this readme is the following:
|
||||
|
||||
1) What is this block about in OpenAirInterface
|
||||
2) Organization of the folders and their dependancies
|
||||
3) Folders and files description
|
||||
4) Makefile targets and how to build
|
||||
5) How to use OCG: run a simple experimentation
|
||||
|
||||
-------------------------------------------------
|
||||
1) What is this block about in OpenAirInterface ?
|
||||
-------------------------------------------------
|
||||
|
||||
This block is called OpenAirInterface Configuration Generation (OCG). Its major function is to parse the XML configuration file and configure an emulation.
|
||||
|
||||
When the user specifies a scenario for emulation from the web portal, the web portal will generate an XML configuration file in the scenario folder of OCG. OCG automatically detects this file and initiates an emulation for it. During the emulation, OCG calls other blocks (such as MobiGen and TrafficGen) and gets feedbacks from them. After the emulation, OCG generates output files in the created folder of the emulation.
|
||||
|
||||
OCG contains the following key modules:
|
||||
|
||||
a) get opt : Get options of the OCG command, e.g. "OCG -f" and "OCG -h"
|
||||
b) detect file : Detect new XML configuration file in the scenario folder
|
||||
c) parse filename : Parse the filename to get user name and file date
|
||||
d) create dir : Create directory in the output directory for an emulation
|
||||
e) parse XML : Parse the XML configuration file
|
||||
f) save XML : Save the XML configuration file in created directory
|
||||
g) call emu : Call the emulator
|
||||
h) generate report : Generate a report to show the states of OCG modules
|
||||
|
||||
-----------------------------------------------------
|
||||
2) Organization of the folders and their dependancies
|
||||
-----------------------------------------------------
|
||||
|
||||
Folder Description
|
||||
------ -----------
|
||||
|
||||
- src/ contains source files
|
||||
|
||||
- include/ contains header files
|
||||
|
||||
- demo/ contains XML configuration files for demo
|
||||
|
||||
- detecting_XML/ contains nothing, but OCG will detect here the XML files generated by the web portal
|
||||
|
||||
- output_folder/ if filename of the XML file can be successfully parsed, OCG creates output folders for users and generates output files for emulations here
|
||||
|
||||
- temp_output_folder/ if filename of the XML file cannot be successfully parsed, OCG generates an output file here
|
||||
|
||||
--------------------------------
|
||||
3) Folders and files description
|
||||
--------------------------------
|
||||
|
||||
Folder/File Description
|
||||
----------- -----------
|
||||
|
||||
- src/OCG.c contains the main() function with the FSM of OCG
|
||||
|
||||
- src/OCG_get_opt.c contains the get_opt() function
|
||||
|
||||
- src/OCG_detect_file.c contains the detect_file() function
|
||||
|
||||
- src/OCG_parse_filename.c contains the parse_filename() function
|
||||
|
||||
- src/OCG_create_dir.c contains the create_dir() function
|
||||
|
||||
- src/OCG_parse_XML.c contains the parse_XML() function
|
||||
|
||||
- src/OCG_save_XML.c contains the save_XML() function
|
||||
|
||||
- src/OCG_call_emu.c contains the call_emu() function
|
||||
|
||||
- src/OCG_generate_report.c contains the generate_report() function
|
||||
|
||||
- include/OCG.h header file of main(), contains the data structure of the basic OpenAirInterface Scenario Descriptor (OSD), etc.
|
||||
|
||||
- include/OCG_get_opt.h header file of get_opt()
|
||||
|
||||
- include/OCG_detect_file.h header file of detect_file()
|
||||
|
||||
- include/OCG_parse_filename.h header file of parse_filename()
|
||||
|
||||
- include/OCG_create_dir.h header file of create_dir()
|
||||
|
||||
- include/OCG_parse_XML.h header file of parse_XML(), contains the declaration of parsing position indicators
|
||||
|
||||
- include/OCG_save_XML.h header file of save_XML()
|
||||
|
||||
- include/OCG_call_emu.h header file of call_emu()
|
||||
|
||||
- include/OCG_generate_report.h header file of generate_report()
|
||||
|
||||
- demo/eurecom.20110208110244.xml contains a demo
|
||||
|
||||
-------------------------------------
|
||||
4) Makefile targets and how to build
|
||||
-------------------------------------
|
||||
|
||||
CC= gcc
|
||||
CFLAGS = -I/usr/include/libxml2
|
||||
LIB = -lxml2
|
||||
|
||||
OCG:
|
||||
${CC} ${CFLAGS} ${LIB} src/OCG.c src/OCG_get_opt.c src/OCG_detect_file.c src/OCG_parse_filename.c src/OCG_create_dir.c src/OCG_parse_XML.c src/OCG_save_XML.c src/OCG_call_emu.c src/OCG_generate_OCG_report.c -o OCG
|
||||
|
||||
---------------------------------------------------------------
|
||||
6) How to use OCG: run a simple experimentation
|
||||
---------------------------------------------------------------
|
||||
|
||||
There are two methods to use the OCG for an emulation:
|
||||
|
||||
a) DEMO mode : use command "OCG -f filename" to run a DEMO mode emulation
|
||||
|
||||
The following steps are required for a DEMO mode emulation:
|
||||
|
||||
i) Put your XML configuration file into the demo/ folder;
|
||||
|
||||
ii) Change the filename as user_name.file_date.xml;
|
||||
|
||||
iii) Run the emulation with the above command;
|
||||
|
||||
iv) Check debug information in the shell, which indicates you the directory where OCG generates the outputs.
|
||||
|
||||
To run an existing demo XML file, step i) and ii) are not required.
|
||||
|
||||
Note that OCG automatically set the path of a demo XML file as demo/, so only filename is required in the command.
|
||||
|
||||
b) USER mode : use command "OCG" to start OCG as a daemon
|
||||
|
||||
The following steps are required for a USER mode emulation:
|
||||
|
||||
i) Run OCG as a daemon with the above command;
|
||||
|
||||
iiA) Configure an emulation scenario through the web portal and press the button to generate an XML file; or
|
||||
|
||||
iiB) Copy your XML file to the detecting_XML/ folder directly;
|
||||
|
||||
iii) Check debug information in the shell, which indicates you the directory where OCG generates the outputs.
|
||||
|
||||
For option iiB), make sure the filename is with the correct format "user_name.file_date.xml". Moreover, make sure the configuration in the XML file is correct.
|
||||
For the format of the XML configuration file, refer to "demo/eurecom.20110208110244.xml".
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<COMMENT > in this output file, -9999 means NOT_PROCESSED; -2 means NO_FILE; -1 means ERROR; 0 means OK </COMMENT >
|
||||
<OCG_GET_OPT > -2 </OCG_GET_OPT >
|
||||
<OCG_DETECT_FILE > 0 </OCG_DETECT_FILE >
|
||||
<OCG_PARSE_FILENAME> -1 </OCG_PARSE_FILENAME>
|
||||
<OCG_CREATE_DIR > -9999 </OCG_CREATE_DIR >
|
||||
<OCG_PARSE_XML > -9999 </OCG_PARSE_XML >
|
||||
<OCG_SAVE_XML > -9999 </OCG_SAVE_XML >
|
||||
<OCG_CALL_EMU > -9999 </OCG_CALL_EMU >
|
||||
@@ -63,7 +63,7 @@ Given the great importance of mobility features in the world of wireless communi
|
||||
/** @defgroup _omg_ OMG: The mobility generator of OpenAirInterface
|
||||
* @ingroup _omg
|
||||
OMG, or OpenAir Mobility Generation has born to add the mobility features to OpenAir given the increasing importance of realistic mobility patterns in the world of wireless networks and the need for simulation to explore this area. OMG includes the most used mobility models, in three classes, namely: \b EMBEDDED \b TRACE \ FEDERATED. In the \b EMBEDDED class, random mobility is embedded in OMG. The most used random models have been implemneted, namely \b Random \b Walk , \b Random \b Way \b Point and \b Graph based mobility. The \b TRACE class is able to load into OMG and OAI trace-based mobility files. The \b FEDERATED class allows OMG to interface with an external mobility/traffic generator to obtain and change mobility patterns. The \b FEDERATED class currently support the federation with SUMO, Simulation of Urban Mobility, but could easily be extended to accept other simulator. Thus, it is capable of abstracting the motion of vehicles or mobile nodes in different ways. And since it is also useful to model the fix nodes that can exist in the road to communicate with the mobile nodes, a \b STATIC model is also included in OMG. \n
|
||||
OMG has a direct relation ship with the already existing \b OCG module (OpenAir Config Generation). Actually, this latter module is responsible of setting the emulation time to synchronize OMG, requesting OMG to start simulation scenario, update the nodes positions and many other features. (see section Specification) \n
|
||||
OMG has a direct relation ship with the (edit: deleted as of 2023-03-09) OCG module (OpenAir Config Generation). Actually, this latter module is responsible of setting the emulation time to synchronize OMG, requesting OMG to start simulation scenario, update the nodes positions and many other features. (see section Specification) \n
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -37,12 +37,6 @@
|
||||
#include "otg_form.h"
|
||||
#include "otg_kpi.h"
|
||||
|
||||
#ifdef ENABLE_DB_STATS
|
||||
#include <mysql.h>
|
||||
#include <m_ctype.h>
|
||||
#include <sql_common.h>
|
||||
#endif
|
||||
|
||||
extern uint16_t NB_UE_INST;
|
||||
|
||||
//#include "LAYER2/MAC/extern.h"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,43 +0,0 @@
|
||||
#/*
|
||||
# * 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
|
||||
# */
|
||||
|
||||
if HAVE_DOXYGEN
|
||||
directory = $(top_srcdir)/DOCS/Documentation
|
||||
|
||||
if HAVE_PDFLATEX
|
||||
doc_DATA = $(directory)oaisim_mme.pdf
|
||||
else
|
||||
doc_DATA = $(directory)
|
||||
endif
|
||||
$(directory): doxyfile.stamp
|
||||
|
||||
doxyfile.stamp:
|
||||
$(DOXYGEN) Doxyfile
|
||||
echo Timestamp > doxyfile.stamp
|
||||
|
||||
CLEANFILES = doxyfile.stamp
|
||||
|
||||
all-local: doxyfile.stamp
|
||||
clean-local:
|
||||
rm -f doxyfile.stamp
|
||||
rm -rf $(top_srcdir)/DOCS/Documentation/html
|
||||
rm -rf $(top_srcdir)/DOCS/Documentation/latex
|
||||
endif
|
||||
@@ -1,751 +0,0 @@
|
||||
\documentclass[a4paper,oneside]{report}
|
||||
\usepackage{pgfplots}
|
||||
\ifx\HCode\UnDef\else\def\pgfsysdriver{pgfsys-tex4ht.def}\fi
|
||||
\usepackage{verbatim}
|
||||
\usepackage{listings}
|
||||
\usepackage{tikz,graphicx}
|
||||
\usepackage{caption}
|
||||
\usepackage{float}
|
||||
\usepackage{hyperref}
|
||||
\usepackage{subfiles}
|
||||
\usepackage{nomencl}
|
||||
\usepackage{chngcntr}
|
||||
\makenomenclature
|
||||
|
||||
\usepackage{makeidx}
|
||||
\makeindex
|
||||
|
||||
\counterwithout{figure}{chapter}
|
||||
|
||||
\usetikzlibrary{external,calc,trees,positioning,arrows,chains,shapes.geometric,%
|
||||
decorations.pathreplacing,decorations.pathmorphing,shapes,%
|
||||
matrix,fit,shapes.symbols,backgrounds,fit}
|
||||
\captionsetup[figure]{labelformat=simple}
|
||||
|
||||
\renewcommand{\figurename}{Figure}
|
||||
% Returns three nodes: The argument, and the projections of the argument on the left and right borders of the bounding box
|
||||
\newcommand{\extendnode}[1]{
|
||||
(#1)
|
||||
($(current bounding box.north east)!(#1)!(current bounding box.south east)$)
|
||||
($(current bounding box.north west)!(#1)!(current bounding box.south west)$)
|
||||
}
|
||||
|
||||
\usetikzlibrary{calc,trees,positioning,arrows,chains,shapes.geometric,%
|
||||
decorations.pathreplacing,decorations.pathmorphing,shapes,%
|
||||
matrix,shapes.symbols,backgrounds,fit,intersections}
|
||||
|
||||
\title{OAI EPC current development}
|
||||
\author{Sebastien ROUX\\Eurecom\\sebastien.roux@eurecom.fr}
|
||||
|
||||
\definecolor{javared}{rgb}{0.6,0,0} % for strings
|
||||
\definecolor{javagreen}{rgb}{0.25,0.5,0.35} % comments
|
||||
\definecolor{ckeyw}{rgb}{0,0,0.8} % keywords
|
||||
\definecolor{ccomment}{rgb}{0.6,0.6,0.6} % javadoc
|
||||
|
||||
\lstset{
|
||||
language=C,
|
||||
basicstyle=\ttfamily,
|
||||
keywordstyle=\color{ckeyw}\bfseries,
|
||||
stringstyle=\color{javared},
|
||||
commentstyle=\color{ccomment},
|
||||
morecomment=[s][\color{ccomment}]{/**}{*/},
|
||||
numbers=left,
|
||||
numberstyle=\tiny\color{black},
|
||||
stepnumber=1,
|
||||
numbersep=10pt,
|
||||
tabsize=4,
|
||||
showspaces=false,
|
||||
showstringspaces=false,
|
||||
breaklines
|
||||
}
|
||||
|
||||
|
||||
\tikzset{
|
||||
table nodes/.style={
|
||||
rectangle,
|
||||
rounded corners=0.6mm,
|
||||
draw=black,
|
||||
align=center,
|
||||
minimum height=7mm,
|
||||
minimum width=22mm,
|
||||
text depth=0.5ex,
|
||||
text height=2ex,
|
||||
% inner xsep=0pt,
|
||||
outer sep=0pt,
|
||||
},
|
||||
table/.style={
|
||||
matrix of nodes,
|
||||
% row sep=-\pgflinewidth,
|
||||
% column sep=-\pgflinewidth,
|
||||
rectangle,
|
||||
nodes={
|
||||
table nodes
|
||||
},
|
||||
execute at empty cell={\node[draw=none]{};}
|
||||
},
|
||||
cps/.style={
|
||||
draw=black,
|
||||
fill=blue!20,
|
||||
rounded corners=0.6mm,
|
||||
},
|
||||
ups/.style={
|
||||
draw=black,
|
||||
fill=yellow!30,
|
||||
rounded corners=0.6mm,
|
||||
},
|
||||
stdlinux/.style={
|
||||
draw=black,
|
||||
fill=green!10,
|
||||
rounded corners=0.6mm,
|
||||
},
|
||||
rect/.style={
|
||||
rectangle,
|
||||
draw,
|
||||
},
|
||||
schritt/.style={
|
||||
draw,
|
||||
rounded corners,
|
||||
fill=blue!20,
|
||||
inner xsep=2em,
|
||||
},
|
||||
t0/.style={draw,fill=blue!20},
|
||||
t1/.style={draw,fill=blue!40},
|
||||
background/.style={
|
||||
draw,
|
||||
fill=yellow!30,
|
||||
align=center,
|
||||
dashed,
|
||||
},
|
||||
background2/.style={
|
||||
draw,
|
||||
fill=green!15,
|
||||
align=center,
|
||||
},
|
||||
connector/.style={
|
||||
-latex,
|
||||
font=\scriptsize
|
||||
},
|
||||
rectangle connector/.style={
|
||||
connector,
|
||||
to path={(\tikztostart) -| (\tikztotarget) },
|
||||
pos=0.5
|
||||
},
|
||||
rectangle connector/.default=-2cm,
|
||||
straight connector/.style={
|
||||
connector,
|
||||
to path=--(\tikztotarget) \tikztonodes
|
||||
},
|
||||
queue/.style={
|
||||
draw,
|
||||
fill=yellow!30,
|
||||
cylinder,
|
||||
aspect=0.7,
|
||||
minimum height=1cm,
|
||||
minimum width=0.7cm
|
||||
},
|
||||
}
|
||||
\renewcommand{\nomname}{List of Abbreviations}
|
||||
\renewcommand{\thefigure}{\Alph{figure}}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
\tableofcontents
|
||||
\printnomenclature[2cm]
|
||||
|
||||
\chapter*{MME and S+P-Gateway} \stepcounter{chapter}
|
||||
\addcontentsline{toc}{chapter}{MME and S+P-Gateway}
|
||||
|
||||
% \nomenclature{MME}{Mobility Management Entity}
|
||||
% \nomenclature{S-GW}{Serving Gateway}
|
||||
% \nomenclature{P-GW}{PDN Gateway}
|
||||
\begin{figure}[H]
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\tikzstyle{every node}=[font=\footnotesize]
|
||||
\matrix (table) [row sep=0.5cm, column sep={3.2cm,between origins}, table,text width=3mm,name=table] {
|
||||
& & &\\
|
||||
& & &\\
|
||||
& & &\\
|
||||
& & &\\
|
||||
& & &\\
|
||||
};
|
||||
\node(MMEAPP)[cps,draw,fit=(table-1-1)(table-1-2),table nodes]{MME Application};
|
||||
\node(SPGW)[cps,draw,fit=(table-1-3)(table-1-4),table nodes]{S+P-GW Application};
|
||||
\node(NAS)[cps,draw,fit=(table-2-2),table nodes]{NAS};
|
||||
\node(S6A)[dashed,cps,draw,fit=(table-3-1),table nodes]{S6a/Diameter};
|
||||
\node(S1AP)[cps,draw,fit=(table-3-2),table nodes]{S1-MME/S1AP};
|
||||
\node(S1U)[ups,draw,fit=(table-3-3),table nodes]{S1-U/GTPU};
|
||||
\node(SGI)[dashed,ups,draw,fit=(table-3-4),table nodes]{SGi};
|
||||
\node(SCTP)[stdlinux,draw,fit=(table-4-1)(table-4-2),table nodes]{SCTP};
|
||||
\node(UDP)[stdlinux,draw,fit=(table-4-3),table nodes]{UDP};
|
||||
\node(IP)[stdlinux,draw,fit=(table-5-1)(table-5-2)(table-5-3)(table-5-4),table nodes]{IP};
|
||||
|
||||
\draw[<->, dashed, draw=red] (MMEAPP) -- node(arrow1)[above, align=center]{S11}(SPGW);
|
||||
\draw[<-,dashed] (S1U) -- (SPGW.south-|S1U);
|
||||
\draw[<-,dashed] (SGI) -- (SPGW.south-|SGI);
|
||||
\draw[-] (S6A) -- (MMEAPP.south-|S6A);
|
||||
\draw[-] (NAS) -- (MMEAPP.south-|NAS);
|
||||
\draw[-] (S1AP) -- (NAS);
|
||||
\draw[-] (S1U) -- (SGI);
|
||||
\draw[-] (S1U) -- (UDP);
|
||||
\draw[-] (S1AP) -- (SCTP.north-|S1AP);
|
||||
\draw[-] (S6A) -- (SCTP.north-|S6A);
|
||||
\draw[-] (SCTP) -- (IP.north-|SCTP);
|
||||
\draw[-] (UDP) -- (IP.north-|UDP);
|
||||
\draw[-] (SGI) -- (IP.north-|SGI);
|
||||
\draw[-] (MMEAPP.south) |- (S1AP.west);
|
||||
|
||||
\draw($(table.north west) + (-2mm,1mm)$) rectangle ($(table.south east) + (2mm,-1mm)$);
|
||||
|
||||
\node[cps, minimum width=5mm,minimum height=5mm,below=of IP.south west,anchor=west](l1){};
|
||||
\node[right=2mm of l1](ct1) {Control Plane};
|
||||
\node[ups,minimum width=5mm,minimum height=5mm,below=0.3cm of l1](l2){};
|
||||
\node[below=0.3cm of ct1, right=2mm of l2](ct2) {User Plane};
|
||||
\node[stdlinux,minimum width=5mm,minimum height=5mm,below=0.3cm of l2](l3){};
|
||||
\node[below=0.3cm of ct2, right=2mm of l3](ct3) {Linux IP Stack};
|
||||
\draw[minimum width=5mm,minimum height=5mm,below=0.3cm of l3,<->,dashed, draw=red]
|
||||
($(l3.south west) - (0,0.55cm)$) -- node(l4){} ($(l3.south east) - (0,0.55cm)$);
|
||||
\node[right=2mm of l4.north east](ct4) {Abstraction link};
|
||||
\draw[minimum width=5mm,minimum height=5mm,below=0.3cm of l4,->,dashed]
|
||||
($(l4.south west) - (0,0.25cm)$) -- node(l5){} ($(l4.south east) - (0,0.25cm)$);
|
||||
\node[right=2mm of l5.north east](ct5) {Control};
|
||||
\node[draw,fit=(ct1)(l1)(ct2)(l2)(ct3)(l3)(ct4)(l4)(ct5)(l5)] {};
|
||||
|
||||
\end{tikzpicture}
|
||||
\caption{MME and S+P-GW architecture} \label{fig:MMEoverall}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
|
||||
Figure \ref{fig:MMEoverall} shows the targeted implementation of Eurecom
|
||||
EPC.
|
||||
|
||||
\chapter*{S1AP layer} \stepcounter{chapter}
|
||||
\addcontentsline{toc}{chapter}{S1AP layer}
|
||||
|
||||
\nomenclature{S1AP}{S1 Application Protocol}S1AP layer relies on
|
||||
\nomenclature{ASN.1}{Abstract Syntax Notation.1}ASN.1 messages
|
||||
description. Generating C code from the specification
|
||||
implies three steps:
|
||||
\begin{enumerate}
|
||||
\item Modify .asn files to match tools limitation.
|
||||
\item Generate \nomenclature{IE}{Informations Elements}IEs with the help of the asn1c free tool.
|
||||
\item Use the provided script which generates \nomenclature{PDU}{Protocol Data Unit}PDU codec\footnote{Encode/Decode}.
|
||||
\end{enumerate}
|
||||
|
||||
\chapter*{Inter-task interface} \stepcounter{chapter}
|
||||
\addcontentsline{toc}{chapter}{Inter-task interface}
|
||||
|
||||
\section{Concurrency}
|
||||
|
||||
Code divided in layers should be able to be executed in parallel to use the full
|
||||
\nomenclature{CPU}{Control Processing Unit}CPUs power. We can achieve better performance
|
||||
by using some mechanisms that runs part of code in parallel on UNIX platforms:
|
||||
\begin{itemize}
|
||||
\item Multi-process: no link between processes, usage of sockets or pipes is mandatory.
|
||||
\item Forks: code is duplicated and data are stored in different spaces.
|
||||
\item Threads: only code is duplicated, data space is shared between processes
|
||||
\end{itemize}
|
||||
Data synchronization is the first issue to think about when using such mechanisms.
|
||||
|
||||
\section{Overall description}
|
||||
|
||||
A single \nomenclature{API}{Application Programming Interface}API
|
||||
(called ITTI\footnote{InTer-Task Interface}) is used to manage messages
|
||||
exchanged between the tasks which are running on separate threads.
|
||||
This will lead in better usage of multi-core environments.
|
||||
\begin{figure}[h]
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\node[](t1) { Task A };
|
||||
\node[below=of t1,yshift=7mm,font=\tiny](s1) { send msg to task };
|
||||
\node[queue,rotate=90,below=of t1.south,anchor=top](c1) {};
|
||||
\node[right=of t1,xshift=15mm](t2) { Task B };
|
||||
\node[below=of t2,yshift=7mm,font=\tiny](r2) { recv msg from task };
|
||||
\node[queue,rotate=90,below=of t2.south,anchor=top](c2) {};
|
||||
\node[dashed,fit=(c1)(t1)(s1),draw](T1){};
|
||||
\node[dashed,fit=(c2)(t2)(r2),draw](T2){};
|
||||
\node[draw](ITTI) at ($(T1)!0.5!(T2) + (0, -2.3)$){ITTI interface};
|
||||
\draw[->] (T1) |- (ITTI);
|
||||
\draw[->] (ITTI.east) -| (c2.bottom);
|
||||
\draw[->] (c2.east) -- (r2);
|
||||
\node[queue,rotate=90,minimum width=5mm,minimum height=7mm,right=of c2,anchor=top,yshift=-15mm](c3) {};
|
||||
\node[dashed,rectangle,minimum width=5mm,minimum height=5mm,draw,below=7mm of c3,anchor=east](c4) {};
|
||||
\node[right=4mm of c3.shape center](x3){Message queue};
|
||||
\node[right=4mm of c4.center](x4){Thread};
|
||||
\node[draw,fit=(c3)(x3)(x4)(c4)](T4){};
|
||||
\end{tikzpicture}
|
||||
\caption{Overall process} \label{fig:Overall process}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
Figure \ref{fig:Overall process} describes the basic fonctionnement of the inter-task interface.
|
||||
A message sent from
|
||||
Task A is en-queued to the message queue belonging to the target task. Note that
|
||||
tasks can send messages to themselves. Another API (See Figure \ref{fig:Broadcasting process}) defines broadcast messaging
|
||||
where any task can send a broadcast message to every other task.
|
||||
\begin{figure}[H]
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\node[](t1) { Task A };
|
||||
\node[below=of t1,yshift=7mm,font=\tiny](s1) { send broadcast msg };
|
||||
\node[queue,rotate=90,below=of t1.south,anchor=top](c1) {};
|
||||
|
||||
\node[right=of t1,xshift=35mm](t2) { Task B };
|
||||
\node[below=of t2,yshift=7mm,font=\tiny](r2) { recv msg from task };
|
||||
\node[queue,rotate=90,below=of t2.south,anchor=top](c2) {};
|
||||
|
||||
\node[right=of t2,xshift=15mm](tn) { Task N };
|
||||
\node[below=of tn,yshift=7mm,font=\tiny](rn) { recv msg from task };
|
||||
\node[queue,rotate=90,below=of tn.south,anchor=top](cn) {};
|
||||
\node[dashed,fit=(c1)(t1)(s1),draw](T1){};
|
||||
\node[dashed,fit=(c2)(t2)(r2),draw](T2){};
|
||||
\node[dashed,fit=(cn)(tn)(rn),draw](TN){};
|
||||
|
||||
\node[](ITTI) at ($(T2)!0.5!(TN)$){...};
|
||||
\node[draw](ITTI) at ($(T1)!0.5!(T2) + (0, -2.3)$){ITTI interface};
|
||||
\draw[->] (T1) |- (ITTI);
|
||||
\draw[->] (ITTI.east) -| (c2.bottom);
|
||||
\draw[->] (ITTI.east) -| (cn.bottom);
|
||||
\draw[->] (c2.east) -- (r2);
|
||||
\draw[->] (cn.east) -- (rn);
|
||||
\node[queue,rotate=90,minimum width=5mm,minimum height=7mm,below=23mm of T1](c3) {};
|
||||
\node[dashed,rectangle,minimum width=5mm,minimum height=5mm,draw,below=7mm of c3,anchor=east](c4) {};
|
||||
\node[right=4mm of c3.shape center](x3){Message queue};
|
||||
\node[right=4mm of c4.center](x4){Thread};
|
||||
\node[draw,fit=(c3)(x3)(x4)(c4)](T4){};
|
||||
\end{tikzpicture}
|
||||
\caption{Broadcasting process} \label{fig:Broadcasting process}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
Once a task received a new message and if the task is in sleep mode (i.e. not handling
|
||||
any message), the task is waken up and the message is de-queued. We can imagine a limit
|
||||
in number of parallel tasks, for example N+1 CPU's. Architectures using hyper-threading
|
||||
mechanism can have this value extended to 2 x CPU's.
|
||||
Every task is running in a separated pthread, awaiting for new messages to handle.
|
||||
|
||||
\section{Signals from kernel}
|
||||
|
||||
Handling of signals from kernel is the more critical part as a signal can be raised
|
||||
at any moment and will interrupt one of the running thread. Used signals should be restricted
|
||||
to a single task that will handle them (using the POSIX sigmask function) . Moreover, it isn't
|
||||
thread-safe to use mutexes inside a signal handler, a synchronization flag should be used to
|
||||
notify the signal handler task. This task will then send the appropriate message
|
||||
to the right task. For example, handling of signals can be done in the main thread or by a background task
|
||||
scheduled periodically.
|
||||
To overcome these issues, sigtimedwait and sigwaitinfo API functions can be used
|
||||
to wait for a signal to happen. Signals will be received in the thread context, as far as
|
||||
other threads block these signals.
|
||||
|
||||
\section{Priority handling}
|
||||
|
||||
Usage of message prioritization enables tasks to send critical messages with a faster
|
||||
delivery time regarding other messages en-queued for the target task.
|
||||
For now only seven priority levels can be applied when defining tasks:
|
||||
\begin{itemize}
|
||||
\item TASK\_PRIORITY\_MAX
|
||||
\item TASK\_PRIORITY\_MAX\_LEAST
|
||||
\item TASK\_PRIORITY\_MED\_PLUS
|
||||
\item TASK\_PRIORITY\_MED
|
||||
\item TASK\_PRIORITY\_MED\_LEAST
|
||||
\item TASK\_PRIORITY\_MIN\_PLUS
|
||||
\item TASK\_PRIORITY\_MIN
|
||||
\end{itemize}
|
||||
For now message priority does not involve any suitable scheduler: every time a message is de-queued,
|
||||
message priority of other messages is incremented by one.
|
||||
|
||||
\section{Message scheduling}
|
||||
Currently, there is no software limit on the maximum number of threads executed in parallel.
|
||||
When a task sends a message, it is en-queued in the right message queue, belonging to
|
||||
the target task. The queue is a double-linked list. A mutex prevents other tasks
|
||||
from modifying this queue while a task is en-queueing or removing a message.
|
||||
|
||||
\section{Message definition}
|
||||
Messages are defined using a single macro that adds the message to the ids enumeration
|
||||
and maps data of the message to the union of messages.
|
||||
\begin{lstlisting}
|
||||
MESSAGE_DEF(S1AP_SCTP_NEW_MESSAGE_IND, TASK_PRIORITY_MED, S1apSctpNewMessageInd s1apSctpNewMessageInd)
|
||||
\end{lstlisting}
|
||||
and the associated data:
|
||||
\begin{lstlisting}
|
||||
typedef struct {
|
||||
uint8_t *buffer; ///< SCTP buffer
|
||||
uint32_t bufLen; ///< SCTP buffer length
|
||||
int32_t assocId; ///< SCTP physical association ID
|
||||
uint8_t stream; ///< Stream number on which data had been received
|
||||
uint16_t instreams; ///< Number of input streams for the SCTP connection between peers
|
||||
uint16_t outstreams; ///< Number of output streams for the SCTP connection between peers
|
||||
} S1apSctpNewMessageInd;
|
||||
\end{lstlisting}
|
||||
\section{Task message handling}
|
||||
\begin{lstlisting}
|
||||
void* s1ap_mme_thread(void *args) {
|
||||
while(1) {
|
||||
/* Trying to fetch a message from the message queue.
|
||||
* If the queue is empty, this function will block till a
|
||||
* message is sent to the task.
|
||||
*/
|
||||
receive_msg(TASK_S1AP, &receivedMessage);
|
||||
assert(receivedMessage != NULL);
|
||||
switch(receivedMessage->messageId) {
|
||||
case S1AP_SCTP_NEW_MESSAGE_IND:
|
||||
{
|
||||
//Some processing
|
||||
} break;
|
||||
default:
|
||||
{
|
||||
S1AP_DEBUG("Unkwnon message ID %d\n", receivedMessage->messageId);
|
||||
} break;
|
||||
}
|
||||
free(receivedMessage);
|
||||
receivedMessage = NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
\end{lstlisting}
|
||||
\section{Messages logging}
|
||||
\begin{figure}[H]
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\node[](p1) { Process };
|
||||
\node[below=5mm of p1](i1) { ITTI };
|
||||
\node[queue,right=of i1,rotate=90,anchor=base](q1) {};
|
||||
\node[draw,fit=(i1)(q1)](s1) { };
|
||||
\node[fit=(p1)(i1)(q1)(s1),draw](T1){};
|
||||
\node[queue,fill=red!30,right=of s1.east,yshift=-5mm](c1) { TCP socket };
|
||||
\node[right=of c1](r1){ Remote host n };
|
||||
\node[fit=(r1),draw](R2){};
|
||||
\node[queue,fill=red!30,right=of s1.east,yshift=5mm](c2) { TCP socket };
|
||||
\node[right=of c2](r1){ Remote host 1 };
|
||||
\node[fit=(r1),draw](R1){};
|
||||
\draw[-] (q1.base) -- ++ (1,0) -| ++ (0,.6) -- (c2.west);
|
||||
\draw[-] (c2) -- (R1);
|
||||
\draw[-] (q1.base) -- ++ (1,0) -| ++ (0,-.4) -- (c1.west);
|
||||
\draw[-] (c1) -- (R2);
|
||||
\end{tikzpicture}
|
||||
\caption{Remote debugging} \label{fig:Remote debugging}
|
||||
\end{center}
|
||||
\end{figure}
|
||||
Logging of inter-tasks messages can be setup using an external tool that will be
|
||||
connected to the ITTI. Based on an array of dumped messages, they are serialized
|
||||
to produce an array of byte sent over a socket. A remote tool can then decode
|
||||
messages and display fields, message number, time.\\
|
||||
Additionaly, logs from standard output can be printed over the debug tool.
|
||||
Multi-user debugging on only one running process can be achieved using this interface.
|
||||
Messages to dump should be queued for a pure asynchronous communication between the
|
||||
dump task and the remote hosts.
|
||||
Another interesting feature could be to send a message to a task from an host,
|
||||
allowing run-time re-configuration.
|
||||
The C pre-processor can be used to generate messages definition (using
|
||||
\nomenclature{XML}{Extensible Markup Language}XML templates
|
||||
for example).\\
|
||||
\section{Limitations}
|
||||
Data pointers belonging to one task should never be passed to another task.
|
||||
The presented mechanism does not prevent a task from being locked. In such a case,
|
||||
the blocked task will no more handle messages incoming from other tasks.
|
||||
|
||||
\section{Benefits}
|
||||
\begin{itemize}
|
||||
\item Only a single entry point between all tasks (easy inter-task communication tracking and debugging).
|
||||
\item Usage of message queues enables parallelization of layers.
|
||||
\item Message prioritization and scheduling.
|
||||
\item Protection of data between threads is done by the API at an higher level.
|
||||
\end{itemize}
|
||||
|
||||
\section{To do}
|
||||
\begin{itemize}
|
||||
\item Implement a priority based scheduler. Currently the queue of messages works as a FIFO.
|
||||
\item Limit the number of tasks thread that can be run in parallel
|
||||
\end{itemize}
|
||||
|
||||
\chapter*{Signal API} \stepcounter{chapter}
|
||||
\addcontentsline{toc}{chapter}{Signal API}
|
||||
|
||||
On LINUX platforms, processes will receive signals comming from Kernel.
|
||||
A single blocking entry point handles all used signals that are requested by the
|
||||
MME. The main application thread is reserved to signal handling as this thread will
|
||||
be blocked till a new signal is ready for handling.\\
|
||||
Using this method prevents threads from being interrupted by signals handler which
|
||||
can interrupt the thread at any time and as a consequence create some misbehaving
|
||||
in threads contexts.
|
||||
Following is a sample list of signals handled:
|
||||
\begin{itemize}
|
||||
\item SIGABRT This is signal is sent to the process when abort() function is called
|
||||
within the process and kill the process. Process can for example display the stack
|
||||
once this signal is received.
|
||||
\item SIGRTMIN This signal is used by the timer API and is raised everytime a
|
||||
timer has expired.
|
||||
\end{itemize}
|
||||
Till now there is no way for tasks to request a new signal.
|
||||
|
||||
\chapter*{Timer API} \stepcounter{chapter}
|
||||
\addcontentsline{toc}{chapter}{Timer API}
|
||||
|
||||
Timer API doesn't consist of a task (i.e. tasks cannot send messages to it).
|
||||
Handling of UNIX signal associated to the timers is a Real-time signal with an id (SIGRTMIN)
|
||||
depending on the platform. Management of this signal is done by the signal interface
|
||||
and developpers should not care about handling timer signals incoming from Kernel.
|
||||
Once a timer has expired the task which has requested it will receive the TIMER\_HAS\_EXPIRED
|
||||
signal.
|
||||
Note that timer\_id is of type long and thus its size is platform specific.
|
||||
|
||||
\section{Timer types}
|
||||
|
||||
\begin{itemize}
|
||||
\item TIMER\_ONE\_SHOT After expiry and its associated signal, the timer is removed.
|
||||
\item TIMER\_PERIODIC The timer is automatically reloaded on each expiry while the task
|
||||
which has setup this timer doesn't cancel it.
|
||||
\end{itemize}
|
||||
|
||||
\section{Requesting a new signal}
|
||||
Any task can request a new signal by invoking the following API:
|
||||
\begin{lstlisting}
|
||||
int timer_setup(
|
||||
uint32_t interval_sec,
|
||||
uint32_t interval_us,
|
||||
task_id_t task_id,
|
||||
timer_type_t type,
|
||||
long *timer_id);
|
||||
\end{lstlisting}
|
||||
|
||||
Note that timer id is a unique identifier to distinguish timers.
|
||||
|
||||
\section{Disable and remove a timer}
|
||||
|
||||
Disable and remove the timer referenced by timer\_id.
|
||||
\begin{lstlisting}
|
||||
int timer_remove(long timer_id);
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Timer signal expiry}
|
||||
|
||||
Once the signal dispatcher receives the SIGRTMIN signal, a new signal is sent
|
||||
to the task which has requested the timer. Contrary to signal request, timer
|
||||
expiry notification is achieved using the intertask mechanism.
|
||||
The signal data associated to this event follows:
|
||||
\begin{lstlisting}
|
||||
typedef struct {
|
||||
long timer_id;
|
||||
} timer_has_expired_t;
|
||||
\end{lstlisting}
|
||||
|
||||
\chapter*{Compiling core EPC} \stepcounter{chapter}
|
||||
\addcontentsline{toc}{chapter}{Compiling core EPC}
|
||||
|
||||
The core EPC software has been tested on Ubuntu 12.04LTS x86 and ia64.
|
||||
Before compiling the core EPC, some packages should be installed on the platform.
|
||||
|
||||
\section{Dependencies}
|
||||
|
||||
\begin{itemize}
|
||||
\item libsctp-dev
|
||||
\item libpthread-dev
|
||||
\item automake and autoconf
|
||||
\item libtoolize
|
||||
\item gcc, g++, make
|
||||
\item flex and bison
|
||||
\item openssl-dev
|
||||
\item asn1c (see section \ref{sec:asn1c})
|
||||
\item freediameter (see section \ref{sec:freediameter}) and gnutls 3.1.0
|
||||
(see section \ref{sec:gnutls})
|
||||
\end{itemize}
|
||||
Command-line to install the required packages:
|
||||
\begin{lstlisting}
|
||||
sudo apt-get install cmake make gcc flex bison \
|
||||
libsctp1 libsctp-dev libidn2-0-dev libidn11-dev \
|
||||
libmysqlclient-dev libxml2-dev swig python-dev \
|
||||
cmake-curses-gui valgrind guile-2.0-dev \
|
||||
libgmp-dev libgcrypt11-dev gdb unzip \
|
||||
libtasn1-3-dev g++ autoconf automake \
|
||||
openssl-dev -y
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{ASN1c}
|
||||
\label{sec:asn1c}
|
||||
|
||||
\subsection{gnutls}
|
||||
\label{sec:gnutls}
|
||||
|
||||
The GNUTls library is only used by freediameter for certificate handling and as a
|
||||
consequence should be installed before trying to compile the freediameter library.
|
||||
\begin{lstlisting}
|
||||
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.0.tar.xz
|
||||
tar -xvf gnutls-3.1.0.tar.xz
|
||||
cd gnutls-3.1.0/
|
||||
./configure LDFLAGS='-L/usr/local/lib'
|
||||
make
|
||||
sudo make install
|
||||
\end{lstlisting}
|
||||
Note: when dependencies are installed in /usr/local instead of /usr,
|
||||
LDFLAGS has to be overriden with the path to libraries when configuring the package:
|
||||
LDFLAGS='-L/usr/local/lib'.
|
||||
|
||||
\subsection{freediameter}
|
||||
\label{sec:freediameter}
|
||||
Freediameter is the package that provides diameter capabilities to the MME/HSS.
|
||||
On top of this stack, S6A avp dictionnary is used to enable a compliant S6A interface.
|
||||
\begin{lstlisting}
|
||||
wget http://www.freediameter.net/hg/freeDiameter/archive/1.1.5.tar.gz
|
||||
tar -xvf 1.1.5.tar.gz
|
||||
cd freeDiameter-1.1.5
|
||||
patch -p1 < ../../freediameter-1.1.5.patch
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ../
|
||||
make
|
||||
make test
|
||||
sudo make install
|
||||
\end{lstlisting}
|
||||
If you want ot install this package in /usr instead of /usr/local,\\
|
||||
-DCMAKE\_INSTALL\_PREFIX:PATH=/usr should be passed to cmake at configuration.
|
||||
|
||||
\chapter*{System configuration} \stepcounter{chapter}
|
||||
\addcontentsline{toc}{chapter}{System configuration}
|
||||
|
||||
Currently there is two ways to configure the system:
|
||||
\begin{itemize}
|
||||
\item Compilation configuration
|
||||
\item Boot-up configuration
|
||||
\end{itemize}
|
||||
In the first type of configuration, the single system configuration structure
|
||||
is filled in with default values that can be found in the mme\_default\_values.h
|
||||
header file.\\
|
||||
When Boot-up configuration is used, a configuration file is passed to the process
|
||||
by using the either -c filename.conf or --conf=filename.conf. This file is then parsed
|
||||
by the bison interpreter and values are replaced in the global system configuration
|
||||
structure.
|
||||
|
||||
\section{Global MME parameters}
|
||||
|
||||
\subsection{Relative MME capacity}
|
||||
Even though this parameter is not used by the MME for controlling the MME load
|
||||
balancing within a pool (at least for now), the parameter has to be to forwarded
|
||||
to the eNBs during association procedure.
|
||||
This parameter is encoded on 8bits, acceptable values going from 0 to 255.
|
||||
(Default value = 15)
|
||||
\begin{lstlisting}
|
||||
RELATIVE_CAPACITY = 10;
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Maximum number of UE}
|
||||
\label{sec:Maximum number of UE}
|
||||
This limit is present here only for debug purposes and is used to restrict
|
||||
the number of served UE the MME can handle. In real network another mechanism
|
||||
will trigger an MME overload for certain eNBs and will restrict certain types of
|
||||
traffic. Such a mechanism would imply the Relative MME capacity.
|
||||
\begin{lstlisting}
|
||||
MAXUE = 100;
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Maximum number of eNB}
|
||||
Refer to \ref{sec:Maximum number of UE}.
|
||||
\begin{lstlisting}
|
||||
MAXENB = 10;
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Tracking Area Identity}
|
||||
\nomenclature{TAI}{Tracking Area Identity}TAI is the concatenation of
|
||||
\nomenclature{MCC}{Mobile Country Code}MCC, \nomenclature{MNC}{Mobile Network Code}MNC and
|
||||
\nomenclature{TAC}{Tracking Area Code}TAC.
|
||||
The TAC uniquely identifies a PLMN within a Cell Id.
|
||||
\begin{lstlisting}
|
||||
PLMN = mcc.mnc:tac;
|
||||
\end{lstlisting}
|
||||
Multiple values can be given using a comma separator. Example:
|
||||
\begin{lstlisting}
|
||||
PLMN = 208.38:0,209.130:4,208.35:8;
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{MME Code}
|
||||
A list of a maximum of 256 values can be provided.
|
||||
\nomenclature{MMEC}{MME Code}MME Code is encoded on 8 bits,
|
||||
so acceptable range is: 0 to 255.
|
||||
Example:
|
||||
\begin{lstlisting}
|
||||
MME_CODE = 30,56,1,8;
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{MME Group Id}
|
||||
A list of a maximum of 65356 values can be provided.
|
||||
\nomenclature{MMEGID}{MME Group Id}MME Group Id is encoded on 16 bits,
|
||||
so acceptable range is: 0 to 65535.
|
||||
Example:
|
||||
\begin{lstlisting}
|
||||
MME_GID = 3,4,5,30,8,9,50021;
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Intertask parameters}
|
||||
\subsection{Queue size per task}
|
||||
To restrict the number of messages in queues or to detect a possible MME overload,
|
||||
an upper bound for the queue size can be defined like this:
|
||||
\begin{lstlisting}
|
||||
ITTI_QUEUE_SIZE = 2000000;
|
||||
\end{lstlisting}
|
||||
This parameter is expressed in bytes. Note that all messages exchanged by tasks
|
||||
have the same size.
|
||||
|
||||
\section{SCTP parameters}
|
||||
\subsection{IN/OUT streams number}
|
||||
The number of input/output streams can be configured to limit the number of streams
|
||||
used for UE-associated signalling. Note that stream with id = 0 is reserved for
|
||||
non-UE associated signalling. At least two streams should be used by the MME.
|
||||
(Default value = 64/64 streams)
|
||||
\begin{lstlisting}
|
||||
SCTP_INSTREAMS = 32;
|
||||
SCTP_OUTSTREAMS = 32;
|
||||
\end{lstlisting}
|
||||
|
||||
\section{S1AP parameters}
|
||||
\subsection{Outcome timer}
|
||||
Once an outcome is sent from MME to eNB, the MME locally starts a timer to abort
|
||||
the procedure and release UE contexts if the expected answer to this outcome is not
|
||||
received at the expiry of this timer.\\
|
||||
This timer is expressed in seconds. (Default value = 5 seconds)
|
||||
\begin{lstlisting}
|
||||
S1AP_OUTCOME_TIMER = 10;
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Network interfaces parameters}
|
||||
|
||||
Three paramters can be tuned in the configuration file:
|
||||
\begin{itemize}
|
||||
\item Interface Name: The related interface will be bind to this interface name
|
||||
\item IP address: Currently only IPv4 address is allowed
|
||||
\item IP netwmask: Netmask for the LAN
|
||||
\end{itemize}
|
||||
These three paramters can be setup for five different interfaces used:
|
||||
\begin{itemize}
|
||||
\item SGW interface for S11
|
||||
\item SGW interface for S1U/S12/S4 in user plane
|
||||
\item SGW interface for S5/S8 in user plane
|
||||
\item PGW interface for S5/S8
|
||||
\item PGW interface for SGi
|
||||
\item MME interface for S1-MME in control plane
|
||||
\end{itemize}
|
||||
Example of configuration:
|
||||
\begin{lstlisting}
|
||||
# ------- Interfaces definitions
|
||||
SGW_INTERFACE_NAME_FOR_S11 = "s11sgw";
|
||||
SGW_IP_ADDRESS_FOR_S11 = "192.168.10.1";
|
||||
SGW_IP_NETMASK_FOR_S11 = 24;
|
||||
|
||||
SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP = "upsgw0";
|
||||
SGW_IP_ADDRESS_FOR_S1U_S12_S4_UP = "192.168.1.1";
|
||||
SGW_IP_NETMASK_FOR_S1U_S12_S4_UP = 24;
|
||||
|
||||
SGW_INTERFACE_NAME_FOR_S5_S8_UP = "upsgw1";
|
||||
SGW_IP_ADDRESS_FOR_S5_S8_UP = "192.168.5.2";
|
||||
SGW_IP_NETMASK_FOR_S5_S8_UP = 24;
|
||||
|
||||
PGW_INTERFACE_NAME_FOR_S5_S8 = "uppgw0";
|
||||
PGW_IP_ADDRESS_FOR_S5_S8 = "192.168.5.1";
|
||||
PGW_IP_NETMASK_FOR_S5_S8 = 24;
|
||||
|
||||
PGW_INTERFACE_NAME_FOR_SGI = "eth1";
|
||||
PGW_IP_ADDR_FOR_SGI = "192.168.12.30";
|
||||
PGW_IP_NETMASK_FOR_SGI = 24;
|
||||
|
||||
MME_INTERFACE_NAME_FOR_S1_MME = "cpmme0";
|
||||
MME_IP_ADDRESS_FOR_S1_MME = "192.168.11.1";
|
||||
MME_IP_NETMASK_FOR_S1_MME = 24;
|
||||
\end{lstlisting}
|
||||
|
||||
\end{document}
|
||||
@@ -1,30 +0,0 @@
|
||||
#/*
|
||||
# * 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
|
||||
# */
|
||||
|
||||
MYFILE=EPC
|
||||
|
||||
all:
|
||||
pdflatex $(MYFILE).tex
|
||||
pdflatex $(MYFILE).tex
|
||||
makeindex $(MYFILE).nlo -s nomencl.ist -o $(MYFILE).nls
|
||||
pdflatex $(MYFILE).tex
|
||||
|
||||
.PHONY: all
|
||||
@@ -39,10 +39,6 @@
|
||||
#define MME_CONFIG_STRING_INTERTASK_INTERFACE_CONFIG "INTERTASK_INTERFACE"
|
||||
#define MME_CONFIG_STRING_INTERTASK_INTERFACE_QUEUE_SIZE "ITTI_QUEUE_SIZE"
|
||||
|
||||
#define MME_CONFIG_STRING_S6A_CONFIG "S6A"
|
||||
#define MME_CONFIG_STRING_S6A_CONF_FILE_PATH "S6A_CONF"
|
||||
#define MME_CONFIG_STRING_S6A_HSS_HOSTNAME "HSS_HOSTNAME"
|
||||
|
||||
#define MME_CONFIG_STRING_SCTP_CONFIG "SCTP"
|
||||
#define MME_CONFIG_STRING_SCTP_INSTREAMS "SCTP_INSTREAMS"
|
||||
#define MME_CONFIG_STRING_SCTP_OUTSTREAMS "SCTP_OUTSTREAMS"
|
||||
@@ -149,10 +145,6 @@ typedef struct mme_config_s {
|
||||
|
||||
uint32_t sgw_ip_address_for_S11;
|
||||
} ipv4;
|
||||
struct {
|
||||
char *conf_file;
|
||||
char *hss_host_name;
|
||||
} s6a_config;
|
||||
struct {
|
||||
uint32_t queue_size;
|
||||
char *log_file;
|
||||
|
||||
@@ -41,12 +41,6 @@
|
||||
|
||||
#define S1AP_OUTCOME_TIMER_DEFAULT (5) ///< S1AP Outcome drop timer (s)
|
||||
|
||||
/*******************************************************************************
|
||||
* S6A Constants
|
||||
******************************************************************************/
|
||||
|
||||
#define S6A_CONF_FILE "../S6A/freediameter/s6a.conf"
|
||||
|
||||
/*******************************************************************************
|
||||
* SCTP Constants
|
||||
******************************************************************************/
|
||||
|
||||
@@ -1,570 +0,0 @@
|
||||
/* For development only : */
|
||||
%debug
|
||||
%error-verbose
|
||||
|
||||
%parse-param {struct mme_config_s *mme_config_p}
|
||||
|
||||
/* Keep track of location */
|
||||
%locations
|
||||
%defines
|
||||
%pure-parser
|
||||
|
||||
%{
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "mme_config.h"
|
||||
#include "mme_parser.h"
|
||||
|
||||
void yyerror (YYLTYPE *llocp, struct mme_config_s *mme_config_p, const char *s);
|
||||
|
||||
extern int yywrap();
|
||||
extern int yylex();
|
||||
|
||||
/* The Lex parser prototype */
|
||||
int fddlex(YYSTYPE *lvalp, YYLTYPE *llocp);
|
||||
%}
|
||||
|
||||
/* Values returned by lex for token */
|
||||
%union {
|
||||
char *string; /* The string is allocated by strdup in lex.*/
|
||||
int integer; /* Store integer values */
|
||||
}
|
||||
|
||||
%token LEX_ERROR
|
||||
|
||||
%token <string> QSTRING
|
||||
%token <integer> INTEGER
|
||||
|
||||
%token EMERGENCY_ATTACH_SUPPORTED
|
||||
%token UNAUTHENTICATED_IMSI_SUPPORTED
|
||||
%token S6A_CONF
|
||||
%token MAX_UE
|
||||
%token MAX_ENB
|
||||
%token ITTI_QUEUE_SIZE
|
||||
%token SCTP_INSTREAMS
|
||||
%token SCTP_OUTSTREAMS
|
||||
%token MME_CODE
|
||||
%token MME_GID
|
||||
%token PLMN_Y
|
||||
%token REALM
|
||||
%token RELATIVE_CAP
|
||||
%token S1AP_OUTCOME_TIMER
|
||||
%token MME_STATISTIC_TIMER
|
||||
%token SGW_INTERFACE_NAME_FOR_S11
|
||||
%token SGW_IP_ADDRESS_FOR_S11
|
||||
%token SGW_IP_NETMASK_FOR_S11
|
||||
%token SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP
|
||||
%token SGW_IP_ADDRESS_FOR_S1U_S12_S4_UP
|
||||
%token SGW_IP_NETMASK_FOR_S1U_S12_S4_UP
|
||||
%token SGW_INTERFACE_NAME_FOR_S5_S8_UP
|
||||
%token SGW_IP_ADDRESS_FOR_S5_S8_UP
|
||||
%token SGW_IP_NETMASK_FOR_S5_S8_UP
|
||||
%token PGW_INTERFACE_NAME_FOR_S5_S8
|
||||
%token PGW_IP_ADDRESS_FOR_S5_S8
|
||||
%token PGW_IP_NETMASK_FOR_S5_S8
|
||||
%token PGW_INTERFACE_NAME_FOR_SGI
|
||||
%token PGW_IP_ADDR_FOR_SGI
|
||||
%token PGW_IP_NETMASK_FOR_SGI
|
||||
%token MME_INTERFACE_NAME_FOR_S1_MME
|
||||
%token MME_IP_ADDRESS_FOR_S1_MME
|
||||
%token MME_IP_NETMASK_FOR_S1_MME
|
||||
%token MME_INTERFACE_NAME_FOR_S11_MME
|
||||
%token MME_IP_ADDRESS_FOR_S11_MME
|
||||
%token MME_IP_NETMASK_FOR_S11_MME
|
||||
|
||||
%%
|
||||
conffile: /* If options not provided, we will default values */
|
||||
| conffile s6aconf
|
||||
| conffile emergency_attach_supported
|
||||
| conffile unauthenticated_imsi_supported
|
||||
| conffile maxenb
|
||||
| conffile maxue
|
||||
| conffile mmec
|
||||
| conffile mmegid
|
||||
| conffile plmn
|
||||
| conffile realm
|
||||
| conffile relative_capacity
|
||||
| conffile itti_queue_size
|
||||
| conffile s1ap_outcome_timer
|
||||
| conffile mme_statistic_timer
|
||||
| conffile sgw_interface_name_for_S11
|
||||
| conffile sgw_ip_address_for_S11
|
||||
| conffile sgw_ip_netmask_for_S11
|
||||
| conffile sgw_interface_name_for_S1u_S12_S4_up
|
||||
| conffile sgw_ip_address_for_S1u_S12_S4_up
|
||||
| conffile sgw_ip_netmask_for_S1u_S12_S4_up
|
||||
| conffile sgw_interface_name_for_S5_S8_up
|
||||
| conffile sgw_ip_address_for_S5_S8_up
|
||||
| conffile sgw_ip_netmask_for_S5_S8_up
|
||||
| conffile pgw_interface_name_for_S5_S8
|
||||
| conffile pgw_ip_address_for_S5_S8
|
||||
| conffile pgw_ip_netmask_for_S5_S8
|
||||
| conffile pgw_interface_name_for_SGI
|
||||
| conffile pgw_ip_addr_for_SGI
|
||||
| conffile pgw_ip_netmask_for_SGI
|
||||
| conffile mme_interface_name_for_S1_MME
|
||||
| conffile mme_ip_address_for_S1_MME
|
||||
| conffile mme_ip_netmask_for_S1_MME
|
||||
| conffile mme_interface_name_for_S11_MME
|
||||
| conffile mme_ip_address_for_S11_MME
|
||||
| conffile mme_ip_netmask_for_S11_MME
|
||||
| conffile sctp_instreams
|
||||
| conffile sctp_outstreams
|
||||
| conffile errors
|
||||
{
|
||||
yyerror(&yylloc, mme_config_p, "An error occurred while parsing the configuration file");
|
||||
return EINVAL;
|
||||
}
|
||||
;
|
||||
|
||||
emergency_attach_supported: EMERGENCY_ATTACH_SUPPORTED '=' INTEGER ';'
|
||||
{
|
||||
if ($3 != 0 && $3 != 1) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value (possible values are 0 or 1");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->emergency_attach_supported = $3;
|
||||
};
|
||||
|
||||
unauthenticated_imsi_supported: UNAUTHENTICATED_IMSI_SUPPORTED '=' INTEGER ';'
|
||||
{
|
||||
if ($3 != 0 && $3 != 1) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value (possible values are 0 or 1");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->unauthenticated_imsi_supported = $3;
|
||||
};
|
||||
|
||||
mme_statistic_timer: MME_STATISTIC_TIMER '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->mme_statistic_timer = $3;
|
||||
}
|
||||
;
|
||||
|
||||
s1ap_outcome_timer: S1AP_OUTCOME_TIMER '=' INTEGER ';'
|
||||
{
|
||||
/* 0 is not a valid value here */
|
||||
if ($3 <= 0 || $3 >= (1 << (8 * sizeof(mme_config_p->s1ap_config.outcome_drop_timer_sec)))) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->s1ap_config.outcome_drop_timer_sec = $3;
|
||||
}
|
||||
;
|
||||
|
||||
s6aconf: S6A_CONF '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->s6a_config.conf_file = $3;
|
||||
}
|
||||
;
|
||||
|
||||
maxenb: MAX_ENB '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->max_eNBs = (uint32_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
maxue: MAX_UE '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->max_ues = (uint32_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
mmec: MME_CODE '=' mmeclist ';'
|
||||
;
|
||||
|
||||
mmeclist:
|
||||
{
|
||||
yyerror(&yylloc, mme_config_p, "Empty value is not allowed");
|
||||
return EINVAL;
|
||||
}
|
||||
| mmecvalue ',' mmeclist
|
||||
| mmecvalue
|
||||
;
|
||||
|
||||
mmecvalue: INTEGER
|
||||
{
|
||||
if (mme_config_p->gummei.nb_mmec == 256) {
|
||||
yyerror(&yylloc, mme_config_p, "Reached maximum number of mmec");
|
||||
return EINVAL;
|
||||
}
|
||||
if ($1 >= 256) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed limit <= 255");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->gummei.nb_mmec++;
|
||||
mme_config_p->gummei.mmec = realloc(mme_config_p->gummei.mmec,
|
||||
mme_config_p->gummei.nb_mmec * sizeof(uint8_t));
|
||||
mme_config_p->gummei.mmec[mme_config_p->gummei.nb_mmec-1] = (uint8_t)$1;
|
||||
}
|
||||
;
|
||||
|
||||
mmegid: MME_GID '=' mmegidlist ';'
|
||||
;
|
||||
|
||||
mmegidlist:
|
||||
{
|
||||
yyerror(&yylloc, mme_config_p, "Empty value is not allowed");
|
||||
return EINVAL;
|
||||
}
|
||||
| mmegidvalue
|
||||
| mmegidvalue ',' mmegidlist
|
||||
;
|
||||
|
||||
mmegidvalue: INTEGER
|
||||
{
|
||||
if (mme_config_p->gummei.nb_mme_gid == 65535) {
|
||||
yyerror(&yylloc, mme_config_p, "Reached maximum number of mmegid");
|
||||
return EINVAL;
|
||||
}
|
||||
if ($1 >= 65356) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed limit <= 65535");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->gummei.nb_mme_gid++;
|
||||
mme_config_p->gummei.mme_gid = realloc(mme_config_p->gummei.mme_gid,
|
||||
mme_config_p->gummei.nb_mme_gid * sizeof(uint16_t));
|
||||
mme_config_p->gummei.mme_gid[mme_config_p->gummei.nb_mme_gid-1] = (uint16_t)$1;
|
||||
}
|
||||
;
|
||||
|
||||
realm: REALM '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->realm = $3;
|
||||
mme_config_p->realm_length = strlen(mme_config_p->realm);
|
||||
}
|
||||
;
|
||||
|
||||
plmn: PLMN_Y '=' plmnlist ';'
|
||||
;
|
||||
|
||||
plmnlist:
|
||||
{
|
||||
yyerror(&yylloc, mme_config_p, "Empty value is not allowed");
|
||||
return EINVAL;
|
||||
}
|
||||
| plmnvalue
|
||||
| plmnvalue ',' plmnlist
|
||||
;
|
||||
|
||||
plmnvalue: INTEGER '.' INTEGER ':' INTEGER
|
||||
{
|
||||
if (mme_config_p->gummei.nb_plmns == 32) {
|
||||
yyerror(&yylloc, mme_config_p, "Reached maximum number of plmns");
|
||||
return EINVAL;
|
||||
}
|
||||
if ($1 > 999 || $3 > 999) {
|
||||
yyerror(&yylloc, mme_config_p, "PLMN value exceed limit <= 999");
|
||||
return EINVAL;
|
||||
}
|
||||
if ($5 > 65535) {
|
||||
yyerror(&yylloc, mme_config_p, "TAC value exceed limit <= 65535");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->gummei.nb_plmns++;
|
||||
mme_config_p->gummei.plmn_mcc = realloc(mme_config_p->gummei.plmn_mcc,
|
||||
mme_config_p->gummei.nb_plmns * sizeof(uint16_t));
|
||||
mme_config_p->gummei.plmn_mnc = realloc(mme_config_p->gummei.plmn_mnc,
|
||||
mme_config_p->gummei.nb_plmns * sizeof(uint16_t));
|
||||
mme_config_p->gummei.plmn_tac = realloc(mme_config_p->gummei.plmn_tac,
|
||||
mme_config_p->gummei.nb_plmns * sizeof(uint16_t));
|
||||
mme_config_p->gummei.plmn_mcc[mme_config_p->gummei.nb_plmns-1] = (uint16_t)$1;
|
||||
mme_config_p->gummei.plmn_mnc[mme_config_p->gummei.nb_plmns-1] = (uint16_t)$3;
|
||||
mme_config_p->gummei.plmn_tac[mme_config_p->gummei.nb_plmns-1] = (uint16_t)$5;
|
||||
}
|
||||
;
|
||||
|
||||
relative_capacity: RELATIVE_CAP '=' INTEGER ';'
|
||||
{
|
||||
if ($3 >= 256 || $3 < 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed limit <= 255");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->relative_capacity = $3;
|
||||
}
|
||||
;
|
||||
|
||||
itti_queue_size: ITTI_QUEUE_SIZE '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->itti_config.queue_size = (uint32_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
sctp_instreams: SCTP_INSTREAMS '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->sctp_config.in_streams = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
sctp_outstreams: SCTP_OUTSTREAMS '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->sctp_config.out_streams = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
sgw_interface_name_for_S11: SGW_INTERFACE_NAME_FOR_S11 '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->ipv4.sgw_interface_name_for_S11 = $3;
|
||||
}
|
||||
;
|
||||
|
||||
sgw_ip_address_for_S11: SGW_IP_ADDRESS_FOR_S11 '=' QSTRING ';'
|
||||
{
|
||||
struct in_addr inp;
|
||||
if ( inet_aton($3, &inp ) < 0 ) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else {
|
||||
mme_config_p->ipv4.sgw_ip_address_for_S11 = inp.s_addr;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
sgw_ip_netmask_for_S11: SGW_IP_NETMASK_FOR_S11 '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->ipv4.sgw_ip_netmask_for_S11 = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
sgw_interface_name_for_S1u_S12_S4_up: SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->ipv4.sgw_interface_name_for_S1u_S12_S4_up = $3;
|
||||
}
|
||||
;
|
||||
|
||||
sgw_ip_address_for_S1u_S12_S4_up: SGW_IP_ADDRESS_FOR_S1U_S12_S4_UP '=' QSTRING ';'
|
||||
{
|
||||
struct in_addr inp;
|
||||
if ( inet_aton($3, &inp ) < 0 ) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else {
|
||||
mme_config_p->ipv4.sgw_ip_address_for_S1u_S12_S4_up = inp.s_addr;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
sgw_ip_netmask_for_S1u_S12_S4_up: SGW_IP_NETMASK_FOR_S1U_S12_S4_UP '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->ipv4.sgw_ip_netmask_for_S1u_S12_S4_up = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
sgw_interface_name_for_S5_S8_up: SGW_INTERFACE_NAME_FOR_S5_S8_UP '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->ipv4.sgw_interface_name_for_S5_S8_up = $3;
|
||||
}
|
||||
;
|
||||
|
||||
sgw_ip_address_for_S5_S8_up: SGW_IP_ADDRESS_FOR_S5_S8_UP '=' QSTRING ';'
|
||||
{
|
||||
struct in_addr inp;
|
||||
if ( inet_aton($3, &inp ) < 0 ) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else {
|
||||
mme_config_p->ipv4.sgw_ip_address_for_S5_S8_up = inp.s_addr;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
sgw_ip_netmask_for_S5_S8_up: SGW_IP_NETMASK_FOR_S5_S8_UP '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->ipv4.sgw_ip_netmask_for_S5_S8_up = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
pgw_interface_name_for_S5_S8: PGW_INTERFACE_NAME_FOR_S5_S8 '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->ipv4.pgw_interface_name_for_S5_S8 = $3;
|
||||
}
|
||||
;
|
||||
|
||||
pgw_ip_address_for_S5_S8: PGW_IP_ADDRESS_FOR_S5_S8 '=' QSTRING ';'
|
||||
{
|
||||
struct in_addr inp;
|
||||
if ( inet_aton($3, &inp ) < 0 ) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else {
|
||||
mme_config_p->ipv4.pgw_ip_address_for_S5_S8 = inp.s_addr;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
pgw_ip_netmask_for_S5_S8: PGW_IP_NETMASK_FOR_S5_S8 '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->ipv4.pgw_ip_netmask_for_S5_S8 = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
pgw_interface_name_for_SGI: PGW_INTERFACE_NAME_FOR_SGI '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->ipv4.pgw_interface_name_for_SGI = $3;
|
||||
}
|
||||
;
|
||||
|
||||
pgw_ip_addr_for_SGI: PGW_IP_ADDR_FOR_SGI '=' QSTRING ';'
|
||||
{
|
||||
struct in_addr inp;
|
||||
if ( inet_aton($3, &inp ) < 0 ) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else {
|
||||
mme_config_p->ipv4.pgw_ip_addr_for_SGI = inp.s_addr;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
pgw_ip_netmask_for_SGI: PGW_IP_NETMASK_FOR_SGI '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->ipv4.pgw_ip_netmask_for_SGI = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
mme_interface_name_for_S1_MME: MME_INTERFACE_NAME_FOR_S1_MME '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->ipv4.mme_interface_name_for_S1_MME = $3;
|
||||
}
|
||||
;
|
||||
|
||||
mme_ip_address_for_S1_MME: MME_IP_ADDRESS_FOR_S1_MME '=' QSTRING ';'
|
||||
{
|
||||
struct in_addr inp;
|
||||
if ( inet_aton($3, &inp ) < 0 ) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else {
|
||||
mme_config_p->ipv4.mme_ip_address_for_S1_MME = inp.s_addr;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
mme_ip_netmask_for_S1_MME: MME_IP_NETMASK_FOR_S1_MME '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->ipv4.mme_ip_netmask_for_S1_MME = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
mme_interface_name_for_S11_MME: MME_INTERFACE_NAME_FOR_S11_MME '=' QSTRING ';'
|
||||
{
|
||||
mme_config_p->ipv4.mme_interface_name_for_S11 = $3;
|
||||
}
|
||||
;
|
||||
|
||||
mme_ip_address_for_S11_MME: MME_IP_ADDRESS_FOR_S11_MME '=' QSTRING ';'
|
||||
{
|
||||
struct in_addr inp;
|
||||
if ( inet_aton($3, &inp ) < 0 ) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else {
|
||||
mme_config_p->ipv4.mme_ip_address_for_S11 = inp.s_addr;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
mme_ip_netmask_for_S11_MME: MME_IP_NETMASK_FOR_S11_MME '=' INTEGER ';'
|
||||
{
|
||||
if ($3 <= 0) {
|
||||
yyerror(&yylloc, mme_config_p, "Invalid value");
|
||||
return EINVAL;
|
||||
} else if ($3 > UINT16_MAX) {
|
||||
yyerror(&yylloc, mme_config_p, "Value exceed container");
|
||||
return EINVAL;
|
||||
}
|
||||
mme_config_p->ipv4.mme_ip_netmask_for_S11 = (uint16_t)$3;
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
/* Lexical or syntax error */
|
||||
errors: LEX_ERROR
|
||||
| error
|
||||
;
|
||||
%%
|
||||
|
||||
void yyerror(YYLTYPE *llocp, struct mme_config_s *mme_config_p, const char *str)
|
||||
{
|
||||
fprintf(stderr, "Error in %s ( on line %i column %i -> line %i column %i) : %s\n",
|
||||
mme_config_p->config_file, llocp->first_line, llocp->first_column,
|
||||
llocp->last_line, llocp->last_column, str);
|
||||
}
|
||||
@@ -1,114 +0,0 @@
|
||||
-----------------------------------------
|
||||
1) Folders and files description
|
||||
-----------------------------------------
|
||||
|
||||
This directory contains different targets for OpenAirInterface.org implementations
|
||||
|
||||
RTAI/USER - Target to run .11p (uses openairITS) or LTE modem (uses openair1 and openair2) for x86 in RTAI user-space
|
||||
SIMU - Simulator/Emulator target for x86
|
||||
DOCS - Doxygen documentation generation for openair1/openair2
|
||||
|
||||
|
||||
First, you must have all four openair SW directories, openair1, openair2, openair3, and targets at the same hierarchical level as this directory.
|
||||
|
||||
1. The following packages must be available on your system:
|
||||
|
||||
- ssh, python, python pexpect
|
||||
- libblas and libblas-dev
|
||||
- libconfig++8-dev
|
||||
- libgtk-3-dev
|
||||
- libpgm-5.1 and libpgm-5.1-dev for distributed simulation with reliable multicast transmport
|
||||
- libxml2 and libxml2-dev
|
||||
- libforms-bin libforms-dev
|
||||
- openssl libssl-dev
|
||||
- libatlas-base-dev and libatlas-headers (for Ubuntu 11.04, libatlas-dev instead of libatlas-headers)
|
||||
- asn1c and the LTE ASN1 files (for more information on how to install this and generate the required files see the README file in openair2/RRC/LITE/MESSAGES)
|
||||
|
||||
----------------------------------------------------
|
||||
2) Organization of the folders and their dependancies
|
||||
----------------------------------------------------
|
||||
The 3 folders have the following structures
|
||||
|
||||
- EXAMPLES: there you can find some basic examples with/without the network interface
|
||||
- KERN: this folder includes the files for kernel space compilation targeting realtime operation (RF/emulation platform)
|
||||
- USER: this folder includes the files for user space compilation targeting soft realtime operation (emulation/simulation/debugging)
|
||||
|
||||
----------------------------------------------------------------
|
||||
3) How to use through a tutorial: run a simple experimentation
|
||||
----------------------------------------------------------------
|
||||
1. Up to know you should have created a directory: mkdir openair4G
|
||||
|
||||
2. Check out the openair4G/trunk repository: svn co https://svn.eurecom.fr/openairsvn/openair4G/trunk openair4G
|
||||
|
||||
3. Now, please check the following:
|
||||
|
||||
- the env variables in .bashrc the following lines, and source them if necessary :
|
||||
set OPENAIR_DIR variable and export the following:
|
||||
export OPENAIR1_DIR=$OPENAIR_DIR/openair4G/openair1
|
||||
export OPENAIR2_DIR=$OPENAIR_DIR/openair4G/openair2
|
||||
export OPENAIR3_DIR=$OPENAIR_DIR/openair4G/openair3
|
||||
export OPENAIRITS_DIR=$OPENAIR_DIR/openair4G/openairITS
|
||||
export OPENAIR_TARGETS=$OPENAIR_DIR/openair4G/targets/
|
||||
|
||||
- checkout and compile the asn1 messages
|
||||
follow the README.txt in OPENAIR2_DIR/RRC/LITE/MESSAGES to checkout the ASN.1 RRC messages
|
||||
follow the OPENAIR2_DIR/RRC/LITE/MESSAGE/asn1c/asn1c/INSTALL to install the asn1c
|
||||
go back to $OPENAIR_TARGET and "make install" if you have not used the shell script to install asn1c
|
||||
- cd $OPENAIR_TARGET/SIMU/USER, and make a sanity check by doing make pre-ci (require 15 minutes)
|
||||
- Check out simple examples in $OPENAIR_TARGET/SIMU/EXAMPLES
|
||||
|
||||
4. to automatically bring up the oai interfaces and configure the default radio bearer (useful when sending data traffic):
|
||||
- add your username into the list of sudoers
|
||||
+ edit /etc/sudoers as a super user
|
||||
+ after the line: # User privilege specification, add : user_name ALL=(ALL:ALL) ALL
|
||||
+ after the line: %admin ALL=(ALL) ALL, add : user_name ALL=(ALL) NOPASSWD: ALL
|
||||
- include this line: alias sudo='sudo -E', to the .bashrc
|
||||
- run oai as follows: sudo ./oaisim arg1 arg2 ....
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
4) Detail Instructions
|
||||
----------------------------------------------------------------
|
||||
|
||||
Please follow the instructions given in DOCS/oaisim_walkthrough.pdf
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
5) OAI on virtual machine
|
||||
----------------------------------------------------------------
|
||||
you may download the image using this URL: https://emu.openairinterface.org/openairlab/openairlab.zip
|
||||
check that all the packages are there as some packages might be added later.
|
||||
|
||||
|
||||
----------------------------------------------------------------
|
||||
6) Installing phpmyadmin for HSS
|
||||
----------------------------------------------------------------
|
||||
|
||||
Step 1:
|
||||
|
||||
Configure database for phpmyadmin with dbconfig-common? SELECT <Yes>
|
||||
|
||||
|
||||
Step 2:
|
||||
|
||||
Please provide the password for the administrative account with which this package should create its MySQL database and user.
|
||||
Password of the database's administrative user: The mysql administrative user.
|
||||
|
||||
|
||||
Step 3:
|
||||
|
||||
Please provide a password for phpmyadmin to register with the database server. If left blank, a random password will be generated.
|
||||
MySQL application password for phpmyadmin: admin
|
||||
|
||||
|
||||
Step 4:
|
||||
|
||||
Password confirmation: admin
|
||||
|
||||
|
||||
Step 5:
|
||||
|
||||
Please choose the web server that should be automatically configured to run phpMyAdmin.
|
||||
Web server to reconfigure automatically:
|
||||
[*] apache2
|
||||
[ ] lighttpd
|
||||
@@ -48,7 +48,6 @@ RRC_DIR = $(OPENAIR2_TOP)/RRC/LITE
|
||||
L2_INTERFACE_DIR = $(OPENAIR2_TOP)/RRC/L2_INTERFACE
|
||||
MAC_DIR = $(OPENAIR2_TOP)/LAYER2/MAC
|
||||
LOG_DIR=$(OPENAIR2_TOP)/UTIL/LOG
|
||||
OCG_DIR=$(OPENAIR2_TOP)/UTIL/OCG
|
||||
OPT_DIR=$(OPENAIR2_TOP)/UTIL/OPT
|
||||
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#include "UTIL/LOG/log_extern.h"
|
||||
#include "RRC/LTE/vars.h"
|
||||
#include "PHY_INTERFACE/vars.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/AT_COMMANDS/parser.h"
|
||||
|
||||
mapping level_names[] = {
|
||||
|
||||
@@ -20,10 +20,7 @@ endif
|
||||
# activate OCG and libxml only under linux
|
||||
ifeq ($(linux),1)
|
||||
CFLAGS += -I/usr/include/libxml2 -L/usr/local/lib -I/usr/include/atlas -L/usr/X11R6/lib
|
||||
OCG_FLAG = 1
|
||||
CFLAGS += -DLINUX
|
||||
else
|
||||
OCG_FLAG = 0
|
||||
endif
|
||||
|
||||
|
||||
@@ -100,7 +97,6 @@ printvars:
|
||||
@echo LINUX variable is $(linux)
|
||||
@echo rrc_cellular variable is $(rrc_cellular)
|
||||
@echo EXTRA_CFLAGS = $(EXTRA_CFLAGS)
|
||||
@echo OAI Config generator is $(OCG_FLAG)
|
||||
@echo OAI NETLINK FLAG is $(NAS_FLAG)
|
||||
@echo SSE3 proc is $(SSE3PROC)
|
||||
@echo IS_REL_8 is $(IS_REL_8)
|
||||
@@ -153,7 +149,6 @@ cleanasn1:
|
||||
rm -f $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc.generated
|
||||
|
||||
print:
|
||||
@echo $(OCG_FLAG)
|
||||
@echo $(CFLAGS)
|
||||
@echo $(EXTRA_CFLAGS)
|
||||
@echo $(OBJ)
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
#include "RRC/LTE/vars.h"
|
||||
#include "PHY_INTERFACE/vars.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "UTIL/OTG/otg_tx.h"
|
||||
#include "UTIL/OTG/otg.h"
|
||||
#include "UTIL/OTG/otg_vars.h"
|
||||
@@ -512,7 +511,6 @@ int main (int argc, char **argv)
|
||||
/*
|
||||
set_log(OMG, LOG_INFO, 20);
|
||||
set_log(EMU, LOG_INFO, 10);
|
||||
set_log(OCG, LOG_INFO, 1);
|
||||
set_log(MAC, LOG_TRACE, 1);
|
||||
set_log(RLC, LOG_TRACE, 1);
|
||||
set_log(PHY, LOG_DEBUG, 1);
|
||||
|
||||
@@ -48,7 +48,6 @@ RRC_DIR = $(OPENAIR2_TOP)/RRC/LITE
|
||||
L2_INTERFACE_DIR = $(OPENAIR2_TOP)/RRC/L2_INTERFACE
|
||||
MAC_DIR = $(OPENAIR2_TOP)/LAYER2/MAC
|
||||
LOG_DIR=$(OPENAIR2_TOP)/UTIL/LOG
|
||||
OCG_DIR=$(OPENAIR2_TOP)/UTIL/OCG
|
||||
OPT_DIR=$(OPENAIR2_TOP)/UTIL/OPT
|
||||
|
||||
SOURCES_L2 = $(LIST_DIR)/list.c
|
||||
@@ -66,8 +65,7 @@ OPT_OBJS = $(OPT_DIR)/probe.o
|
||||
L2_OBJS=$(addsuffix .o,$(basename $(SOURCES_L2))) $(PHY_INTERFACE_OBJS) $(MAC_OBJS) $(L2_INTERFACE_OBJS) $(RRC_OBJS) $(LOG_OBJS) $(OPT_OBJS)
|
||||
|
||||
L2_incl = -I$(OPENAIR2_TOP) -I$(COMMON_DIR) -I$(RLC_DIR) -I$(RLC_AM_DIR) -I$(RLC_UM_DIR) -I$(RLC_TM_DIR) -I$(PDCP_DIR) -I$(MEM_DIR) -I$(LIST_DIR) \
|
||||
-I$(LOG_DIR) -I$(MATH_DIR) -I$(TIMER_DIR) -I$(OPENAIR3)/MESH -I$(OPENAIR2_TOP)/RRC/MESH -I$(OPENAIR2_TOP)/RRC/MESH/MESSAGES -I$(OPENAIR3)/MESH/RRM -I$(OPT_DIR) \
|
||||
-I$(OCG_DIR)
|
||||
-I$(LOG_DIR) -I$(MATH_DIR) -I$(TIMER_DIR) -I$(OPENAIR3)/MESH -I$(OPENAIR2_TOP)/RRC/MESH -I$(OPENAIR2_TOP)/RRC/MESH/MESSAGES -I$(OPENAIR3)/MESH/RRM -I$(OPT_DIR)
|
||||
|
||||
ASN1_MSG_OBJS2 := $(foreach file, $(ASN1_MSG_OBJS), $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/$(file))
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
#include "LAYER2/MAC/vars.h"
|
||||
#include "UTIL/LOG/log_if.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "test_util.h"
|
||||
#include "test_pdcp.h"
|
||||
|
||||
|
||||
@@ -48,7 +48,6 @@ RRC_DIR = $(OPENAIR2_TOP)/RRC/LITE
|
||||
L2_INTERFACE_DIR = $(OPENAIR2_TOP)/RRC/L2_INTERFACE
|
||||
MAC_DIR = $(OPENAIR2_TOP)/LAYER2/MAC
|
||||
LOG_DIR=$(OPENAIR2_TOP)/UTIL/LOG
|
||||
OCG_DIR=$(OPENAIR2_TOP)/UTIL/OCG
|
||||
OPT_DIR=$(OPENAIR2_TOP)/UTIL/OPT
|
||||
|
||||
SOURCES_L2 = $(LIST_DIR)/list.c
|
||||
@@ -104,8 +103,7 @@ OPT_OBJS = $(OPT_DIR)/probe.o
|
||||
L2_OBJS=$(addsuffix .o,$(basename $(SOURCES_L2))) $(PHY_INTERFACE_OBJS) $(MAC_OBJS) $(L2_INTERFACE_OBJS) $(RRC_OBJS) $(LOG_OBJS) $(OPT_OBJS)
|
||||
|
||||
L2_incl = -I$(OPENAIR2_TOP) -I$(COMMON_DIR) -I$(RLC_DIR) -I$(RLC_AM_DIR) -I$(RLC_UM_DIR) -I$(RLC_TM_DIR) -I$(PDCP_DIR) -I$(MEM_DIR) -I$(LIST_DIR) \
|
||||
-I$(LOG_DIR) -I$(MATH_DIR) -I$(TIMER_DIR) -I$(OPENAIR3)/MESH -I$(OPENAIR2_TOP)/RRC/MESH -I$(OPENAIR2_TOP)/RRC/MESH/MESSAGES -I$(OPENAIR3)/MESH/RRM -I$(OPT_DIR) \
|
||||
-I$(OCG_DIR)
|
||||
-I$(LOG_DIR) -I$(MATH_DIR) -I$(TIMER_DIR) -I$(OPENAIR3)/MESH -I$(OPENAIR2_TOP)/RRC/MESH -I$(OPENAIR2_TOP)/RRC/MESH/MESSAGES -I$(OPENAIR3)/MESH/RRM -I$(OPT_DIR)
|
||||
|
||||
ASN1_MSG_OBJS2 := $(foreach file, $(ASN1_MSG_OBJS), $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/$(file))
|
||||
|
||||
|
||||
@@ -36,9 +36,7 @@
|
||||
#include "UTIL/LOG/log_extern.h"
|
||||
#include "RRC/LTE/vars.h"
|
||||
#include "PHY_INTERFACE/vars.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "LAYER2/PDCP_v10.1.0/pdcp.h"
|
||||
#include "OCG_vars.h"
|
||||
#include "rlc.h"
|
||||
#include "pdcp.h"
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user