/******************************************************************************* OpenAirInterface Copyright(c) 1999 - 2014 Eurecom OpenAirInterface is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenAirInterface is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenAirInterface.The full GNU General Public License is included in this distribution in the file called "COPYING". If not, see <http://www.gnu.org/licenses/>. Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ /*! \file OCG_parse_XML.c * \brief Parse the content of the XML configuration file * \author Lusheng Wang & Navid Nikaein & Andre Gomes(One Source) * \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 <string.h> //#include <stdlib.h> #include "OCG_vars.h" #include "OCG_parse_XML.h" #include "UTIL/LOG/log.h" #include "UTIL/OTG/otg_defs.h" #include "UTIL/OPT/opt.h" /*----------------------------------------------------------------------------*/ static int oai_emulation_; /*!< \brief indicating that the parsing position is now within OAI_Emulation_*/ static int environment_system_config_; /*!< \brief indicating that the parsing position is now within Envi_Config_*/ static int fading_; static int large_scale_; static int free_space_model_parameters_; static int pathloss_exponent_; static int pathloss_0_dB_; static int small_scale_; static int ricean_8tap_; static int rice_factor_dB_; static int shadowing_; static int decorrelation_distance_m_; static int variance_dB_; static int inter_site_correlation_; static int wall_penetration_loss_dB_; static int system_bandwidth_MB_; static int system_frequency_GHz_; static int number_of_rbs_dl_; static int transmission_mode_; static int frame_config_; static int frame_type_; static int tdd_config_; static int antenna_; static int eNB_antenna_; static int UE_antenna_; static int number_of_sectors_; static int beam_width_dB_; static int alpha_rad_1_; static int alpha_rad_2_; static int alpha_rad_3_; static int antenna_gain_dBi_; static int tx_power_dBm_; static int rx_noise_level_dB_; static int antenna_orientation_degree_1_; static int antenna_orientation_degree_2_; static int antenna_orientation_degree_3_; static int topology_config_; static int area_; /*!< \brief indicating that the parsing position is now within Area_*/ static int x_m_; static int y_m_; static int network_type_; static int cell_type_; static int relay_; static int number_of_relays_; static int mobility_; static int UE_mobility_; static int UE_mobility_type_; static int grid_walk_; static int grid_map_; static int horizontal_grid_; static int vertical_grid_; static int grid_trip_type_; static int UE_initial_distribution_; static int random_UE_distribution_; static int number_of_nodes_; static int concentrated_UE_distribution_; static int grid_UE_distribution_; static int random_grid_; static int border_grid_; static int UE_moving_dynamics_; static int min_speed_mps_; static int max_speed_mps_; static int min_sleep_ms_; static int max_sleep_ms_; static int min_journey_time_ms_; static int max_journey_time_ms_; static int eNB_mobility_; static int eNB_mobility_type_; static int eNB_initial_distribution_; static int eNB_initial_coordinates_; static double eNB_pos_x_; static double eNB_pos_y_; static int random_eNB_distribution_; static int number_of_cells_; static int hexagonal_eNB_distribution_; static int inter_eNB_distance_km_; static int grid_eNB_distribution_; static int number_of_grid_x_; static int number_of_grid_y_; static int trace_mobility_file_; static int sumo_config_; static int sumo_cmd_; static int sumo_config_file_; static int sumo_start_; static int sumo_end_; static int sumo_step_; static int sumo_hip_; static int sumo_hport_; static int omv_; static int application_config_; /*!< \brief indicating that the parsing position is now within App_Config_*/ static int predefined_traffic_; static int background_traffic_; static int customized_traffic_; static int application_type_; /*!< \brief indicating that the parsing position is now within App_Type_*/ static int source_id_; static int destination_id_; static int traffic_; /*!< \brief indicating that the parsing position is now within Traffic_*/ static int transport_protocol_; /*!< \brief indicating that the parsing position is now within Transport_Protocol_*/ static int ip_version_; static unsigned int aggregation_level_; static int flow_start_; static int flow_duration_; static int idt_dist_; static int idt_min_ms_; static int idt_max_ms_; static double idt_standard_deviation_; static double idt_lambda_; static double idt_scale_; static double idt_shape_; static int size_dist_; static int size_min_byte_; static int size_max_byte_; static double size_standard_deviation_; static double size_lambda_; static double size_scale_; static double size_shape_; static int stream_; static int destination_port_; static int packet_gen_type_; static int emulation_config_; /*!< \brief indicating that the parsing position is now within Emu_Config_*/ static int emulation_time_ms_; static int curve_; static int profiling_; static int trace_file_; static int background_stats_; static int performance_metrics_; /*!< \brief indicating that the parsing position is now within Performance_*/ static int throughput_; static int latency_; static int loss_rate_; static int owd_radio_access_; static int layer_; /*!< \brief indicating that the parsing position is now within Layer_*/ static int phy_; static int mac_; static int rlc_; static int pdcp_; static int rrc_; static int emu_; static int omg_; static int otg_; /* MAC*/ static int protocol_; static int mac_; static int num_groups_; static int log_; static int level_; static int verbosity_; static int interval_; static int packet_trace_; static int seed_value_; static int cli_enabled_; static int cli_start_enb_; static int cli_start_ue_; static unsigned int m2m_traffic_; static double prob_off_pu_; double prob_off_ed_; static double prob_off_pe_; static double prob_pu_ed_; static double prob_pu_pe_; static double prob_ed_pe_; static double prob_ed_pu_; static unsigned int holding_time_off_ed_; static unsigned int holding_time_off_pu_; static unsigned int holding_time_off_pe_; static unsigned int holding_time_pe_off_; static unsigned int pu_size_pkts_; static unsigned int ed_size_pkts_; static int profile_; void start_document(void *user_data) { //printf("Start parsing ............ \n"); } void end_document(void *user_data) { //printf("End parsing .\n"); } void start_element(void *user_data, const xmlChar *name, const xmlChar **attrs) // called once at the beginning of each element { if (!xmlStrcmp(name,(unsigned char*) "OAI_EMULATION")) { oai_emulation_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ENVIRONMENT_SYSTEM_CONFIG")) { environment_system_config_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "FADING")) { fading_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "LARGE_SCALE")) { large_scale_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "FREE_SPACE_MODEL_PARAMETERS")) { free_space_model_parameters_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PATHLOSS_EXPONENT")) { pathloss_exponent_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PATHLOSS_0_dB")) { pathloss_0_dB_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SMALL_SCALE")) { small_scale_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RICEAN_8TAP")) { ricean_8tap_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RICE_FACTOR_dB")) { rice_factor_dB_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SHADOWING")) { shadowing_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "DECORRELATION_DISTANCE_m")) { decorrelation_distance_m_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "VARIANCE_dB")) { variance_dB_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "INTER_SITE_CORRELATION")) { inter_site_correlation_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "WALL_PENETRATION_LOSS_dB")) { wall_penetration_loss_dB_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_BANDWIDTH_MB")) { system_bandwidth_MB_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_FREQUENCY_GHz")) { system_frequency_GHz_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_RBS_DL")) { number_of_rbs_dl_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "TRANSMISSION_MODE")) { transmission_mode_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "FRAME_CONFIG")) { frame_config_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "FRAME_TYPE")) { frame_type_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "TDD_CONFIG")) { tdd_config_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA")) { antenna_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_ANTENNA")) { eNB_antenna_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "UE_ANTENNA")) { UE_antenna_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_SECTORS")) { number_of_sectors_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "BEAM_WIDTH_dB")) { beam_width_dB_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ALPHA_RAD_1")) { alpha_rad_1_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ALPHA_RAD_2")) { alpha_rad_2_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ALPHA_RAD_3")) { alpha_rad_3_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_GAIN_dBi")) { antenna_gain_dBi_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "TX_POWER_dBm")) { tx_power_dBm_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RX_NOISE_LEVEL_dB")) { rx_noise_level_dB_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree1")) { antenna_orientation_degree_1_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree2")) { antenna_orientation_degree_2_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree3")) { antenna_orientation_degree_3_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "TOPOLOGY_CONFIG")) { topology_config_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "AREA")) { area_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "X_m")) { x_m_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "Y_m")) { y_m_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NETWORK_TYPE")) { network_type_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "CELL_TYPE")) { cell_type_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RELAY")) { relay_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_RELAYS")) { number_of_relays_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MOBILITY")) { mobility_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "UE_MOBILITY")) { UE_mobility_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "UE_MOBILITY_TYPE")) { UE_mobility_type_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_WALK")) { grid_walk_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_MAP")) { grid_map_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "HORIZONTAL_GRID")) { horizontal_grid_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "VERTICAL_GRID")) { vertical_grid_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_TRIP_TYPE")) { grid_trip_type_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "UE_INITIAL_DISTRIBUTION")) { UE_initial_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_UE_DISTRIBUTION")) { random_UE_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_NODES")) { number_of_nodes_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "CONCENTRATED_UE_DISTRIBUTION")) { concentrated_UE_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_UE_DISTRIBUTION")) { grid_UE_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_GRID")) { random_grid_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "BORDER_GRID")) { border_grid_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "UE_MOVING_DYNAMICS")) { UE_moving_dynamics_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MIN_SPEED_mps")) { min_speed_mps_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MAX_SPEED_mps")) { max_speed_mps_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MIN_SLEEP_ms")) { min_sleep_ms_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MAX_SLEEP_ms")) { max_sleep_ms_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MIN_JOURNEY_TIME_ms")) { min_journey_time_ms_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MAX_JOURNEY_TIME_ms")) { max_journey_time_ms_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_MOBILITY")) { eNB_mobility_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_MOBILITY_TYPE")) { eNB_mobility_type_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_DISTRIBUTION")) { eNB_initial_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_COORDINATES")) { eNB_initial_coordinates_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "POS_X")) { eNB_pos_x_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "POS_Y")) { eNB_pos_y_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_eNB_DISTRIBUTION")) { random_eNB_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_CELLS")) { number_of_cells_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "HEXAGONAL_eNB_DISTRIBUTION")) { hexagonal_eNB_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "INTER_eNB_DISTANCE_km")) { inter_eNB_distance_km_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_eNB_DISTRIBUTION")) { grid_eNB_distribution_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_GRID_X")) { number_of_grid_x_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_GRID_Y")) { number_of_grid_y_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "TRACE_MOBILITY_FILE")) { trace_mobility_file_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_CONFIG")) { sumo_config_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_CMD")) { sumo_cmd_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_CONFIG_FILE")) { sumo_config_file_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_START")) { sumo_start_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_END")) { sumo_end_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_STEP")) { sumo_step_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_HOST_IP")) { sumo_hip_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_HOST_PORT")) { sumo_hport_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "OMV")) { omv_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_CONFIG")) { application_config_ = 1; oai_emulation.info.max_predefined_traffic_config_index = 0; oai_emulation.info.max_customized_traffic_config_index = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PREDEFINED_TRAFFIC")) { predefined_traffic_ = 1; oai_emulation.info.otg_enabled =1; oai_emulation.info.max_predefined_traffic_config_index ++; } else if (!xmlStrcmp(name, (unsigned char*) "CUSTOMIZED_TRAFFIC")) { customized_traffic_ = 1; oai_emulation.info.otg_enabled =1; oai_emulation.info.max_customized_traffic_config_index ++; } else if (!xmlStrcmp(name, (unsigned char*) "CUSTOMIZED_TRAFFIC")) { customized_traffic_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "M2M")) { m2m_traffic_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_OFF_PU")) { prob_off_pu_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_OFF_ED")) { prob_off_ed_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_OFF_PE")) { prob_off_pe_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_PU_ED")) { prob_pu_ed_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_PU_PE")) { prob_pu_pe_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_ED_PE")) { prob_ed_pe_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_ED_PU")) { prob_ed_pu_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_OFF_ED")) { holding_time_off_ed_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_OFF_PU")) { holding_time_off_pu_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_OFF_PE")) { holding_time_off_pe_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_PE_OFF")) { holding_time_pe_off_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PU_SIZE_PKTS")) { pu_size_pkts_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "ED_SIZE_PKTS")) { ed_size_pkts_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SOURCE_ID")) { source_id_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_ID")) { destination_id_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_TYPE")) { application_type_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "PACKET_GEN_TYPE")) { packet_gen_type_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "BACKGROUND_TRAFFIC")) { background_traffic_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "TRAFFIC")) { traffic_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "TRANSPORT_PROTOCOL")) { transport_protocol_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IP_VERSION")) { ip_version_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "AGGREGATION_LEVEL")) { aggregation_level_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "FLOW_START_ms")) { flow_start_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "FLOW_DURATION_ms")) { flow_duration_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_DIST")) { idt_dist_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_MIN_ms")) { idt_min_ms_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_MAX_ms")) { idt_max_ms_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_STANDARD_DEVIATION")) { idt_standard_deviation_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_LAMBDA")) { idt_lambda_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_SCALE")) { idt_scale_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_SHAPE")) { idt_shape_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_DIST")) { size_dist_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_MIN_byte")) { size_min_byte_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_MAX_byte")) { size_max_byte_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_STANDARD_DEVIATION")) { size_standard_deviation_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_LAMBDA")) { size_lambda_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_SCALE")) { size_scale_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_SHAPE")) { size_shape_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "STREAM")) { stream_ = 1; } else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_PORT")) { destination_port_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_CONFIG")) { emulation_config_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_TIME_ms")) { emulation_time_ms_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "CURVE")) { curve_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PROFILING")) { profiling_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "TRACE_FILE")) { trace_file_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "BACKGROUND_STATS")) { background_stats_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PERFORMANCE_METRICS")) { performance_metrics_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "THROUGHPUT")) { throughput_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "LATENCY")) { latency_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "LOSS_RATE")) { loss_rate_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "OWD_RADIO_ACCESS")) { owd_radio_access_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "LAYER")) { layer_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PHY")) { phy_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MAC")) { mac_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RLC")) { rlc_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PDCP")) { pdcp_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "RRC")) { rrc_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "OMG")) { omg_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "OTG")) { otg_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "EMU")) { emu_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "LOG")) { log_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "LEVEL")) { level_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "VERBOSITY")) { verbosity_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "INTERVAL")) { interval_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PACKET_TRACE")) { packet_trace_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "SEED_VALUE")) { seed_value_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "CLI")) { cli_enabled_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "START_ENB")) { cli_start_enb_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "START_UE")) { cli_start_ue_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PROTOCOL")) { protocol_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "MAC")) { mac_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "NUM_GROUPS")) { num_groups_ = 1; } else if (!xmlStrcmp(name,(unsigned char*) "PROFILE")) { profile_ = 1; } else { LOG_W(OCG, "One element could not be parsed : unknown element name '%s'\n", name); } } void end_element(void *user_data, const xmlChar *name) // called once at the end of each element { if (!xmlStrcmp(name,(unsigned char*) "OAI_EMULATION")) { oai_emulation_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ENVIRONMENT_SYSTEM_CONFIG")) { environment_system_config_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "FADING")) { fading_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "LARGE_SCALE")) { large_scale_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "FREE_SPACE_MODEL_PARAMETERS")) { free_space_model_parameters_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PATHLOSS_EXPONENT")) { pathloss_exponent_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PATHLOSS_0_dB")) { pathloss_0_dB_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SMALL_SCALE")) { small_scale_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RICEAN_8TAP")) { ricean_8tap_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RICE_FACTOR_dB")) { rice_factor_dB_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SHADOWING")) { shadowing_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "DECORRELATION_DISTANCE_m")) { decorrelation_distance_m_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "VARIANCE_dB")) { variance_dB_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "INTER_SITE_CORRELATION")) { inter_site_correlation_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "WALL_PENETRATION_LOSS_dB")) { wall_penetration_loss_dB_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_BANDWIDTH_MB")) { system_bandwidth_MB_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_FREQUENCY_GHz")) { system_frequency_GHz_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_RBS_DL")) { number_of_rbs_dl_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "TRANSMISSION_MODE")) { transmission_mode_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "FRAME_CONFIG")) { frame_config_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "FRAME_TYPE")) { frame_type_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "TDD_CONFIG")) { tdd_config_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA")) { antenna_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_ANTENNA")) { eNB_antenna_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "UE_ANTENNA")) { UE_antenna_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_SECTORS")) { number_of_sectors_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "BEAM_WIDTH_dB")) { beam_width_dB_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ALPHA_RAD_1")) { alpha_rad_1_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ALPHA_RAD_2")) { alpha_rad_2_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ALPHA_RAD_3")) { alpha_rad_3_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_GAIN_dBi")) { antenna_gain_dBi_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "TX_POWER_dBm")) { tx_power_dBm_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RX_NOISE_LEVEL_dB")) { rx_noise_level_dB_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree1")) { antenna_orientation_degree_1_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree2")) { antenna_orientation_degree_2_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree3")) { antenna_orientation_degree_3_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "TOPOLOGY_CONFIG")) { topology_config_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "AREA")) { area_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "X_m")) { x_m_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "Y_m")) { y_m_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NETWORK_TYPE")) { network_type_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "CELL_TYPE")) { cell_type_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RELAY")) { relay_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_RELAYS")) { number_of_relays_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MOBILITY")) { mobility_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "UE_MOBILITY")) { UE_mobility_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "UE_MOBILITY_TYPE")) { UE_mobility_type_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_WALK")) { grid_walk_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_MAP")) { grid_map_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "HORIZONTAL_GRID")) { horizontal_grid_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "VERTICAL_GRID")) { vertical_grid_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_TRIP_TYPE")) { grid_trip_type_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "UE_INITIAL_DISTRIBUTION")) { UE_initial_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_UE_DISTRIBUTION")) { random_UE_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_NODES")) { number_of_nodes_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "CONCENTRATED_UE_DISTRIBUTION")) { concentrated_UE_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_UE_DISTRIBUTION")) { grid_UE_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_GRID")) { random_grid_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "BORDER_GRID")) { border_grid_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "UE_MOVING_DYNAMICS")) { UE_moving_dynamics_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MIN_SPEED_mps")) { min_speed_mps_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MAX_SPEED_mps")) { max_speed_mps_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MIN_SLEEP_ms")) { min_sleep_ms_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MAX_SLEEP_ms")) { max_sleep_ms_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MIN_JOURNEY_TIME_ms")) { min_journey_time_ms_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MAX_JOURNEY_TIME_ms")) { max_journey_time_ms_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_MOBILITY")) { eNB_mobility_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_MOBILITY_TYPE")) { eNB_mobility_type_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_DISTRIBUTION")) { eNB_initial_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_COORDINATES")) { eNB_initial_coordinates_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "POS_X")) { eNB_pos_x_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "POS_Y")) { eNB_pos_y_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_eNB_DISTRIBUTION")) { random_eNB_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_CELLS")) { number_of_cells_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "HEXAGONAL_eNB_DISTRIBUTION")) { hexagonal_eNB_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "INTER_eNB_DISTANCE_km")) { inter_eNB_distance_km_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "GRID_eNB_DISTRIBUTION")) { grid_eNB_distribution_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_GRID_X")) { number_of_grid_x_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_GRID_Y")) { number_of_grid_y_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "TRACE_MOBILITY_FILE")) { trace_mobility_file_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_CONFIG")) { sumo_config_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_CMD")) { sumo_cmd_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_CONFIG_FILE")) { sumo_config_file_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_START")) { sumo_start_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_END")) { sumo_end_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_STEP")) { sumo_step_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_HOST_IP")) { sumo_hip_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SUMO_HOST_PORT")) { sumo_hport_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "OMV")) { omv_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_CONFIG")) { application_config_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PREDEFINED_TRAFFIC")) { predefined_traffic_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "CUSTOMIZED_TRAFFIC")) { customized_traffic_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "M2M")) { m2m_traffic_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_OFF_PU")) { prob_off_pu_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_OFF_ED")) { prob_off_ed_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_OFF_PE")) { prob_off_pe_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_PU_ED")) { prob_pu_ed_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_PU_PE")) { prob_pu_pe_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_ED_PE")) { prob_ed_pe_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PROB_ED_PU")) { prob_ed_pu_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_OFF_ED")) { holding_time_off_ed_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_OFF_PU")) { holding_time_off_pu_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_OFF_PE")) { holding_time_off_pe_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "HOLDING_TIME_PE_OFF")) { holding_time_pe_off_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PU_SIZE_PKTS")) { pu_size_pkts_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "ED_SIZE_PKTS")) { ed_size_pkts_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SOURCE_ID")) { source_id_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_ID")) { destination_id_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_TYPE")) { application_type_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "PACKET_GEN_TYPE")) { packet_gen_type_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "BACKGROUND_TRAFFIC")) { background_traffic_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "TRAFFIC")) { traffic_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "TRANSPORT_PROTOCOL")) { transport_protocol_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "AGGREGATION_LEVEL")) { aggregation_level_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "FLOW_START_ms")) { flow_start_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "FLOW_DURATION_ms")) { flow_duration_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IP_VERSION")) { ip_version_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_DIST")) { idt_dist_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_MIN_ms")) { idt_min_ms_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_MAX_ms")) { idt_max_ms_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_STANDARD_DEVIATION")) { idt_standard_deviation_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_LAMBDA")) { idt_lambda_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_SCALE")) { idt_scale_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "IDT_SHAPE")) { idt_shape_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_DIST")) { size_dist_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_MIN_byte")) { size_min_byte_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_MAX_byte")) { size_max_byte_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_STANDARD_DEVIATION")) { size_standard_deviation_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_LAMBDA")) { size_lambda_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_SCALE")) { size_scale_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "SIZE_SHAPE")) { size_shape_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "STREAM")) { stream_ = 0; } else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_PORT")) { destination_port_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_CONFIG")) { emulation_config_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_TIME_ms")) { emulation_time_ms_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "CURVE")) { curve_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PROFILING")) { profiling_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "TRACE_FILE")) { trace_file_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "BACKGROUND_STATS")) { background_stats_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PERFORMANCE_METRICS")) { performance_metrics_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "THROUGHPUT")) { throughput_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "LATENCY")) { latency_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "LOSS_RATE")) { loss_rate_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "OWD_RADIO_ACCESS")) { owd_radio_access_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "LAYER")) { layer_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PHY")) { phy_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MAC")) { mac_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RLC")) { rlc_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PDCP")) { pdcp_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "RRC")) { rrc_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "OMG")) { omg_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "OTG")) { otg_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "EMU")) { emu_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "LOG")) { log_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "LEVEL")) { level_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "VERBOSITY")) { verbosity_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "INTERVAL")) { interval_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PACKET_TRACE")) { packet_trace_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "SEED_VALUE")) { seed_value_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "CLI")) { cli_enabled_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "START_ENB")) { cli_start_enb_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "START_UE")) { cli_start_ue_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PROTOCOL")) { protocol_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "MAC")) { mac_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "NUM_GROUPS")) { num_groups_ = 0; } else if (!xmlStrcmp(name,(unsigned char*) "PROFILE")) { profile_ = 0; } } void characters(void *user_data, const xmlChar *xmlch, int xmllen) // called once when there is content in each element { int i; const char *ch = (const char*) xmlch; size_t len = (size_t) xmllen; if (oai_emulation_) { if (environment_system_config_) { if (fading_) { if (large_scale_) { oai_emulation.environment_system_config.fading.large_scale.selected_option = strndup(ch, len); } else if (small_scale_) { oai_emulation.environment_system_config.fading.small_scale.selected_option = strndup(ch, len); } else if (shadowing_) { if (decorrelation_distance_m_) { oai_emulation.environment_system_config.fading.shadowing.decorrelation_distance_m = atof(ch); } else if (variance_dB_) { oai_emulation.environment_system_config.fading.shadowing.variance_dB = atof(ch); } else if (inter_site_correlation_) { oai_emulation.environment_system_config.fading.shadowing.inter_site_correlation = atof(ch); } } else if (free_space_model_parameters_) { if (pathloss_exponent_) { oai_emulation.environment_system_config.fading.free_space_model_parameters.pathloss_exponent = atof(ch); } else if (pathloss_0_dB_) { oai_emulation.environment_system_config.fading.free_space_model_parameters.pathloss_0_dB = atof(ch); } } else if (ricean_8tap_) { oai_emulation.environment_system_config.fading.ricean_8tap.rice_factor_dB = atof(ch); } } else if (wall_penetration_loss_dB_) { oai_emulation.environment_system_config.wall_penetration_loss_dB = atof(ch); } else if (system_bandwidth_MB_) { oai_emulation.environment_system_config.system_bandwidth_MB = atof(ch); } else if (system_frequency_GHz_) { oai_emulation.environment_system_config.system_frequency_GHz = atof(ch); } else if (number_of_rbs_dl_) { oai_emulation.info.N_RB_DL[0] = atoi(ch); } else if (transmission_mode_) { oai_emulation.info.transmission_mode[0] = atoi(ch); } else if (frame_config_) { if (frame_type_) { oai_emulation.info.frame_type[0] = atoi(ch); if (oai_emulation.info.frame_type[0]) { oai_emulation.info.frame_type_name[0] = "TDD"; } else { oai_emulation.info.frame_type_name[0] = "FDD"; } } else if (tdd_config_) { oai_emulation.info.tdd_config[0] = atoi(ch); } } else if (antenna_) { if (eNB_antenna_) { if (number_of_sectors_) { oai_emulation.environment_system_config.antenna.eNB_antenna.number_of_sectors = atoi(ch); } else if (beam_width_dB_) { oai_emulation.environment_system_config.antenna.eNB_antenna.beam_width_dB = atof(ch); } else if (alpha_rad_1_) { oai_emulation.environment_system_config.antenna.eNB_antenna.alpha_rad[0] = atof(ch); } else if (alpha_rad_2_) { oai_emulation.environment_system_config.antenna.eNB_antenna.alpha_rad[1] = atof(ch); } else if (alpha_rad_3_) { oai_emulation.environment_system_config.antenna.eNB_antenna.alpha_rad[2] = atof(ch); } else if (antenna_gain_dBi_) { oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_gain_dBi = atof(ch); } else if (tx_power_dBm_) { oai_emulation.environment_system_config.antenna.eNB_antenna.tx_power_dBm = atof(ch); } else if (rx_noise_level_dB_) { oai_emulation.environment_system_config.antenna.eNB_antenna.rx_noise_level_dB = atof(ch); } else if (antenna_orientation_degree_1_) { oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[0] = atof(ch); } else if (antenna_orientation_degree_2_) { oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[1] = atof(ch); } else if (antenna_orientation_degree_3_) { oai_emulation.environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[2] = atof(ch); } } else if (UE_antenna_) { if (antenna_gain_dBi_) { oai_emulation.environment_system_config.antenna.UE_antenna.antenna_gain_dBi = atof(ch); } else if (tx_power_dBm_) { oai_emulation.environment_system_config.antenna.UE_antenna.tx_power_dBm = atof(ch); } else if (rx_noise_level_dB_) { oai_emulation.environment_system_config.antenna.UE_antenna.rx_noise_level_dB = atof(ch); } } } } else if (topology_config_) { if (area_) { if (x_m_) { oai_emulation.topology_config.area.x_m = atof(ch); } else if (y_m_) { oai_emulation.topology_config.area.y_m = atof(ch); } } else if (network_type_) { oai_emulation.topology_config.network_type.selected_option = strndup(ch, len); } else if (cell_type_) { oai_emulation.topology_config.cell_type.selected_option = strndup(ch, len); } else if (relay_) { if (number_of_relays_) { oai_emulation.topology_config.relay.number_of_relays = atoi(ch); } } else if (mobility_) { if (UE_mobility_) { if (UE_mobility_type_) { oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option = strndup(ch, len); } else if (grid_walk_) { if (grid_map_) { oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.selected_option = strndup(ch, len); /* if (horizontal_grid_) { oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid = atoi(ch); } else if (vertical_grid_) { oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid = atoi(ch); } */ } else if (grid_trip_type_) { oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option = strndup(ch, len); } } else if (UE_initial_distribution_) { oai_emulation.topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option = strndup(ch, len); } else if (random_UE_distribution_) { if (number_of_nodes_) { oai_emulation.topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes = atoi(ch); oai_emulation.info.nb_ue_local = oai_emulation.topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes; } } else if (concentrated_UE_distribution_) { if (number_of_nodes_) { oai_emulation.topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes = atoi(ch); oai_emulation.info.nb_ue_local = oai_emulation.topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes; } } else if (grid_UE_distribution_) { if (random_grid_) { if (number_of_nodes_) { oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes = atoi(ch); oai_emulation.info.nb_ue_local = oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes; } } else if (border_grid_) { if (number_of_nodes_) { oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes = atoi(ch); oai_emulation.info.nb_ue_local = oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes; } } } else if (UE_moving_dynamics_) { if (min_speed_mps_) { oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps = atof(ch); } else if (max_speed_mps_) { oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps = atof(ch); } else if (min_sleep_ms_) { oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms = atof(ch); } else if (max_sleep_ms_) { oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms = atof(ch); } else if (min_journey_time_ms_) { oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms = atof(ch); } else if (max_journey_time_ms_) { oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = atof(ch); } } else if (trace_mobility_file_) { oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file=strndup(ch,len); } else if (sumo_config_) { if (sumo_cmd_) { oai_emulation.topology_config.mobility.UE_mobility.sumo_config.command=strndup(ch,len); } else if (sumo_config_file_) { oai_emulation.topology_config.mobility.UE_mobility.sumo_config.file=strndup(ch,len); } else if (sumo_start_) { oai_emulation.topology_config.mobility.UE_mobility.sumo_config.start=atoi(ch); } else if (sumo_end_) { oai_emulation.topology_config.mobility.UE_mobility.sumo_config.end=atoi(ch); } else if (sumo_step_) { oai_emulation.topology_config.mobility.UE_mobility.sumo_config.step=atoi(ch); } else if (sumo_hip_) { oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hip=strndup(ch,len); } else if (sumo_hport_) { oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hport=atoi(ch); } } } else if (eNB_mobility_) { if (eNB_mobility_type_) { oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option = strndup(ch, len); } else if (eNB_initial_distribution_) { oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option = strndup(ch, len); } else if (eNB_initial_coordinates_) { if (eNB_pos_x_) { oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_x = atof(ch); } else if (eNB_pos_y_) { oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_y = atof(ch); } } else if (random_eNB_distribution_) { if (number_of_cells_) { oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = atoi(ch); oai_emulation.info.nb_enb_local = oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells; } } else if (hexagonal_eNB_distribution_) { if (number_of_cells_) { oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells = atoi(ch); oai_emulation.info.nb_enb_local = oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells; } else if (inter_eNB_distance_km_) { oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km = atof(ch); } } else if (grid_eNB_distribution_) { if (number_of_grid_x_) { oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x = atoi(ch); } else if (number_of_grid_y_) { oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y = atoi(ch); oai_emulation.info.nb_enb_local = oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x * oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y; } } else if (trace_mobility_file_) { oai_emulation.topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file=strndup(ch,len); } } } else if (omv_) { oai_emulation.topology_config.omv=atoi(ch); } } else if (application_config_) { if (packet_gen_type_) { oai_emulation.application_config.packet_gen_type=strndup(ch, len); } else if (predefined_traffic_) { if (source_id_) { oai_emulation.application_config.predefined_traffic.source_id[oai_emulation.info.max_predefined_traffic_config_index] = strndup(ch, len); } else if (destination_id_) { oai_emulation.application_config.predefined_traffic.destination_id[oai_emulation.info.max_predefined_traffic_config_index] = strndup(ch, len); } else if (application_type_) { oai_emulation.application_config.predefined_traffic.application_type[oai_emulation.info.max_predefined_traffic_config_index] = strndup(ch, len); } else if (background_traffic_) { oai_emulation.application_config.predefined_traffic.background[oai_emulation.info.max_predefined_traffic_config_index] = strndup(ch, len); } else if (aggregation_level_) { oai_emulation.application_config.predefined_traffic.aggregation_level[oai_emulation.info.max_predefined_traffic_config_index] = atoi(ch); } else if (flow_start_) { oai_emulation.application_config.predefined_traffic.flow_start[oai_emulation.info.max_predefined_traffic_config_index] = atoi(ch); } else if (flow_duration_) { oai_emulation.application_config.predefined_traffic.flow_duration[oai_emulation.info.max_predefined_traffic_config_index] = atoi(ch); } } else if (customized_traffic_) { if (prob_off_pu_) { oai_emulation.application_config.customized_traffic.prob_off_pu[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (prob_off_ed_) { oai_emulation.application_config.customized_traffic.prob_off_ed[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (prob_off_pe_) { oai_emulation.application_config.customized_traffic.prob_off_pe[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (prob_pu_ed_) { oai_emulation.application_config.customized_traffic.prob_pu_ed[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (prob_pu_pe_) { oai_emulation.application_config.customized_traffic.prob_pu_pe[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (prob_ed_pe_) { oai_emulation.application_config.customized_traffic.prob_ed_pe[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (prob_ed_pu_) { oai_emulation.application_config.customized_traffic.prob_ed_pu[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (holding_time_off_ed_) { oai_emulation.application_config.customized_traffic.holding_time_off_ed[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (holding_time_off_pu_) { oai_emulation.application_config.customized_traffic.holding_time_off_pu[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (holding_time_off_pe_) { oai_emulation.application_config.customized_traffic.holding_time_off_pe[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (holding_time_pe_off_) { oai_emulation.application_config.customized_traffic.holding_time_pe_off[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (pu_size_pkts_) { oai_emulation.application_config.customized_traffic.pu_size_pkts[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = "enable"; } else if (ed_size_pkts_) { oai_emulation.application_config.customized_traffic.ed_size_pkts[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (background_traffic_) { oai_emulation.application_config.customized_traffic.background[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (m2m_traffic_) { oai_emulation.application_config.customized_traffic.m2m[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (source_id_) { oai_emulation.application_config.customized_traffic.source_id[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (destination_id_) { oai_emulation.application_config.customized_traffic.destination_id[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (transport_protocol_) { oai_emulation.application_config.customized_traffic.transport_protocol[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (ip_version_) { oai_emulation.application_config.customized_traffic.ip_version[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (aggregation_level_) { oai_emulation.application_config.customized_traffic.aggregation_level[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (flow_start_) { oai_emulation.application_config.customized_traffic.flow_start[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (flow_duration_) { oai_emulation.application_config.customized_traffic.flow_duration[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (idt_dist_) { oai_emulation.application_config.customized_traffic.idt_dist[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (idt_min_ms_) { oai_emulation.application_config.customized_traffic.idt_min_ms[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (idt_max_ms_) { oai_emulation.application_config.customized_traffic.idt_max_ms[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (idt_standard_deviation_) { oai_emulation.application_config.customized_traffic.idt_standard_deviation[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (idt_lambda_) { oai_emulation.application_config.customized_traffic.idt_lambda[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (idt_scale_) { oai_emulation.application_config.customized_traffic.idt_scale[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (idt_shape_) { oai_emulation.application_config.customized_traffic.idt_shape[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (size_dist_) { oai_emulation.application_config.customized_traffic.size_dist[oai_emulation.info.max_customized_traffic_config_index] = strndup(ch, len); } else if (size_min_byte_) { oai_emulation.application_config.customized_traffic.size_min_byte[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (size_max_byte_) { oai_emulation.application_config.customized_traffic.size_max_byte[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (size_standard_deviation_) { oai_emulation.application_config.customized_traffic.size_standard_deviation[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (size_lambda_) { oai_emulation.application_config.customized_traffic.size_lambda[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (size_scale_) { oai_emulation.application_config.customized_traffic.size_scale[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (size_shape_) { oai_emulation.application_config.customized_traffic.size_shape[oai_emulation.info.max_customized_traffic_config_index] = atof(ch); } else if (stream_) { oai_emulation.application_config.customized_traffic.stream[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } else if (destination_port_) { oai_emulation.application_config.customized_traffic.destination_port[oai_emulation.info.max_customized_traffic_config_index] = atoi(ch); } } } else if (emulation_config_) { if (emulation_time_ms_) { oai_emulation.emulation_config.emulation_time_ms = atof(ch); } else if (curve_) { oai_emulation.emulation_config.curve = strndup(ch, len); } else if (profiling_) { oai_emulation.info.opp_enabled = atoi(ch); } else if (trace_file_) { oai_emulation.info.opt_enabled = 1; if (strncmp(ch, "wireshark", len) == 0) { opt_type = OPT_WIRESHARK; } else if (strncmp(ch, "pcap", len) == 0) { opt_type = OPT_PCAP; } else { opt_type = OPT_NONE; oai_emulation.info.opt_enabled = 0; } oai_emulation.info.opt_mode = opt_type; } else if (background_stats_) { oai_emulation.emulation_config.background_stats = strndup(ch, len); } else if (performance_metrics_) { if (throughput_) { oai_emulation.emulation_config.performance_metrics.throughput = strndup(ch, len); } else if (latency_) { oai_emulation.emulation_config.performance_metrics.latency = strndup(ch, len); } else if (loss_rate_) { oai_emulation.emulation_config.performance_metrics.loss_rate = strndup(ch, len); } else if (owd_radio_access_) { oai_emulation.emulation_config.performance_metrics.owd_radio_access = strndup(ch, len); } } else if (layer_) { if (phy_) { oai_emulation.emulation_config.layer.phy = atoi(ch); } else if (mac_) { oai_emulation.emulation_config.layer.mac = atoi(ch); } else if (rlc_) { oai_emulation.emulation_config.layer.rlc = atoi(ch); } else if (pdcp_) { oai_emulation.emulation_config.layer.pdcp = atoi(ch); } else if (rrc_) { oai_emulation.emulation_config.layer.rrc = atoi(ch); } else if (omg_) { oai_emulation.emulation_config.layer.omg = atoi(ch); } else if (otg_) { oai_emulation.emulation_config.layer.otg = atoi(ch); } else if (emu_) { oai_emulation.emulation_config.layer.emu = atoi(ch); } } else if (log_) { if (level_) { oai_emulation.emulation_config.log_emu.level = strndup(ch,len); } else if (verbosity_) { oai_emulation.emulation_config.log_emu.verbosity = strndup(ch,len); } else if (interval_) { oai_emulation.emulation_config.log_emu.interval = atoi(ch); } } else if (packet_trace_) { oai_emulation.emulation_config.packet_trace.enabled = atoi(ch); } else if (seed_value_) { oai_emulation.emulation_config.seed.value = atoi(ch); } else if (cli_enabled_) { oai_emulation.info.cli_enabled = 1; if (cli_start_enb_) { for (i=0; i < oai_emulation.info.cli_num_enb; i++) oai_emulation.info.cli_start_enb[i] = atoi(ch); } else if (cli_start_ue_) { for (i=0; i < oai_emulation.info.cli_num_ue; i++) oai_emulation.info.cli_start_ue[i] = atoi(ch); } } } else if (protocol_) { if (mac_) { if (num_groups_) { oai_emulation.protocol_config.eNB_mac_config.num_groups=atoi(ch); } } } else if (profile_) { oai_emulation.profile = strndup(ch, len); } } } int parse_XML(char src_file[FILENAME_LENGTH_MAX + DIR_LENGTH_MAX]) { // config the parser, refer to 'http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html' xmlSAXHandler sax_handler = { 0 }; // a Simple API for XML (SAX) handler sax_handler.startDocument = start_document; sax_handler.endDocument = end_document; sax_handler.startElement = start_element; sax_handler.endElement = end_element; sax_handler.characters = characters; // Parsing the XML file if (xmlSAXUserParseFile(&sax_handler, NULL, src_file) != 0) { LOG_E(OCG, "An error occurs while parsing the configuration file!\n"); return MODULE_ERROR; } LOG_I(OCG, "The configuration file is parsed\n"); return MODULE_OK; }