Files
openairinterface5g/targets/SIMU/USER/event_handler.c
T
Navid Nikaein 8b7143022b * manage control elements in CCCH PDU through rx_sdu function
* add event handler for remote (online) configuration and status monitoring
* update openair config generator (OCG) and scneario descriptor (OSD) with new features contributed by A. Gomes (one source)
* fix the issue with netlink when benchmarking oaisim preformance 
* pre-ci passed except for eMBMS  



git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5299 818b1a75-f10b-46b9-bf7c-635c3b92a50f
2014-05-02 08:38:08 +00:00

480 lines
28 KiB
C

/*******************************************************************************
Eurecom OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
This program is free software; you can redistribute it and/or modify it
under the terms and conditions of the GNU General Public License,
version 2, as published by the Free Software Foundation.
This program is distributed in the hope 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
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
The full GNU General Public License is included in this distribution in
the file called "COPYING".
Contact Information
Openair Admin: openair_admin@eurecom.fr
Openair Tech : openair_tech@eurecom.fr
Forums : http://forums.eurecom.fsr/openairinterface
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
*******************************************************************************/
/*! \file event_handler.c
* \brief event handler primitives
* \author Navid Nikaein and Mohamed Said MOSLI BOUKSIAA,
* \date 2014
* \version 0.5
* @ingroup _oai
*/
#include <stdio.h>
#include <stdlib.h>
#include "event_handler.h"
//extern frame_t frame;
//End_Of_Sim_Event end_event; //Could later be a list of condition_events (if the end condition is more complicated)
Event_List_t event_list;
void add_event(Event_t event) {
Event_elt_t * counter = event_list.head;
Event_elt_t * previous = counter;
Event_elt_t * elt = malloc(sizeof(Event_elt_t));
while (counter != NULL) {
if ((counter->event).frame > event.frame) break;
//else if ((counter->event).next_slot > event.next_slot) break;
else {
previous = counter;
counter = counter->next;
}
}
elt->event = event;
if (event_list.head != NULL)
event_list_add_element(elt, previous, &event_list);
else
event_list_add_head(elt, &event_list);
}
void schedule(Event_Type_t type, int frame, char * key, void * value) {
Event_t event;
event.frame = frame;
if (key == NULL) { //Global model update
event.key = NULL;
} else { //Update of a single parameter
event.key = malloc (sizeof(char) * (strlen(key)+1));
strcpy(event.key, key);
}
event.value = value;
event.type = type;
add_event(event);
}
/*
* this function can reschedule events in the future to build a desired (more dynamic) scenario
* TODO: make sure that OCG OAI_Emulation is decoupled with the local vars
*/
void schedule_events(){
/*
* Step 1: vars needed for future changes
*/
// overall config associated with OAI_ET
// OAI_Emulation * oai_frame_1000;
// specific config
/*
* associated with SYS_ET
*/
//Environment_System_Config * system_frame_200;
/*
* associated with TOPO_ET
*/
//Topology_Config *topology_frame_10;
/*
* associated with APP_ET
*/
//Application_Config *application_frame_20;
/*
* associated with EMU_ET
*/
//Emulation_Config * emulation_frame_100;
/*
* Step 2: set the desired future changes in the vars
*/
// i.e. optionally provide an XML file and update OCG vars
//mob_frame_10 -> ...
//application_frame_30 -> ...
/*
* Step 3: schedule the execution of changes
*/
// general OAI dynamic configuration
//schedule(OAI_ET, 1000, NULL, oai_frame_1000);
//schedule(SYS_ET, 200, NULL, system_frame_200);
//schedule(TOPO_ET, 10, NULL, topology_frame_10);
//schedule(APP_ET, 20, NULL, application_frame_20);
//schedule(EMU_ET, 100, NULL,emulation_frame_100);
// protocol dynamic configuration
//schedule(MAC_ET, 100, NULL,mac_frame_100);
//event_list_display(&event_list);
}
void execute_events(frame_t frame){
Event_elt_t *user_defined_event;
Event_t event;
while ((user_defined_event = event_list_get_head(&event_list)) != NULL) {
event = user_defined_event->event;
if (event.frame == frame) {
switch (event.type) {
case OAI_ET:
update_oai_model(event.key, event.value);
user_defined_event = event_list_remove_head(&event_list);
break;
case SYS_ET:
update_sys_model(event.key, event.value);
user_defined_event = event_list_remove_head(&event_list);
break;
case TOPO_ET:
update_topo_model(event.key, event.value); //implement it with assigning the new values to that of oai_emulation & second thing is to ensure mob model is always read from oai_emulation
user_defined_event = event_list_remove_head(&event_list);
break;
case APP_ET:
update_app_model(event.key, event.value);
user_defined_event = event_list_remove_head(&event_list);
break;
case EMU_ET:
update_emu_model(event.key, event.value);
user_defined_event = event_list_remove_head(&event_list);
break;
case MAC_ET:
update_mac(event.key, event.value);
user_defined_event = event_list_remove_head(&event_list);
break;
default :
break;
}
} else {
break;
}
}
}
void update_mac(char * key, void * value) {
}
void update_oai_model(char * key, void * value) {
}
void update_sys_model(char * key, void * value) {
}
void update_topo_model(char * key, void * value) {
printf("\n\n\nA NEW MOB MODEL\n\n\n");
/*
if (key != NULL) { //Global model update
Mobility * new_mobility_model = (Mobility *) value;
sprintf(oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option, "%s", new_mobility_model->UE_mobility.UE_mobility_type.selected_option);
oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid = new_mobility_model->UE_mobility.grid_walk.grid_map.horizontal_grid;
oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid = new_mobility_model->UE_mobility.grid_walk.grid_map.vertical_grid;
sprintf(oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option, "%s", new_mobility_model->UE_mobility.grid_walk.grid_trip_type.selected_option);
sprintf(oai_emulation.topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option, "%s", new_mobility_model->UE_mobility.UE_initial_distribution.selected_option);
oai_emulation.topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes = new_mobility_model->UE_mobility.random_UE_distribution.number_of_nodes;
oai_emulation.topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes = new_mobility_model->UE_mobility.concentrated_UE_distribution.number_of_nodes;
oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes = new_mobility_model->UE_mobility.grid_UE_distribution.random_grid.number_of_nodes;
oai_emulation.topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes = new_mobility_model->UE_mobility.grid_UE_distribution.border_grid.number_of_nodes;
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps = new_mobility_model->UE_mobility.UE_moving_dynamics.min_speed_mps;
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps = new_mobility_model->UE_mobility.UE_moving_dynamics.max_speed_mps;
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.min_sleep_ms;
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.max_sleep_ms;
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.min_journey_time_ms;
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.max_journey_time_ms;
sprintf(oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option, "%s", new_mobility_model->eNB_mobility.eNB_mobility_type.selected_option);
sprintf(oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option, "%s", new_mobility_model->eNB_mobility.eNB_initial_distribution.selected_option);
oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = new_mobility_model->eNB_mobility.random_eNB_distribution.number_of_cells;
oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells = new_mobility_model->eNB_mobility.hexagonal_eNB_distribution.number_of_cells;
oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km = new_mobility_model->eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km;
oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x = new_mobility_model->eNB_mobility.grid_eNB_distribution.number_of_grid_x;
oai_emulation.topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y = new_mobility_model->eNB_mobility.grid_eNB_distribution.number_of_grid_y;
sprintf(oai_emulation.topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file,"static_1enb.tr");
sprintf(oai_emulation.topology_config.mobility.UE_mobility.trace_config.trace_mobility_file,"static_2ues.tr");
sprintf(oai_emulation.topology_config.mobility.UE_mobility.sumo_config.command,"sumo");
sprintf(oai_emulation.topology_config.mobility.UE_mobility.sumo_config.file,"%s/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg",getenv("OPENAIR2_DIR"));
sprintf(oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hip,"127.0.1.1");
oai_emulation.topology_config.mobility.UE_mobility.sumo_config.start = new_mobility_model->UE_mobility.sumo_config.start;
oai_emulation.topology_config.mobility.UE_mobility.sumo_config.end = new_mobility_model->UE_mobility.sumo_config.end;
oai_emulation.topology_config.mobility.UE_mobility.sumo_config.step = new_mobility_model->UE_mobility.sumo_config.step; // 1000ms
oai_emulation.topology_config.mobility.UE_mobility.sumo_config.hport = new_mobility_model->UE_mobility.sumo_config.hport;
} else { //Updating a single parameter::: Here I'll only put some examples
if (!strcmp((char *) key, "UE_mobility_type")) {
sprintf(oai_emulation.topology_config.mobility.UE_mobility.UE_mobility_type.selected_option, "%s", (char *) value);
} else if (!strcmp((char *) key, "eNB_mobility_type")) {
sprintf(oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option, "%s", (char *) value);
} else if (!strcmp((char *) key, "grid_trip_type")) {
sprintf(oai_emulation.topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option, "%s", (char *) value);
} else if (!strcmp((char *) key, "UE_moving_dynamics_min_speed_mps")) {
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps = *((double *) value);
} else if (!strcmp((char *) key, "UE_moving_dynamics_max_speed_mps")) {
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps = *((double *) value);
} else if (!strcmp((char *) key, "UE_moving_dynamics_min_sleep_ms")) {
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms = *((double *) value);
} else if (!strcmp((char *) key, "UE_moving_dynamics_max_sleep_ms")) {
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms = *((double *) value);
} else if (!strcmp((char *) key, "UE_moving_dynamics_min_journey_time_ms")) {
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms = *((double *) value);
} else if (!strcmp((char *) key, "UE_moving_dynamics_max_journey_time_ms")) {
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = *((double *) value);
}
}
*/
}
void update_app_model(char * key, void * value) {
printf("\n\n\nA NEW APP MODEL\n\n\n");
//int i;
/*
if (key != NULL) { //Global model update
Application_Config * new_application_model = (Application_Config *)value;
sprintf(oai_emulation.application_config.packet_gen_type, "%s", new_application_model->packet_gen_type);
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.predefined_traffic.source_id[i], "%s", new_application_model->predefined_traffic.source_id[i]);
sprintf(oai_emulation.application_config.predefined_traffic.application_type[i], "%s", new_application_model->predefined_traffic.application_type[i]);
sprintf(oai_emulation.application_config.predefined_traffic.background[i], "%s", new_application_model->predefined_traffic.background[i]);
oai_emulation.application_config.predefined_traffic.aggregation_level[i] = new_application_model->predefined_traffic.aggregation_level[i];
oai_emulation.application_config.predefined_traffic.destination_id[i] = new_application_model->predefined_traffic.destination_id[i];
sprintf(oai_emulation.application_config.customized_traffic.source_id[i], "%s", new_application_model->customized_traffic.source_id[i]);
sprintf(oai_emulation.application_config.customized_traffic.destination_id[i], "%s", new_application_model->customized_traffic.destination_id[i]);
sprintf(oai_emulation.application_config.customized_traffic.transport_protocol[i], "%s", new_application_model->customized_traffic.transport_protocol[i]);
sprintf(oai_emulation.application_config.customized_traffic.background[i], "%s", new_application_model->customized_traffic.background[i]);
sprintf(oai_emulation.application_config.customized_traffic.ip_version[i], "%s", new_application_model->customized_traffic.ip_version[i]);
oai_emulation.application_config.customized_traffic.aggregation_level[i] = new_application_model->customized_traffic.aggregation_level[i];
sprintf(oai_emulation.application_config.customized_traffic.idt_dist[i], "%s", new_application_model->customized_traffic.idt_dist[i]);
oai_emulation.application_config.customized_traffic.idt_min_ms[i] = new_application_model->customized_traffic.idt_min_ms[i];
oai_emulation.application_config.customized_traffic.idt_max_ms[i] = new_application_model->customized_traffic.idt_max_ms[i];
oai_emulation.application_config.customized_traffic.idt_standard_deviation[i] = new_application_model->customized_traffic.idt_standard_deviation[i];
oai_emulation.application_config.customized_traffic.idt_lambda[i] = new_application_model->customized_traffic.idt_lambda[i];
sprintf(oai_emulation.application_config.customized_traffic.size_dist[i], "%s", new_application_model->customized_traffic.size_dist[i]);
oai_emulation.application_config.customized_traffic.size_min_byte[i] = new_application_model->customized_traffic.size_min_byte[i];
oai_emulation.application_config.customized_traffic.size_max_byte[i] = new_application_model->customized_traffic.size_max_byte[i];
oai_emulation.application_config.customized_traffic.size_standard_deviation[i] = new_application_model->customized_traffic.size_standard_deviation[i];
oai_emulation.application_config.customized_traffic.size_lambda[i] = new_application_model->customized_traffic.size_lambda[i];
oai_emulation.application_config.customized_traffic.stream[i] = new_application_model->customized_traffic.stream[i];
oai_emulation.application_config.customized_traffic.destination_port[i] = new_application_model->customized_traffic.destination_port[i];
oai_emulation.application_config.customized_traffic.prob_off_pu[i]= new_application_model->customized_traffic.prob_off_pu[i];
oai_emulation.application_config.customized_traffic.prob_off_ed[i]= new_application_model->customized_traffic.prob_off_ed[i];
oai_emulation.application_config.customized_traffic.prob_off_pe[i]= new_application_model->customized_traffic.prob_off_pe[i];
oai_emulation.application_config.customized_traffic.prob_pu_ed[i]= new_application_model->customized_traffic.prob_pu_ed[i];
oai_emulation.application_config.customized_traffic.prob_pu_pe[i]= new_application_model->customized_traffic.prob_pu_pe[i];
oai_emulation.application_config.customized_traffic.prob_ed_pe[i]= new_application_model->customized_traffic.prob_ed_pe[i];
oai_emulation.application_config.customized_traffic.prob_ed_pu[i]= new_application_model->customized_traffic.prob_ed_pu[i];
oai_emulation.application_config.customized_traffic.holding_time_off_ed[i]= new_application_model->customized_traffic.holding_time_off_ed[i];
oai_emulation.application_config.customized_traffic.holding_time_off_pu[i]= new_application_model->customized_traffic.holding_time_off_pu[i];
oai_emulation.application_config.customized_traffic.holding_time_off_pe[i]= new_application_model->customized_traffic.holding_time_off_pe[i];
oai_emulation.application_config.customized_traffic.holding_time_pe_off[i]= new_application_model->customized_traffic.holding_time_pe_off[i];
oai_emulation.application_config.customized_traffic.pu_size_pkts[i]= new_application_model->customized_traffic.pu_size_pkts[i];
oai_emulation.application_config.customized_traffic.ed_size_pkts[i]= new_application_model->customized_traffic.ed_size_pkts[i];
}
} else { //Updating a single parameter::: Here I'll only put some examples
if (!strcmp((char *) key, "packet_gen_type")) {
sprintf(oai_emulation.application_config.packet_gen_type, "%s", (char *) value);
} else if (!strcmp((char *) key, "predefined_traffic_source_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.predefined_traffic.source_id[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "predefined_traffic_application_type")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.predefined_traffic.application_type[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "predefined_traffic_background")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.predefined_traffic.background[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_source_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.customized_traffic.source_id[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_destination_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.customized_traffic.destination_id[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_transport_protocol")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.customized_traffic.transport_protocol[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_background")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.customized_traffic.background[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_ip_version")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.customized_traffic.ip_version[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_idt_dist")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.customized_traffic.idt_dist[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_size_dist")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
sprintf(oai_emulation.application_config.customized_traffic.size_dist[i], "%s", (char *) value);
}
} else if (!strcmp((char *) key, "predefined_traffic_aggregation_level")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.predefined_traffic.aggregation_level[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "predefined_traffic_destination_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.predefined_traffic.destination_id[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_aggregation_level")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.aggregation_level[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_idt_min_ms")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.idt_min_ms[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_idt_max_ms")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.idt_max_ms[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_idt_standard_deviation")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.idt_standard_deviation[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_idt_lambda")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.idt_lambda[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_size_min_byte")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.size_min_byte[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_size_max_byte")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.size_max_byte[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_size_standard_deviation")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.size_standard_deviation[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_size_lambda")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.size_lambda[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_stream")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.stream[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_destination_port")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.destination_port[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_prob_off_pu")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.prob_off_pu[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_prob_off_ed")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.prob_off_ed[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_prob_off_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.prob_off_pe[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_prob_pu_ed")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.prob_pu_ed[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_prob_pu_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.prob_pu_pe[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_prob_ed_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.prob_ed_pe[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_prob_ed_pu")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.prob_ed_pu[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_holding_time_off_ed")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.holding_time_off_ed[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_holding_time_off_pu")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.holding_time_off_pu[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_holding_time_off_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.holding_time_off_pe[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_holding_time_pe_off")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.holding_time_pe_off[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_pu_size_pkts")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.pu_size_pkts[i] = *((int *) value);
}
} else if (!strcmp((char *) key, "customized_traffic_ed_size_pkts")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation.application_config.customized_traffic.ed_size_pkts[i] = *((int *) value);
}
}
}
*/
}
void update_emu_model(char * key, void * value) {
}