Files
openairinterface5g/targets/SIMU/USER/event_handler.c
T

2575 lines
145 KiB
C

/*******************************************************************************
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 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 "UTIL/LOG/log.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;
//printf("%" PRIu8 "testestest \n", *((uint8_t *) event.value));
if (event_list.head != NULL)
event_list_add_element(elt, previous, &event_list);
else
event_list_add_head(elt, &event_list);
}
void schedule(Operation_Type_t op, Event_Type_t type, int frame, char * key, void * value, int ue, int lcid)
{
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;
//printf("%" PRIu8 "testestest \n",*((uint8_t *)value));
event.type = type;
event.optype = op;
event.lcid = lcid;
event.ue = ue;
add_event(event);
}
void schedule_delayed(Operation_Type_t op, Event_Type_t type, char * key, void* value, char * date, int ue, int lcid)
{
printf("Delayed schedule");
printf("date %s\n", date);
// first get the time from the system
struct tm *pdh;
time_t intps;
intps=time(NULL);
pdh = localtime(&intps);
char *date_cpy = malloc (sizeof (char) * 256);
strncpy( date_cpy, date, 256 );
date_cpy[255] = 0; // terminate string
// second count the frame to reach the time
char *heure = NULL;
int heure_int;
int minute_int;
int heure_diff;
int minute_diff;
int ms_diff;
int frame;
char *minute = NULL;
heure = strtok(date_cpy,"h");
//heure = strchr(date,'h');
printf("hour char : %s", heure);
minute = strchr(date,'h');
printf("minute char : %s", minute+1);
free( date_cpy );
date_cpy = 0;
heure_int = atoi(heure);
minute_int = atoi(minute+1);
heure_diff = heure_int - pdh->tm_hour;
minute_diff = minute_int - pdh->tm_min;
ms_diff = heure_diff*3600*1000 + minute_diff*60*1000;
frame = ms_diff/10;
/*char stTemp[2];
int valeur_a_en_entier;
sprintf(stTemp,"%c",a);
valeur_a_en_entier = atoi(stTemp);*/
// third schedule with the classic function
printf("schedule_frame %d\n",frame);
printf("test pdh hr : %d\n", pdh->tm_hour);
printf("test heure_diff : %d\n", heure_diff);
printf("test minute_diff : %d\n", minute_diff);
if(frame >= 0) {
schedule(op,type,frame,key,value,lcid,ue);
}
}
/*
* 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
*
* For ET_MAC parameters are first set in the OAI_emulation (OCG) structure and then
* duplicated in the eNB_mac_inst structure
*
* If you want to modifiy a parameter for all UEs, put -1 in the lcid and the ue field when you call
* the schedule function
*/
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;
uint8_t a;
Mac_config* mac_config;
Mac_config* mac_config2;
Mac_config* mac_config3;
Mac_config* mac_config4;
Mac_config* mac_config5;
int i=0;
mac_config = NULL;
mac_config2 = NULL;
mac_config3 = NULL;
mac_config4 = NULL;
mac_config5 = NULL;
mac_config = malloc(sizeof(Mac_config));
mac_config2= malloc(sizeof(Mac_config));
mac_config3= malloc(sizeof(Mac_config));
mac_config4= malloc(sizeof(Mac_config));
mac_config5= malloc(sizeof(Mac_config));
a = 5;
//uint16_t *priority[11];//={1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2};
//int tab[NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX];
Application_Config* application_config;
application_config = malloc(sizeof(Application_Config));
for(i=0; i<NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
//tab[i]=i;
application_config->customized_traffic.aggregation_level[i]=i;
}
mac_config->DCI_aggregation_min = a;
mac_config->DLSCH_dci_size_bits = a;
/*
* 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(READ, TOPO_ET, 10, NULL, "");
//schedule(APP_ET, 20, NULL, application_frame_20);
//schedule(EMU_ET, 100, NULL,emulation_frame_100);
// protocol dynamic configuration
schedule(READ, MAC_ET, 115, NULL, "",0,0);
//schedule(READ, MAC_ET, 400, NULL, "");
//schedule(READ, MAC_ET, 500, NULL, "");
//schedule(WRITE, MAC_ET, 100, NULL, "");
//schedule(READ, TOPO_ET,110,NULL,"",0,0);
//double b = (double) 45;
//schedule(READ, APP_ET,111,NULL,"",0,0);
//schedule(READ, SYS_ET,112,NULL,"",0,0);
//schedule(READ, EMU_ET,113,NULL,"",-1,-1);
//schedule(WRITE, MAC_ET, 122, "DCI_aggregation_min", mac_config);
//schedule(WRITE, MAC_ET, 123, "max_allowed_rbs", mac_config);
//schedule(WRITE, MAC_ET, 125, "max_mcs", mac_config);
int j=0;
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
mac_config2[i].DCI_aggregation_min = 1;
for(j=0; j<MAX_NUM_LCID; j++) {
mac_config2[i].ul_bandwidth[j]= (uint8_t) 4;
mac_config2[i].max_mcs[j]= 1;
}
}
//schedule(READ or WRITE, ET_MAC, frame number, key, mac_config, ue, lcid);
//schedule(WRITE, MAC_ET, 125, "ul_bandwidth", mac_config2,-1,-1);
//schedule(WRITE, MAC_ET, 126, "DCI_aggregation_min", mac_config2,-1,-1);
//schedule(WRITE, MAC_ET, 128, "max_mcs", mac_config2,-1,-1);
mac_config[0].max_mcs[3]= 4;
schedule(WRITE, MAC_ET, 140, "max_mcs", mac_config,0,3);
mac_config2[0].max_mcs[3]= 26;
schedule(WRITE, MAC_ET, 1500, "max_mcs", mac_config2,0,3);
mac_config3[0].max_mcs[3]= 3;
schedule(WRITE, MAC_ET, 1600, "max_mcs", mac_config3,0,3);
mac_config4[0].max_mcs[3]= 26;
schedule(WRITE, MAC_ET, 2400, "max_mcs", mac_config4,0,3);
mac_config5[0].max_mcs[3]= 13;
schedule(WRITE, MAC_ET, 3000, "max_mcs", mac_config5,0,3);
printf("schedule_event\n");
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) {
//printf("%" PRIu8 "testestest \n", *((uint8_t *) event.value));
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);
user_defined_event = event_list_remove_head(&event_list);
break;
case TOPO_ET:
update_topo_model(event); //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);
user_defined_event = event_list_remove_head(&event_list);
break;
case EMU_ET:
update_emu_model(event);
user_defined_event = event_list_remove_head(&event_list);
break;
case MAC_ET:
update_mac(event);
user_defined_event = event_list_remove_head(&event_list);
break;
default :
break;
}
} else {
break;
}
}
}
void update_mac(Event_t event)
{
LOG_I(EMU,"A NEW MAC MODEL\n");
int i = 0;
UE_list_t *UE_list = 0;
int enb_module_id=0;
int cc_id =0;
eNB_MAC_INST *eNB_mac_inst = get_eNB_mac_inst(enb_module_id);
OAI_Emulation *oai_emulation = get_OAI_emulation();
if(event.optype == READ) {
printf("eNB_stats\n\n\n");
if(event.key==NULL) {
LOG_I(EMU,"num_dlactive_UEs :");
printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].num_dlactive_UEs);
LOG_I(EMU,"available_prbs :");
printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_prbs);
LOG_I(EMU,"total_available_prbs :");
printf("%" PRIu32 "\n", eNB_mac_inst->eNB_stats[cc_id].total_available_prbs);
LOG_I(EMU,"available_ncces :");
printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_ncces);
LOG_I(EMU,"dlsch_bitrate :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bitrate);
LOG_I(EMU,"dlsch_bytes_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bytes_tx);
LOG_I(EMU,"dlsch_pdus_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_pdus_tx);
LOG_I(EMU,"total_dlsch_bitrate :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bitrate);
LOG_I(EMU,"total_dlsch_bytes_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bytes_tx);
LOG_I(EMU,"total_dlsch_pdus_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_pdus_tx);
LOG_I(EMU,"ulsch_bitrate :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bitrate);
LOG_I(EMU,"ulsch_bytes_rx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bytes_rx);
LOG_I(EMU,"ulsch_pdus_rx :");
printf("%" PRIu64 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_pdus_rx);
} else if(!strcmp((char *) event.key, "num_dlactive_UEs")) {
LOG_I(EMU,"num_dlactive_UEs :");
printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].num_dlactive_UEs);
} else if(!strcmp((char *) event.key, "available_prbs")) {
LOG_I(EMU,"available_prbs :");
printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_prbs);
} else if(!strcmp((char *) event.key, "total_available_prbs")) {
LOG_I(EMU,"total_available_prbs :");
printf("%" PRIu32 "\n", eNB_mac_inst->eNB_stats[cc_id].total_available_prbs);
} else if(!strcmp((char *) event.key, "available_ncces")) {
LOG_I(EMU,"available_ncces :");
printf("%" PRIu16 "\n",eNB_mac_inst->eNB_stats[cc_id].available_ncces);
} else if(!strcmp((char *) event.key, "dlsch_bitrate")) {
LOG_I(EMU,"dlsch_bitrate :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bitrate);
} else if(!strcmp((char *) event.key, "dlsch_bytes_tx")) {
LOG_I(EMU,"dlsch_bytes_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_bytes_tx);
} else if(!strcmp((char *) event.key, "dlsch_pdus_tx")) {
LOG_I(EMU,"dlsch_pdus_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].dlsch_pdus_tx);
} else if(!strcmp((char *) event.key, "total_dlsch_bitrate")) {
LOG_I(EMU,"total_dlsch_bitrate :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bitrate);
} else if(!strcmp((char *) event.key, "total_dlsch_bytes_tx")) {
LOG_I(EMU,"total_dlsch_bytes_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_bytes_tx);
} else if(!strcmp((char *) event.key, "total_dlsch_pdus_tx")) {
LOG_I(EMU,"total_dlsch_pdus_tx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].total_dlsch_pdus_tx);
} else if(!strcmp((char *) event.key, "ulsch_bitrate")) {
LOG_I(EMU,"ulsch_bitrate :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bitrate);
} else if(!strcmp((char *) event.key, "ulsch_bytes_rx")) {
LOG_I(EMU,"ulsch_bytes_rx :");
printf("%" PRIu32 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_bytes_rx);
} else if(!strcmp((char *) event.key, "ulsch_pdus_rx")) {
LOG_I(EMU,"ulsch_pdus_rx :");
printf("%" PRIu64 "\n",eNB_mac_inst->eNB_stats[cc_id].ulsch_pdus_rx);
}
} else if(event.optype == WRITE) {
LOG_I(EMU,"WRITE OPERATION \n");
if(event.key==NULL && event.value!=NULL) {
if((Mac_config *) event.value !=NULL && validate_mac(event)) {
Mac_config* mac_config;
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"update complete mac params \n");
if(event.ue == -1 && event.lcid == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
if(&mac_config[i].DCI_aggregation_min) {
LOG_I(EMU,"update dci aggregation min\n");
oai_emulation->mac_config[i].DCI_aggregation_min= mac_config[i].DCI_aggregation_min;
UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min;
LOG_I(EMU,"DCI_aggregation_min UE %d: \n",i);
LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DCI_aggregation_min);
}
if(&mac_config[i].DLSCH_dci_size_bits !=NULL) {
oai_emulation->mac_config[i].DLSCH_dci_size_bits= mac_config[i].DLSCH_dci_size_bits;
UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits;
LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n",i);
LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits);
}
if(mac_config[i].priority !=NULL) {
LOG_I(EMU,"update priority \n");
int j;
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].priority[j]!=NULL) {
oai_emulation->mac_config[i].priority[j]= mac_config[i].priority[j];
UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j];
LOG_I(EMU,"priority UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]);
}
}
}
if(&mac_config[i].ul_bandwidth !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
oai_emulation->mac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j];
UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j];
LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]);
}
}
if(&mac_config[i].dl_bandwidth !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
oai_emulation->mac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j];
UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j];
LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]);
}
}
if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) {
oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL;
UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:",i );
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL);
}
if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) {
oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL;
UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:",i);
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL);
}
if(&mac_config[i].cqiSchedInterval !=NULL) {
oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval;
UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval;
LOG_I(EMU,"cqiSchedInterval UE %d:",i);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval);
}
if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) {
oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer;
UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer;
LOG_I(EMU,"mac_ContentionResolutionTimer UE %:", i);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer);
}
if(mac_config->max_allowed_rbs !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
oai_emulation->mac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j];
UE_list->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j];
LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_allowed_rbs[j]);
}
}
if(mac_config[i].max_mcs !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
oai_emulation->mac_config[i].max_mcs[j]= mac_config[i].max_mcs[j];
UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j];
LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]);
}
}
}
} else {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"update complete mac params \n");
i = event.ue;
int j = event.lcid;
if(&mac_config[i].DCI_aggregation_min) {
LOG_I(EMU,"update dci aggregation min\n");
oai_emulation->mac_config[i].DCI_aggregation_min= mac_config[i].DCI_aggregation_min;
// duplication dans le ue template, vérifier la validité avant
UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min;
LOG_I(EMU,"DCI_aggregation_min UE %d: \n",i);
LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DCI_aggregation_min);
}
if(&mac_config[i].DLSCH_dci_size_bits !=NULL) {
oai_emulation->mac_config[i].DLSCH_dci_size_bits= mac_config[i].DLSCH_dci_size_bits;
UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits;
LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n",i);
LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits);
}
if(mac_config[i].priority !=NULL) {
LOG_I(EMU,"update priority \n");
if(&mac_config[i].priority[j]!=NULL) {
oai_emulation->mac_config[i].priority[j]= mac_config[i].priority[j];
UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j];
LOG_I(EMU,"priority UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]);
}
}
if(&mac_config[i].ul_bandwidth !=NULL) {
// faire boucle par ue puis par lcid
oai_emulation->mac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j];
UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j];
LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]);
}
if(&mac_config[i].dl_bandwidth !=NULL) {
oai_emulation->mac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j];
UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j];
LOG_I(EMU,"ul_bandwidth UE %d LCID %d:", i, j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]);
}
if(&mac_config[i].min_ul_bandwidth !=NULL) {
// faire boucle par ue puis par lcid
oai_emulation->mac_config[i].min_ul_bandwidth[j]= mac_config[i].min_ul_bandwidth[j];
UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j];
LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:", i, j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j]);
}
if(&mac_config[i].min_dl_bandwidth !=NULL) {
oai_emulation->mac_config[i].min_dl_bandwidth[j]= mac_config[i].min_dl_bandwidth[j];
UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j];
LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:", i, j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j]);
}
if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) {
oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL;
UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:",i );
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL);
}
if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) {
oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL;
UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:",i);
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL);
}
if(&mac_config[i].cqiSchedInterval !=NULL) {
oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval;
UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval;
LOG_I(EMU,"cqiSchedInterval UE %d:",i);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval);
}
if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) {
oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer;
UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer;
LOG_I(EMU,"mac_ContentionResolutionTimer UE %:", i);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer);
}
if(mac_config->max_allowed_rbs !=NULL) {
oai_emulation->mac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j];
UE_list->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j];
LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_allowed_rbs[j]);
}
if(mac_config[i].max_mcs !=NULL) {
oai_emulation->mac_config[i].max_mcs[j]= mac_config[i].max_mcs[j];
UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j];
LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]);
}
}
}
} else if(!strcmp((char *) event.key, "priority") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
LOG_I(EMU,"priority update \n");
if(event.ue == -1) {
for(i=0; i<MAX_NUM_LCID; i++) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].priority[j]!=NULL) {
oai_emulation->mac_config[i].priority[j]= mac_config[i].priority[j];
UE_list->UE_sched_ctrl[i].priority[j] = oai_emulation->mac_config[i].priority[j];
LOG_I(EMU,"priority UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].priority[j]);
}
}
}
} else {
oai_emulation->mac_config[event.ue].priority[event.lcid]= mac_config[event.ue].priority[event.lcid];
UE_list->UE_sched_ctrl[event.ue].priority[event.lcid] = oai_emulation->mac_config[event.ue].priority[event.lcid];
LOG_I(EMU,"priority UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].priority[event.lcid]);
}
} else if(!strcmp((char *) event.key, "DCI_aggregation_min") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"DCI_aggregation_min update \n");
if(event.ue == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
oai_emulation->mac_config[i].DCI_aggregation_min=mac_config[i].DCI_aggregation_min;
UE_list->UE_template[0][i].DCI_aggregation_min = oai_emulation->mac_config[i].DCI_aggregation_min;
LOG_I(EMU,"DCI_aggregation_min UE %d : \n", i);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_template[0][i].DCI_aggregation_min);
}
} else {
oai_emulation->mac_config[event.ue].DCI_aggregation_min=mac_config[event.ue].DCI_aggregation_min;
UE_list->UE_template[0][event.ue].DCI_aggregation_min = oai_emulation->mac_config[event.ue].DCI_aggregation_min;
LOG_I(EMU,"DCI_aggregation_min UE %d : \n", event.ue);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_template[0][event.ue].DCI_aggregation_min);
}
} else if(!strcmp((char *) event.key, "DLSCH_dci_size_bits") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"DLSCH_dci_size_bits update \n");
if(event.ue == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
oai_emulation->mac_config[i].DLSCH_dci_size_bits=mac_config[i].DLSCH_dci_size_bits;
UE_list->UE_template[0][i].DLSCH_dci_size_bits = oai_emulation->mac_config[i].DLSCH_dci_size_bits;
LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n", i);
LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][i].DLSCH_dci_size_bits);
}
} else {
oai_emulation->mac_config[event.ue].DLSCH_dci_size_bits=mac_config[event.ue].DLSCH_dci_size_bits;
UE_list->UE_template[0][event.ue].DLSCH_dci_size_bits = oai_emulation->mac_config[event.ue].DLSCH_dci_size_bits;
LOG_I(EMU,"DLSCH_dci_size_bits UE %d: \n", event.ue);
LOG_I(EMU,"%" PRIu8,UE_list->UE_template[0][event.ue].DLSCH_dci_size_bits);
}
} else if(!strcmp((char *) event.key, "ul_bandwidth") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].ul_bandwidth[j]!=NULL) {
oai_emulation->mac_config[i].ul_bandwidth[j]= mac_config[i].ul_bandwidth[j];
UE_list->UE_sched_ctrl[i].ul_bandwidth[j] = oai_emulation->mac_config[i].ul_bandwidth[j];
LOG_I(EMU,"ul_bandwidth UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].ul_bandwidth[j]);
}
}
}
} else {
oai_emulation->mac_config[event.ue].ul_bandwidth[event.lcid]= mac_config[event.ue].ul_bandwidth[event.lcid];
UE_list->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].ul_bandwidth[event.lcid];
LOG_I(EMU,"ul_bandwidth UE %d LCID %d:",event.ue, event.lcid);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].ul_bandwidth[event.lcid]);
}
} else if(!strcmp((char *) event.key, "dl_bandwidth") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
if(event.value + i !=NULL) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].dl_bandwidth[j]!=NULL) {
oai_emulation->mac_config[i].dl_bandwidth[j]= mac_config[i].dl_bandwidth[j];
UE_list->UE_sched_ctrl[i].dl_bandwidth[j] = oai_emulation->mac_config[i].dl_bandwidth[j];
LOG_I(EMU,"dl_bandwidth UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].dl_bandwidth[j]);
}
}
}
}
} else {
oai_emulation->mac_config[event.ue].dl_bandwidth[event.lcid]= mac_config[event.ue].dl_bandwidth[event.lcid];
UE_list->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].dl_bandwidth[event.lcid];
LOG_I(EMU,"dl_bandwidth UE %d LCID %d:",event.ue, event.lcid);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].dl_bandwidth[event.lcid]);
}
} else if(!strcmp((char *) event.key, "min_ul_bandwidth") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].min_ul_bandwidth[j]!=NULL) {
oai_emulation->mac_config[i].min_ul_bandwidth[j]= mac_config[i].min_ul_bandwidth[j];
UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j] = oai_emulation->mac_config[i].min_ul_bandwidth[j];
LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_ul_bandwidth[j]);
}
}
}
} else {
oai_emulation->mac_config[event.ue].min_ul_bandwidth[event.lcid]= mac_config[event.ue].min_ul_bandwidth[event.lcid];
UE_list->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_ul_bandwidth[event.lcid];
LOG_I(EMU,"min_ul_bandwidth UE %d LCID %d:",event.ue, event.lcid);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].min_ul_bandwidth[event.lcid]);
}
} else if(!strcmp((char *) event.key, "min_dl_bandwidth") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
if(event.value + i !=NULL) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].min_dl_bandwidth[j]!=NULL) {
oai_emulation->mac_config[i].min_dl_bandwidth[j]= mac_config[i].min_dl_bandwidth[j];
UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j] = oai_emulation->mac_config[i].min_dl_bandwidth[j];
LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].min_dl_bandwidth[j]);
}
}
}
}
} else {
oai_emulation->mac_config[event.ue].min_dl_bandwidth[event.lcid]= mac_config[event.ue].min_dl_bandwidth[event.lcid];
UE_list->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid] = oai_emulation->mac_config[event.ue].min_dl_bandwidth[event.lcid];
LOG_I(EMU,"min_dl_bandwidth UE %d LCID %d:",event.ue, event.lcid);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].min_dl_bandwidth[event.lcid]);
}
} else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateDL") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"ue_AggregatedMaximumBitrateDL update \n");
if(event.ue == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL= mac_config[i].ue_AggregatedMaximumBitrateDL;
UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateDL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:\n",event.ue);
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateDL);
}
} else {
oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateDL= mac_config[event.ue].ue_AggregatedMaximumBitrateDL;
UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateDL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateDL UE %d:\n",event.ue);
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateDL);
}
} else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateUL") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"ue_AggregatedMaximumBitrateUL update \n");
if(event.ue == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL= mac_config[i].ue_AggregatedMaximumBitrateUL;
UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[i].ue_AggregatedMaximumBitrateUL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:\n",i);
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[i].ue_AggregatedMaximumBitrateUL);
}
} else {
oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateUL= mac_config[event.ue].ue_AggregatedMaximumBitrateUL;
UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL = oai_emulation->mac_config[event.ue].ue_AggregatedMaximumBitrateUL;
LOG_I(EMU,"ue_AggregatedMaximumBitrateUL UE %d:\n",event.ue);
LOG_I(EMU,"%" PRIu64 "\n",UE_list->UE_sched_ctrl[event.ue].ue_AggregatedMaximumBitrateUL);
}
} else if(!strcmp((char *) event.key, "cqiSchedInterval") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"cqiSchedInterval update \n");
if(event.ue == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
oai_emulation->mac_config[i].cqiSchedInterval= mac_config[i].cqiSchedInterval;
UE_list->UE_sched_ctrl[i].cqiSchedInterval = oai_emulation->mac_config[i].cqiSchedInterval;
LOG_I(EMU,"cqiSchedInterval UE :\n", i);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].cqiSchedInterval);
}
} else {
oai_emulation->mac_config[event.ue].cqiSchedInterval= mac_config[event.ue].cqiSchedInterval;
UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval = oai_emulation->mac_config[event.ue].cqiSchedInterval;
LOG_I(EMU,"cqiSchedInterval UE :\n", event.ue);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].cqiSchedInterval);
}
} else if(!strcmp((char *) event.key, "mac_ContentionResolutionTimer") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"mac_ContentionResolutionTimer update \n");
if(event.ue == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
oai_emulation->mac_config[i].mac_ContentionResolutionTimer= mac_config[i].mac_ContentionResolutionTimer;
UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer = oai_emulation->mac_config[i].mac_ContentionResolutionTimer;
LOG_I(EMU,"mac_ContentionResolutionTimer UE :\n", i);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[i].mac_ContentionResolutionTimer);
}
} else {
oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer= mac_config[event.ue].mac_ContentionResolutionTimer;
UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer = oai_emulation->mac_config[event.ue].mac_ContentionResolutionTimer;
LOG_I(EMU,"mac_ContentionResolutionTimer UE :\n", event.ue);
LOG_I(EMU,"%" PRIu8 "\n",UE_list->UE_sched_ctrl[event.ue].mac_ContentionResolutionTimer);
}
} else if(!strcmp((char *) event.key, "max_allowed_rbs") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
if(event.value + i !=NULL) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].max_allowed_rbs[j]!=NULL) {
oai_emulation->mac_config[i].max_allowed_rbs[j]= mac_config[i].max_allowed_rbs[j];
UE_list->UE_sched_ctrl[i].max_allowed_rbs[j] = oai_emulation->mac_config[i].max_allowed_rbs[j];
LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_allowed_rbs[j]);
}
}
}
}
} else {
oai_emulation->mac_config[event.ue].max_allowed_rbs[event.lcid]= mac_config[event.ue].max_allowed_rbs[event.lcid];
UE_list->UE_sched_ctrl[event.ue].max_allowed_rbs[event.lcid] = oai_emulation->mac_config[event.ue].max_allowed_rbs[event.lcid];
LOG_I(EMU,"max_allowed_rbs UE %d LCID %d:",event.ue,event.lcid);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].max_allowed_rbs[event.lcid]);
}
} else if(!strcmp((char *) event.key, "max_mcs") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
UE_list = &eNB_mac_inst->UE_list;
for(i=UE_list->head; i>=0; i=UE_list->next[i]) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].max_mcs[j]!=NULL) {
oai_emulation->mac_config[i].max_mcs[j]= mac_config[i].max_mcs[j];
UE_list->UE_sched_ctrl[i].max_mcs[j] = oai_emulation->mac_config[i].max_mcs[j];
LOG_I(EMU,"max_mcs UE %d LCID %d:",i,j);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[i].max_mcs[j]);
}
}
}
} else {
oai_emulation->mac_config[event.ue].max_mcs[event.lcid]= mac_config[event.ue].max_mcs[event.lcid];
UE_list->UE_sched_ctrl[event.ue].max_mcs[event.lcid] = oai_emulation->mac_config[event.ue].max_mcs[event.lcid];
LOG_I(EMU,"max_mcs UE %d LCID %d:",event.ue,event.lcid);
LOG_I(EMU,"%" PRIu16 "\n",UE_list->UE_sched_ctrl[event.ue].max_mcs[event.lcid]);
}
}
}
}
void update_oai_model(char * key, void * value)
{
}
void update_sys_model(Event_t event)
{
printf("\n\n\nA NEW SYS MODEL\n\n\n");
OAI_Emulation *oai_emulation;
oai_emulation = get_OAI_emulation();
int i=0;
if(event.optype == READ) {
if(event.key == NULL) {
LOG_I(EMU,"wall_penetration_loss_dB %G\n",oai_emulation->environment_system_config.wall_penetration_loss_dB);
LOG_I(EMU,"system_bandwidth_MB %G\n",oai_emulation->environment_system_config.system_bandwidth_MB);
LOG_I(EMU,"system_frequency_GHz %G\n",oai_emulation->environment_system_config.system_frequency_GHz);
//Fading
LOG_I(EMU,"fading.large_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.large_scale.selected_option);
LOG_I(EMU,"fading.large_scale.free_space %d\n",oai_emulation->environment_system_config.fading.large_scale.free_space);
LOG_I(EMU,"fading.large_scale.urban %d\n",oai_emulation->environment_system_config.fading.large_scale.urban);
LOG_I(EMU,"fading.large_scale.rural %d\n",oai_emulation->environment_system_config.fading.large_scale.rural);
LOG_I(EMU,"fading.small_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.small_scale.selected_option);
LOG_I(EMU,"fading.small_scale.SCM_A %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_A);
LOG_I(EMU,"fading.small_scale.SCM_B %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_B);
LOG_I(EMU,"fading.small_scale.SCM_C %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_C);
LOG_I(EMU,"fading.small_scale.SCM_D %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_D);
LOG_I(EMU,"fading.small_scale.rayleigh_8tap %d\n",oai_emulation->environment_system_config.fading.small_scale.rayleigh_8tap);
LOG_I(EMU,"fading.small_scale.EPA %d\n",oai_emulation->environment_system_config.fading.small_scale.EPA);
LOG_I(EMU,"fading.small_scale.EVA %d\n",oai_emulation->environment_system_config.fading.small_scale.EVA);
LOG_I(EMU,"fading.small_scale.ETU %d\n",oai_emulation->environment_system_config.fading.small_scale.ETU);
LOG_I(EMU,"shadowing.decorrelation_distance_m %G\n",oai_emulation->environment_system_config.fading.shadowing.decorrelation_distance_m);
LOG_I(EMU,"shadowing.variance_dB %G\n",oai_emulation->environment_system_config.fading.shadowing.variance_dB);
LOG_I(EMU,"shadowing.inter_site_correlation %G\n",oai_emulation->environment_system_config.fading.shadowing.inter_site_correlation);
LOG_I(EMU,"free_space_model_parameters.pathloss_exponent %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_exponent);
LOG_I(EMU,"free_space_model_parameters.pathloss_0_dB %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB);
LOG_I(EMU,"ricean_8tap.rice_factor_dB %G\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB);
//Antenna
LOG_I(EMU,"antenna.eNB_antenna.number_of_sectors %d\n",oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors);
LOG_I(EMU,"antenna.eNB_antenna.beam_width_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.beam_width_dB);
LOG_I(EMU,"antenna.eNB_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_gain_dBi);
LOG_I(EMU,"antenna.eNB_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.tx_power_dBm);
LOG_I(EMU,"antenna.eNB_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.rx_noise_level_dB);
for (i = 0; i<3; i++) {
LOG_I(EMU,"antenna.eNB_antenna.alpha_rad %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.alpha_rad[i]);
}
for (i = 0; i<3; i++) {
LOG_I(EMU,"antenna.eNB_antenna.antenna_orientation_degree %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[i]);
}
LOG_I(EMU,"antenna.UE_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.antenna_gain_dBi);
LOG_I(EMU,"antenna.UE_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.tx_power_dBm);
LOG_I(EMU,"antenna.UE_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.rx_noise_level_dB);
} else if(!strcmp((char *) event.key, "wall_penetration_loss_dB")) {
LOG_I(EMU,"wall_penetration_loss_dB %G\n",oai_emulation->environment_system_config.wall_penetration_loss_dB);
} else if(!strcmp((char *) event.key, "system_bandwidth_MB")) {
LOG_I(EMU,"system_bandwidth_MB %G\n",oai_emulation->environment_system_config.system_bandwidth_MB);
} else if(!strcmp((char *) event.key, "system_frequency_GHz")) {
LOG_I(EMU,"system_frequency_GHz %G\n",oai_emulation->environment_system_config.system_frequency_GHz);
} else if(!strcmp((char *) event.key, "fading.large_scale.selected_option")) {
LOG_I(EMU,"fading.large_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.large_scale.selected_option);
} else if(!strcmp((char *) event.key, "fading.large_scale.free_space")) {
LOG_I(EMU,"fading.large_scale.free_space %d\n",oai_emulation->environment_system_config.fading.large_scale.free_space);
} else if(!strcmp((char *) event.key, "fading.large_scale.urban")) {
LOG_I(EMU,"fading.large_scale.urban %d\n",oai_emulation->environment_system_config.fading.large_scale.urban);
} else if(!strcmp((char *) event.key, "fading.large_scale.rural")) {
LOG_I(EMU,"fading.large_scale.rural %d\n",oai_emulation->environment_system_config.fading.large_scale.rural);
} else if(!strcmp((char *) event.key, "fading.small_scale.selected_option")) {
LOG_I(EMU,"fading.small_scale.selected_option %s\n",oai_emulation->environment_system_config.fading.small_scale.selected_option);
} else if(!strcmp((char *) event.key, "fading.small_scale.SCM_A")) {
LOG_I(EMU,"fading.small_scale.SCM_A %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_A);
} else if(!strcmp((char *) event.key, "fading.small_scale.SCM_B")) {
LOG_I(EMU,"fading.small_scale.SCM_B %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_B);
} else if(!strcmp((char *) event.key, "fading.small_scale.SCM_C")) {
LOG_I(EMU,"fading.small_scale.SCM_C %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_C);
} else if(!strcmp((char *) event.key, "fading.small_scale.SCM_D")) {
LOG_I(EMU,"fading.small_scale.SCM_D %d\n",oai_emulation->environment_system_config.fading.small_scale.SCM_D);
} else if(!strcmp((char *) event.key, "fading.small_scale.rayleigh_8tap")) {
LOG_I(EMU,"fading.small_scale.rayleigh_8tap %d\n",oai_emulation->environment_system_config.fading.small_scale.rayleigh_8tap);
} else if(!strcmp((char *) event.key, "fading.small_scale.EPA")) {
LOG_I(EMU,"fading.small_scale.EPA %d\n",oai_emulation->environment_system_config.fading.small_scale.EPA);
} else if(!strcmp((char *) event.key, "fading.small_scale.EVA")) {
LOG_I(EMU,"fading.small_scale.EVA %d\n",oai_emulation->environment_system_config.fading.small_scale.EVA);
} else if(!strcmp((char *) event.key, "fading.small_scale.ETU")) {
LOG_I(EMU,"fading.small_scale.ETU %d\n",oai_emulation->environment_system_config.fading.small_scale.ETU);
} else if(!strcmp((char *) event.key, "shadowing.decorrelation_distance_m")) {
LOG_I(EMU,"shadowing.decorrelation_distance_m %G\n",oai_emulation->environment_system_config.fading.shadowing.decorrelation_distance_m);
} else if(!strcmp((char *) event.key, "shadowing.variance_dB")) {
LOG_I(EMU,"shadowing.variance_dB %G\n",oai_emulation->environment_system_config.fading.shadowing.variance_dB);
} else if(!strcmp((char *) event.key, "shadowing.inter_site_correlation")) {
LOG_I(EMU,"shadowing.inter_site_correlation %G\n",oai_emulation->environment_system_config.fading.shadowing.inter_site_correlation);
} else if(!strcmp((char *) event.key, "free_space_model_parameters.pathloss_exponent")) {
LOG_I(EMU,"free_space_model_parameters.pathloss_exponent %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_exponent);
} else if(!strcmp((char *) event.key, "free_space_model_parameters.pathloss_0_dB")) {
LOG_I(EMU,"free_space_model_parameters.pathloss_0_dB %G\n",oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB);
} else if(!strcmp((char *) event.key, "ricean_8tap.rice_factor_dB")) {
LOG_I(EMU,"ricean_8tap.rice_factor_dB %G\n",oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB);
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.number_of_sectors")) {
LOG_I(EMU,"antenna.eNB_antenna.number_of_sectors %d\n",oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors);
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.beam_width_dB")) {
LOG_I(EMU,"antenna.eNB_antenna.beam_width_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.beam_width_dB);
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.antenna_gain_dBi")) {
LOG_I(EMU,"antenna.eNB_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_gain_dBi);
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.tx_power_dBm")) {
LOG_I(EMU,"antenna.eNB_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.tx_power_dBm);
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.rx_noise_level_dB")) {
LOG_I(EMU,"antenna.eNB_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.eNB_antenna.rx_noise_level_dB);
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.alpha_rad")) {
for (i = 0; i<3; i++) {
LOG_I(EMU,"antenna.eNB_antenna.alpha_rad %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.alpha_rad[i]);
}
} else if(!strcmp((char *) event.key, "antenna.eNB_antenna.antenna_orientation_degree")) {
for (i = 0; i<3; i++) {
LOG_I(EMU,"antenna.eNB_antenna.antenna_orientation_degree %d %G\n",i,oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[i]);
}
} else if(!strcmp((char *) event.key, "antenna.UE_antenna.antenna_gain_dBi")) {
LOG_I(EMU,"antenna.UE_antenna.antenna_gain_dBi %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.antenna_gain_dBi);
} else if(!strcmp((char *) event.key, "antenna.UE_antenna.tx_power_dBm")) {
LOG_I(EMU,"antenna.UE_antenna.tx_power_dBm %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.tx_power_dBm);
} else if(!strcmp((char *) event.key, "antenna.UE_antenna.rx_noise_level_dB")) {
LOG_I(EMU,"antenna.UE_antenna.rx_noise_level_dB %G\n",oai_emulation->environment_system_config.antenna.UE_antenna.rx_noise_level_dB);
}
} else if(event.optype == WRITE) {
if(event.key == NULL && event.value!=NULL) {
Environment_System_Config* new_env_config = (Environment_System_Config *) event.value;
oai_emulation->environment_system_config.wall_penetration_loss_dB = new_env_config->wall_penetration_loss_dB;
oai_emulation->environment_system_config.system_bandwidth_MB = new_env_config->system_bandwidth_MB;
oai_emulation->environment_system_config.system_frequency_GHz = new_env_config->system_frequency_GHz;
//Fading
sprintf(oai_emulation->environment_system_config.fading.large_scale.selected_option,"%s",new_env_config->fading.large_scale.selected_option);
oai_emulation->environment_system_config.fading.large_scale.free_space = new_env_config->fading.large_scale.free_space;
oai_emulation->environment_system_config.fading.large_scale.urban = new_env_config->fading.large_scale.urban;
oai_emulation->environment_system_config.fading.large_scale.rural = new_env_config->fading.large_scale.rural;
sprintf(oai_emulation->environment_system_config.fading.small_scale.selected_option,"%s",new_env_config->fading.small_scale.selected_option);
oai_emulation->environment_system_config.fading.small_scale.SCM_A = new_env_config->fading.small_scale.SCM_A;
oai_emulation->environment_system_config.fading.small_scale.SCM_B = new_env_config->fading.small_scale.SCM_B;
oai_emulation->environment_system_config.fading.small_scale.SCM_C = new_env_config->fading.small_scale.SCM_C;
oai_emulation->environment_system_config.fading.small_scale.SCM_D = new_env_config->fading.small_scale.SCM_D;
oai_emulation->environment_system_config.fading.small_scale.rayleigh_8tap = new_env_config->fading.small_scale.rayleigh_8tap;
oai_emulation->environment_system_config.fading.small_scale.EPA = new_env_config->fading.small_scale.EPA;
oai_emulation->environment_system_config.fading.small_scale.EVA = new_env_config->fading.small_scale.EVA;
oai_emulation->environment_system_config.fading.small_scale.ETU = new_env_config->fading.small_scale.ETU;
oai_emulation->environment_system_config.fading.shadowing.decorrelation_distance_m = new_env_config->fading.shadowing.decorrelation_distance_m;
oai_emulation->environment_system_config.fading.shadowing.variance_dB = new_env_config->fading.shadowing.variance_dB;
oai_emulation->environment_system_config.fading.shadowing.inter_site_correlation = new_env_config->fading.shadowing.inter_site_correlation;
oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_exponent = new_env_config->fading.free_space_model_parameters.pathloss_exponent;
oai_emulation->environment_system_config.fading.free_space_model_parameters.pathloss_0_dB = new_env_config->fading.free_space_model_parameters.pathloss_0_dB;
oai_emulation->environment_system_config.fading.ricean_8tap.rice_factor_dB = new_env_config->fading.ricean_8tap.rice_factor_dB;
//Antenna
oai_emulation->environment_system_config.antenna.eNB_antenna.number_of_sectors = new_env_config->antenna.eNB_antenna.number_of_sectors;
oai_emulation->environment_system_config.antenna.eNB_antenna.beam_width_dB = new_env_config->antenna.eNB_antenna.beam_width_dB;
oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_gain_dBi = new_env_config->antenna.eNB_antenna.antenna_gain_dBi;
oai_emulation->environment_system_config.antenna.eNB_antenna.tx_power_dBm = new_env_config->antenna.eNB_antenna.tx_power_dBm;
oai_emulation->environment_system_config.antenna.eNB_antenna.rx_noise_level_dB = new_env_config->antenna.eNB_antenna.rx_noise_level_dB;
for (i = 0; i<3; i++) {
oai_emulation->environment_system_config.antenna.eNB_antenna.alpha_rad[i] = new_env_config->antenna.eNB_antenna.alpha_rad[i];
}
for (i = 0; i<3; i++) {
oai_emulation->environment_system_config.antenna.eNB_antenna.antenna_orientation_degree[i] = new_env_config->antenna.eNB_antenna.antenna_orientation_degree[i];
}
oai_emulation->environment_system_config.antenna.UE_antenna.antenna_gain_dBi = new_env_config->antenna.UE_antenna.antenna_gain_dBi;
oai_emulation->environment_system_config.antenna.UE_antenna.tx_power_dBm = new_env_config->antenna.UE_antenna.tx_power_dBm;
oai_emulation->environment_system_config.antenna.UE_antenna.rx_noise_level_dB = new_env_config->antenna.UE_antenna.rx_noise_level_dB;
}
}
}
void update_topo_model(Event_t event)
{
printf("\n\n\nA NEW MOB MODEL\n\n\n");
OAI_Emulation *oai_emulation;
oai_emulation = get_OAI_emulation();
if(event.optype == READ) {
if(event.key == NULL) {
//read all values
LOG_I(EMU,"UE Mobility type %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_mobility_type.selected_option);
LOG_I(EMU,"eNB Mobility type %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option);
LOG_I(EMU,"grid_trip_type %s\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option);
LOG_I(EMU,"UE_moving_dynamics_min_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps);
LOG_I(EMU,"UE_moving_dynamics_min_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms);
LOG_I(EMU,"UE_moving_dynamics_max_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms);
LOG_I(EMU,"UE_moving_dynamics_max_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps);
LOG_I(EMU,"UE_moving_dynamics_min_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms);
LOG_I(EMU,"UE_moving_dynamics_max_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms);
LOG_I(EMU,"grid_map_horizontal_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid);
LOG_I(EMU,"grid_map_vertical_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid);
LOG_I(EMU,"UE_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option);
LOG_I(EMU,"random_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes);
LOG_I(EMU,"concentrated_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes);
LOG_I(EMU,"random_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes);
LOG_I(EMU,"border_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes);
LOG_I(EMU,"eNB_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option);
LOG_I(EMU,"random_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells);
LOG_I(EMU,"hexagonal_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells);
LOG_I(EMU,"hexagonal_eNB_distribution_inter_eNB_distance_km %G\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km);
LOG_I(EMU,"grid_eNB_distribution_number_of_grid_x %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x);
LOG_I(EMU,"grid_eNB_distribution_number_of_grid_y %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y);
LOG_I(EMU,"trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file);
LOG_I(EMU,"trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.trace_config.trace_mobility_file);
LOG_I(EMU,"sumo_config_command %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.command);
LOG_I(EMU,"sumo_config_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.file);
LOG_I(EMU,"sumo_config_start %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.start);
LOG_I(EMU,"sumo_config_end %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.end);
LOG_I(EMU,"sumo_config_step %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.step); // 1000ms
LOG_I(EMU,"sumo_config_hport %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hport);
} else if(!strcmp((char *) event.key, "UE_mobility_type")) {
LOG_I(EMU,"UE Mobility type %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_mobility_type.selected_option);
} else if(!strcmp((char *) event.key, "eNB_mobility_type")) {
LOG_I(EMU,"eNB Mobility type %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option);
} else if(!strcmp((char *) event.key, "grid_trip_type")) {
LOG_I(EMU,"grid_trip_type %s\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_trip_type.selected_option);
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_speed_mps")) {
LOG_I(EMU,"UE_moving_dynamics_min_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps);
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_sleep_ms")) {
LOG_I(EMU,"UE_moving_dynamics_min_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms);
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_sleep_ms")) {
LOG_I(EMU,"UE_moving_dynamics_max_sleep_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_sleep_ms);
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_speed_mps")) {
LOG_I(EMU,"UE_moving_dynamics_max_speed_mps %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_speed_mps);
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_journey_time_ms")) {
LOG_I(EMU,"UE_moving_dynamics_min_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_journey_time_ms);
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_journey_time_ms")) {
LOG_I(EMU,"UE_moving_dynamics_max_journey_time_ms %G\n",oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms);
} else if(!strcmp((char *) event.key, "grid_map_horizontal_grid")) {
LOG_I(EMU,"grid_map_horizontal_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid);
} else if(!strcmp((char *) event.key, "grid_map_vertical_grid")) {
LOG_I(EMU,"grid_map_vertical_grid %G\n",oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.vertical_grid);
} else if(!strcmp((char *) event.key, "UE_initial_distribution_selected_option")) {
LOG_I(EMU,"UE_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.UE_mobility.UE_initial_distribution.selected_option);
} else if(!strcmp((char *) event.key, "random_UE_distribution_number_of_nodes")) {
LOG_I(EMU,"random_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes);
} else if(!strcmp((char *) event.key, "concentrated_UE_distribution_number_of_nodes")) {
LOG_I(EMU,"concentrated_UE_distribution_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.concentrated_UE_distribution.number_of_nodes);
} else if(!strcmp((char *) event.key, "random_grid_number_of_nodes")) {
LOG_I(EMU,"random_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.random_grid.number_of_nodes);
} else if(!strcmp((char *) event.key, "order_grid_number_of_nodes")) {
LOG_I(EMU,"border_grid_number_of_nodes %d\n",oai_emulation->topology_config.mobility.UE_mobility.grid_UE_distribution.border_grid.number_of_nodes);
} else if(!strcmp((char *) event.key, "eNB_initial_distribution_selected_option")) {
LOG_I(EMU,"eNB_initial_distribution_selected_option %s\n",oai_emulation->topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option);
} else if(!strcmp((char *) event.key, "random_eNB_distribution_number_of_cells")) {
LOG_I(EMU,"random_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells);
} else if(!strcmp((char *) event.key, "hexagonal_eNB_distribution_number_of_cells")) {
LOG_I(EMU,"hexagonal_eNB_distribution_number_of_cells %d\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells);
} else if(!strcmp((char *) event.key, "hexagonal_eNB_distribution_inter_eNB_distance_km")) {
LOG_I(EMU,"hexagonal_eNB_distribution_inter_eNB_distance_km %G\n",oai_emulation->topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km);
} else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_x")) {
LOG_I(EMU,"grid_eNB_distribution_number_of_grid_x %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_x);
} else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_y")) {
LOG_I(EMU,"grid_eNB_distribution_number_of_grid_y %d\n",oai_emulation->topology_config.mobility.eNB_mobility.grid_eNB_distribution.number_of_grid_y);
} else if(!strcmp((char *) event.key, "eNB_mobility_trace_config_trace_mobility_file")) {
LOG_I(EMU,"eNB_trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file);
} else if(!strcmp((char *) event.key, "UE_mobility_trace_config_trace_mobility_file")) {
LOG_I(EMU,"UE_trace_config_trace_mobility_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.trace_config.trace_mobility_file);
} else if(!strcmp((char *) event.key, "sumo_config_command")) {
LOG_I(EMU,"sumo_config_command %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.command);
} else if(!strcmp((char *) event.key, "sumo_config_file")) {
LOG_I(EMU,"sumo_config_file %s\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.file);
} else if(!strcmp((char *) event.key, "sumo_config_start")) {
LOG_I(EMU,"sumo_config_start %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.start);
} else if(!strcmp((char *) event.key, "sumo_config_end")) {
LOG_I(EMU,"sumo_config_end %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.end);
} else if(!strcmp((char *) event.key, "sumo_config_step")) {
LOG_I(EMU,"sumo_config_step %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.step); // 1000ms
} else if(!strcmp((char *) event.key, "sumo_config_hport")) {
LOG_I(EMU,"sumo_config_hport %d\n",oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hport);
}
} else if(event.optype == WRITE && event.value !=NULL) {
Mobility * new_mobility_model = (Mobility *) event.value;
if(event.key == NULL) {
//global model update
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 {
// event.key is not NULL
if(!strcmp((char *) event.key, "UE_mobility_type")) {
sprintf(oai_emulation->topology_config.mobility.UE_mobility.UE_mobility_type.selected_option, "%s", new_mobility_model->UE_mobility.UE_mobility_type.selected_option);
} else if(!strcmp((char *) event.key, "eNB_mobility_type")) {
sprintf(oai_emulation->topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option, "%s", new_mobility_model->eNB_mobility.eNB_mobility_type.selected_option);
} else if(!strcmp((char *) event.key, "grid_trip_type")) {
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);
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_speed_mps")) {
oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_speed_mps = new_mobility_model->UE_mobility.UE_moving_dynamics.min_speed_mps;
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_sleep_ms")) {
oai_emulation->topology_config.mobility.UE_mobility.UE_moving_dynamics.min_sleep_ms = new_mobility_model->UE_mobility.UE_moving_dynamics.min_sleep_ms;
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_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;
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_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;
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_min_journey_time_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;
} else if(!strcmp((char *) event.key, "UE_moving_dynamics_max_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;
} else if(!strcmp((char *) event.key, "grid_map_horizontal_grid")) {
oai_emulation->topology_config.mobility.UE_mobility.grid_walk.grid_map.horizontal_grid = new_mobility_model->UE_mobility.grid_walk.grid_map.horizontal_grid;
} else if(!strcmp((char *) event.key, "grid_map_vertical_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;
} else if(!strcmp((char *) event.key, "UE_initial_distribution_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);
} else if(!strcmp((char *) event.key, "random_UE_distribution_number_of_nodes")) {
oai_emulation->topology_config.mobility.UE_mobility.random_UE_distribution.number_of_nodes = new_mobility_model->UE_mobility.random_UE_distribution.number_of_nodes;
} else if(!strcmp((char *) event.key, "concentrated_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;
} else if(!strcmp((char *) event.key, "random_grid_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;
} else if(!strcmp((char *) event.key, "border_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;
} else if(!strcmp((char *) event.key, "eNB_initial_distribution_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);
} else if(!strcmp((char *) event.key, "random_eNB_distribution_number_of_cells")) {
oai_emulation->topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = new_mobility_model->eNB_mobility.random_eNB_distribution.number_of_cells;
} else if(!strcmp((char *) event.key, "hexagonal_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;
} else if(!strcmp((char *) event.key, "hexagonal_eNB_distribution_inter_eNB_distance_km")) {
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;
} else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_x")) {
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;
} else if(!strcmp((char *) event.key, "grid_eNB_distribution_number_of_grid_y")) {
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;
} else if(!strcmp((char *) event.key, "eNB_mobility_trace_config_trace_mobility_file")) {
sprintf(oai_emulation->topology_config.mobility.eNB_mobility.trace_config.trace_mobility_file,"static_1enb.tr");
} else if(!strcmp((char *) event.key, "UE_mobility_trace_config_trace_mobility_file")) {
sprintf(oai_emulation->topology_config.mobility.UE_mobility.trace_config.trace_mobility_file,"static_2ues.tr");
} else if(!strcmp((char *) event.key, "sumo_config_command")) {
sprintf(oai_emulation->topology_config.mobility.UE_mobility.sumo_config.command,"sumo");
} else if(!strcmp((char *) event.key, "sumo_config_file")) {
snprintf( oai_emulation->topology_config.mobility.UE_mobility.sumo_config.file, 256, "%s/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg", getenv("OPENAIR2_DIR") );
} else if(!strcmp((char *) event.key, "sumo_config_start")) {
oai_emulation->topology_config.mobility.UE_mobility.sumo_config.start = new_mobility_model->UE_mobility.sumo_config.start;
} else if(!strcmp((char *) event.key, "sumo_config_end")) {
oai_emulation->topology_config.mobility.UE_mobility.sumo_config.end = new_mobility_model->UE_mobility.sumo_config.end;
} else if(!strcmp((char *) event.key, "sumo_config_step")) {
oai_emulation->topology_config.mobility.UE_mobility.sumo_config.step = new_mobility_model->UE_mobility.sumo_config.step;
} else if(!strcmp((char *) event.key, "sumo_config_hport")) {
oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hport = new_mobility_model->UE_mobility.sumo_config.hport;
} else if(!strcmp((char *) event.key, "sumo_config.hip")) {
sprintf(oai_emulation->topology_config.mobility.UE_mobility.sumo_config.hip,"127.0.1.1");
}
}
}
}
void update_app_model(Event_t event)
{
printf("\n\n\nA NEW APP MODEL\n\n\n");
OAI_Emulation *oai_emulation;
oai_emulation = get_OAI_emulation();
int i=0;
if(event.optype == READ) {
if(event.key == NULL) {
//print all values
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"predefined_traffic.source_id %d: %s\n",i,oai_emulation->application_config.predefined_traffic.source_id[i]);
LOG_I(EMU,"predefined_traffic.background %d %s\n",i,oai_emulation->application_config.predefined_traffic.background[i]);
LOG_I(EMU,"predefined_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.predefined_traffic.aggregation_level[i]);
if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL)
LOG_I(EMU,"predefined_traffic.destination_id %d %s\n",i,oai_emulation->application_config.predefined_traffic.destination_id[i]);
if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL)
LOG_I(EMU,"customized_traffic.source_id %d %s\n",i,oai_emulation->application_config.customized_traffic.source_id[i]);
if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL)
LOG_I(EMU,"customized_traffic.destination_id %d %s\n",i,oai_emulation->application_config.customized_traffic.destination_id[i]);
if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL)
LOG_I(EMU,"customized_traffic.transport_protocol %d %s\n",i,oai_emulation->application_config.customized_traffic.transport_protocol[i]);
if(oai_emulation->application_config.customized_traffic.background[i]!=NULL)
LOG_I(EMU,"customized_traffic.background %d %s\n",i,oai_emulation->application_config.customized_traffic.background[i]);
if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL)
LOG_I(EMU,"customized_traffic.ip_version %d %s\n",i,oai_emulation->application_config.customized_traffic.ip_version[i]);
LOG_I(EMU,"customized_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.customized_traffic.aggregation_level[i]);
if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL)
LOG_I(EMU,"customized_traffic.idt_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.idt_dist[i]);
LOG_I(EMU,"customized_traffic.idt_min_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_min_ms[i]);
LOG_I(EMU,"customized_traffic.idt_max_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_max_ms[i]);
LOG_I(EMU,"customized_traffic.idt_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_standard_deviation[i]);
LOG_I(EMU,"customized_traffic.idt_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_lambda[i]);
LOG_I(EMU,"customized_traffic.size_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.size_dist[i]);
LOG_I(EMU,"customized_traffic.size_min_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_min_byte[i]);//
LOG_I(EMU,"customized_traffic.size_max_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_max_byte[i]);//
LOG_I(EMU,"customized_traffic.size_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.size_standard_deviation[i]);//
LOG_I(EMU,"customized_traffic.size_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.size_lambda[i]);
LOG_I(EMU,"ustomized_traffic.stream %d %d\n",i,oai_emulation->application_config.customized_traffic.stream[i]);
LOG_I(EMU,"customized_traffic.destination_port %d %d\n",i,oai_emulation->application_config.customized_traffic.destination_port[i]);
LOG_I(EMU,"customized_traffic.prob_off_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pu[i]);
LOG_I(EMU,"customized_traffic.prob_off_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_ed[i]);
LOG_I(EMU,"customized_traffic.prob_off_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pe[i]);
LOG_I(EMU,"customized_traffic.prob_pu_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_ed[i]);//
LOG_I(EMU,"customized_traffic.prob_pu_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_pe[i]);
LOG_I(EMU,"customized_traffic.prob_ed_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pe[i]);
LOG_I(EMU,"customized_traffic.prob_ed_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pu[i]);
LOG_I(EMU,"customized_traffic.holding_time_off_ed %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_ed[i]);
LOG_I(EMU,"customized_traffic.holding_time_off_pu %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pu[i]);
LOG_I(EMU,"customized_traffic.holding_time_off_pe %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pe[i]);
LOG_I(EMU,"customized_traffic.holding_time_pe_off %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_pe_off[i]);
LOG_I(EMU,"customized_traffic.pu_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.pu_size_pkts[i]);
LOG_I(EMU,"customized_traffic.ed_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.ed_size_pkts[i]);
}
} else if(!strcmp((char *) event.key, "predefined_traffic.source_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"predefined_traffic.source_id %d: %s\n",i,oai_emulation->application_config.predefined_traffic.source_id[i]);
}
} else if(!strcmp((char *) event.key, "predefined_traffic.background")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"predefined_traffic.background %d %s\n",i,oai_emulation->application_config.predefined_traffic.background[i]);
}
} else if(!strcmp((char *) event.key, "predefined_traffic.aggregation_level")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"predefined_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.predefined_traffic.aggregation_level[i]);
}
} else if(!strcmp((char *) event.key, "predefined_traffic.destination_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL)
LOG_I(EMU,"predefined_traffic.destination_id %d %s\n",i,oai_emulation->application_config.predefined_traffic.destination_id[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.source_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL)
LOG_I(EMU,"customized_traffic.source_id %d %s\n",i,oai_emulation->application_config.customized_traffic.source_id[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.destination_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL)
LOG_I(EMU,"customized_traffic.destination_id %d %s\n",i,oai_emulation->application_config.customized_traffic.destination_id[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.transport_protocol")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL)
LOG_I(EMU,"customized_traffic.transport_protocol %d %s\n",i,oai_emulation->application_config.customized_traffic.transport_protocol[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.background")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.background[i]!=NULL)
LOG_I(EMU,"customized_traffic.background %d %s\n",i,oai_emulation->application_config.customized_traffic.background[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.ip_version")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL)
LOG_I(EMU,"customized_traffic.ip_version %d %s\n",i,oai_emulation->application_config.customized_traffic.ip_version[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.aggregation_level")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.aggregation_level %d %d\n",i,oai_emulation->application_config.customized_traffic.aggregation_level[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.idt_dist")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL)
LOG_I(EMU,"customized_traffic.idt_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.idt_dist[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.idt_min_ms")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.idt_min_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_min_ms[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.idt_max_ms")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.idt_max_ms %d %d\n",i,oai_emulation->application_config.customized_traffic.idt_max_ms[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.idt_standard_deviation")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.idt_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_standard_deviation[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.idt_lambda")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.idt_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.idt_lambda[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.size_dist")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.size_dist %d %s\n",i,oai_emulation->application_config.customized_traffic.size_dist[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.size_min_byte")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.size_min_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_min_byte[i]);//
}
} else if(!strcmp((char *) event.key, "customized_traffic.size_min_byte")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.size_min_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_min_byte[i]);//
}
} else if(!strcmp((char *) event.key, "customized_traffic.size_max_byte")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.size_max_byte %d %d\n",i,oai_emulation->application_config.customized_traffic.size_max_byte[i]);//
}
} else if(!strcmp((char *) event.key, "customized_traffic.size_standard_deviation")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.size_standard_deviation %d %G\n",i,oai_emulation->application_config.customized_traffic.size_standard_deviation[i]);//
}
} else if(!strcmp((char *) event.key, "customized_traffic.size_lambda")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.size_lambda %d %G\n",i,oai_emulation->application_config.customized_traffic.size_lambda[i]);
}
} else if(!strcmp((char *) event.key, "ustomized_traffic.stream")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"ustomized_traffic.stream %d %d\n",i,oai_emulation->application_config.customized_traffic.stream[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.destination_port")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.destination_port %d %d\n",i,oai_emulation->application_config.customized_traffic.destination_port[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.prob_off_pu")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.prob_off_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pu[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.prob_off_ed")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.prob_off_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_ed[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.prob_off_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.prob_off_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_off_pe[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.prob_pu_ed")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.prob_pu_ed %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_ed[i]);//
}
} else if(!strcmp((char *) event.key, "customized_traffic.prob_pu_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.prob_pu_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_pu_pe[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.prob_ed_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.prob_ed_pe %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pe[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.prob_ed_pu")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.prob_ed_pu %d %G\n",i,oai_emulation->application_config.customized_traffic.prob_ed_pu[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_ed")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.holding_time_off_ed %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_ed[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_pu")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.holding_time_off_pu %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pu[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.holding_time_off_pe")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.holding_time_off_pe %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_off_pe[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.holding_time_pe_off")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.holding_time_pe_off %d %d\n",i,oai_emulation->application_config.customized_traffic.holding_time_pe_off[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.pu_size_pkts")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.pu_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.pu_size_pkts[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.ed_size_pkts")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
LOG_I(EMU,"customized_traffic.ed_size_pkts %d %d\n",i,oai_emulation->application_config.customized_traffic.ed_size_pkts[i]);
}
}
} else if(event.optype == WRITE && event.value!=NULL) {
Application_Config * new_app_config = (Application_Config *) event.value;
if(event.key == NULL) {
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_app_config->predefined_traffic.source_id[i]);
// LOG_I(EMU,"predefined_traffic.application_type %d: %s\n",i,oai_emulation->application_config.predefined_traffic.application_type[i]);
sprintf(oai_emulation->application_config.predefined_traffic.background[i],"%s",new_app_config->predefined_traffic.background[i]);
oai_emulation->application_config.predefined_traffic.aggregation_level[i] = new_app_config->predefined_traffic.aggregation_level[i];
if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL)
sprintf(oai_emulation->application_config.predefined_traffic.destination_id[i],"%s",new_app_config->predefined_traffic.destination_id[i]);
if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.source_id[i],"%s",new_app_config->customized_traffic.source_id[i]);
if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.destination_id[i],"%s",new_app_config->customized_traffic.destination_id[i]);
if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.transport_protocol[i],"%s",new_app_config->customized_traffic.transport_protocol[i]);
if(oai_emulation->application_config.customized_traffic.background[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.background[i],"%s",new_app_config->customized_traffic.background[i]);
if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.ip_version[i],"%s",new_app_config->customized_traffic.ip_version[i]);
oai_emulation->application_config.customized_traffic.aggregation_level[i] = new_app_config->customized_traffic.aggregation_level[i];
if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.idt_dist[i],"%s",new_app_config->customized_traffic.idt_dist[i]);
oai_emulation->application_config.customized_traffic.idt_min_ms[i] = new_app_config->customized_traffic.idt_min_ms[i];
oai_emulation->application_config.customized_traffic.idt_max_ms[i] = new_app_config->customized_traffic.idt_max_ms[i];
oai_emulation->application_config.customized_traffic.idt_standard_deviation[i] = new_app_config->customized_traffic.idt_standard_deviation[i];
oai_emulation->application_config.customized_traffic.idt_lambda[i] = new_app_config->customized_traffic.idt_lambda[i];
sprintf(oai_emulation->application_config.customized_traffic.size_dist[i],"%s",new_app_config->customized_traffic.size_dist[i]);
oai_emulation->application_config.customized_traffic.size_min_byte[i] = new_app_config->customized_traffic.size_min_byte[i];//
oai_emulation->application_config.customized_traffic.size_max_byte[i] = new_app_config->customized_traffic.size_max_byte[i];//
oai_emulation->application_config.customized_traffic.size_standard_deviation[i] = new_app_config->customized_traffic.size_standard_deviation[i];//
oai_emulation->application_config.customized_traffic.size_lambda[i] = new_app_config->customized_traffic.size_lambda[i];
oai_emulation->application_config.customized_traffic.stream[i] = new_app_config->customized_traffic.stream[i];
oai_emulation->application_config.customized_traffic.destination_port[i] = new_app_config->customized_traffic.destination_port[i];
oai_emulation->application_config.customized_traffic.prob_off_pu[i] = new_app_config->customized_traffic.prob_off_pu[i];
oai_emulation->application_config.customized_traffic.prob_off_ed[i] = new_app_config->customized_traffic.prob_off_ed[i];
oai_emulation->application_config.customized_traffic.prob_off_pe[i] = new_app_config->customized_traffic.prob_off_pe[i];
oai_emulation->application_config.customized_traffic.prob_pu_ed[i] = new_app_config->customized_traffic.prob_pu_ed[i];//
oai_emulation->application_config.customized_traffic.prob_pu_pe[i] = new_app_config->customized_traffic.prob_pu_pe[i];
oai_emulation->application_config.customized_traffic.prob_ed_pe[i] = new_app_config->customized_traffic.prob_ed_pe[i];
oai_emulation->application_config.customized_traffic.prob_ed_pu[i] = new_app_config->customized_traffic.prob_ed_pu[i];
oai_emulation->application_config.customized_traffic.holding_time_off_ed[i] = new_app_config->customized_traffic.holding_time_off_ed[i];
oai_emulation->application_config.customized_traffic.holding_time_off_pu[i] = new_app_config->customized_traffic.holding_time_off_pu[i];
oai_emulation->application_config.customized_traffic.holding_time_off_pe[i] = new_app_config->customized_traffic.holding_time_off_pe[i];
oai_emulation->application_config.customized_traffic.holding_time_pe_off[i] = new_app_config->customized_traffic.holding_time_pe_off[i];
oai_emulation->application_config.customized_traffic.pu_size_pkts[i] = new_app_config->customized_traffic.pu_size_pkts[i];
oai_emulation->application_config.customized_traffic.ed_size_pkts[i] = new_app_config->customized_traffic.ed_size_pkts[i];
}
} else if(!strcmp((char *) event.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",new_app_config->predefined_traffic.source_id[i]);
}
} else if(!strcmp((char *) event.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",new_app_config->predefined_traffic.background[i]);
}
} else if(!strcmp((char *) event.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] = new_app_config->predefined_traffic.aggregation_level[i];
}
} else if(!strcmp((char *) event.key, "predefined_traffic.destination_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.predefined_traffic.destination_id[i]!=NULL)
sprintf(oai_emulation->application_config.predefined_traffic.destination_id[i],"%s",new_app_config->predefined_traffic.destination_id[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.source_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.source_id[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.source_id[i],"%s",new_app_config->customized_traffic.source_id[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.destination_id")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.destination_id[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.destination_id[i],"%s",new_app_config->customized_traffic.destination_id[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.transport_protocol")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.transport_protocol[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.transport_protocol[i],"%s",new_app_config->customized_traffic.transport_protocol[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.background")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.background[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.background[i],"%s",new_app_config->customized_traffic.background[i]);
}
} else if(!strcmp((char *) event.key, "customized_traffic.ip_version")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.ip_version[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.ip_version[i],"%s",*((char **) event.value));
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.aggregation_level[i];
}
} else if(!strcmp((char *) event.key, "customized_traffic.idt_dist")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
if(oai_emulation->application_config.customized_traffic.idt_dist[i]!=NULL)
sprintf(oai_emulation->application_config.customized_traffic.idt_dist[i],"%s",new_app_config->customized_traffic.idt_dist[i]);
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.idt_min_ms[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.idt_max_ms[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.idt_standard_deviation[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.idt_lambda[i];
}
} else if(!strcmp((char *) event.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",new_app_config->customized_traffic.size_dist[i]);
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.size_min_byte[i];//
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.size_max_byte[i];//
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.size_standard_deviation[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.size_lambda[i];
}
} else if(!strcmp((char *) event.key, "ustomized_traffic.stream")) {
for (i = 0; i < NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++) {
oai_emulation->application_config.customized_traffic.stream[i] = new_app_config->customized_traffic.stream[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.destination_port[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.prob_off_pu[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.prob_off_ed[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.prob_off_pe[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.prob_pu_ed[i];//
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.prob_pu_pe[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.prob_ed_pe[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.prob_ed_pu[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.holding_time_off_ed[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.holding_time_off_pu[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.holding_time_off_pe[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.holding_time_pe_off[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.pu_size_pkts[i];
}
} else if(!strcmp((char *) event.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] = new_app_config->customized_traffic.ed_size_pkts[i];
}
}
}
}
void update_emu_model(Event_t event)
{
// Emulation_Config emulation_config; /*!< \brief Emulation configuration */
printf("\n\n\nA NEW EMU MODEL\n\n\n");
OAI_Emulation *oai_emulation;
oai_emulation = get_OAI_emulation();
if(event.optype == READ) {
if(event.key == NULL) {
LOG_I(EMU,"emulation_time_ms %G\n",oai_emulation->emulation_config.emulation_time_ms);
LOG_I(EMU,"curve %s\n",oai_emulation->emulation_config.curve);
LOG_I(EMU,"brackground_stats %s\n",oai_emulation->emulation_config.background_stats);
//performance metrics
LOG_I(EMU,"performance_metrics.throughput %s\n",oai_emulation->emulation_config.performance_metrics.throughput);
LOG_I(EMU,"performance_metrics.latency %s\n",oai_emulation->emulation_config.performance_metrics.latency);
LOG_I(EMU,"performance_metrics.loss_rate %s\n",oai_emulation->emulation_config.performance_metrics.loss_rate);
LOG_I(EMU,"performance_metrics.owd_radio_access %s\n",oai_emulation->emulation_config.performance_metrics.owd_radio_access);
LOG_I(EMU,"performance_metrics.signalling_overhead %d\n",oai_emulation->emulation_config.performance_metrics.signalling_overhead);
//Layer
LOG_I(EMU,"layer.phy %d\n",oai_emulation->emulation_config.layer.phy);
LOG_I(EMU,"layer.mac %d\n",oai_emulation->emulation_config.layer.mac);
LOG_I(EMU,"layer.rlc %d\n",oai_emulation->emulation_config.layer.rlc);
LOG_I(EMU,"layer.rrc %d\n",oai_emulation->emulation_config.layer.rrc);
LOG_I(EMU,"layer.pdcp %d\n",oai_emulation->emulation_config.layer.pdcp);
LOG_I(EMU,"layer.omg %d\n",oai_emulation->emulation_config.layer.omg);
LOG_I(EMU,"layer.emu %d\n",oai_emulation->emulation_config.layer.emu);
LOG_I(EMU,"layer.otg %d\n",oai_emulation->emulation_config.layer.otg);
//Log_emu
LOG_I(EMU,"log_emu.level %s\n",oai_emulation->emulation_config.log_emu.level);
LOG_I(EMU,"log_emu.verbosity %s\n",oai_emulation->emulation_config.log_emu.verbosity);
LOG_I(EMU,"log_emu.interval %d\n",oai_emulation->emulation_config.log_emu.interval);
//Packet_trace
LOG_I(EMU,"packet_trace.enabled %d\n",oai_emulation->emulation_config.packet_trace.enabled);
LOG_I(EMU,"packet_trace.start_time %u\n",oai_emulation->emulation_config.packet_trace.start_time);
LOG_I(EMU,"packet_trace.end_time %u\n",oai_emulation->emulation_config.packet_trace.end_time);
//Seed
LOG_I(EMU,"seed.value %d\n",oai_emulation->emulation_config.seed.value);
} else if (!strcmp((char *) event.key, "emulation_time_ms")) {
LOG_I(EMU,"emulation_time_ms %G\n",oai_emulation->emulation_config.emulation_time_ms);
} else if (!strcmp((char *) event.key, "curve")) {
LOG_I(EMU,"curve %s\n",oai_emulation->emulation_config.curve);
} else if (!strcmp((char *) event.key, "brackground_stats")) {
LOG_I(EMU,"brackground_stats %s\n",oai_emulation->emulation_config.background_stats);
} else if (!strcmp((char *) event.key, "performance_metrics.throughput")) {
LOG_I(EMU,"performance_metrics.throughput %s\n",oai_emulation->emulation_config.performance_metrics.throughput);
} else if (!strcmp((char *) event.key, "performance_metrics.latency")) {
LOG_I(EMU,"performance_metrics.latency %s\n",oai_emulation->emulation_config.performance_metrics.latency);
} else if (!strcmp((char *) event.key, "performance_metrics.loss_rate")) {
LOG_I(EMU,"performance_metrics.loss_rate %s\n",oai_emulation->emulation_config.performance_metrics.loss_rate);
} else if (!strcmp((char *) event.key, "performance_metrics.owd_radio_access")) {
LOG_I(EMU,"performance_metrics.owd_radio_access %s\n",oai_emulation->emulation_config.performance_metrics.owd_radio_access);
} else if (!strcmp((char *) event.key, "performance_metrics.signalling_overhead")) {
LOG_I(EMU,"performance_metrics.signalling_overhead %d\n",oai_emulation->emulation_config.performance_metrics.signalling_overhead);
} else if (!strcmp((char *) event.key, "layer.phy")) {
LOG_I(EMU,"layer.phy %d\n",oai_emulation->emulation_config.layer.phy);
} else if (!strcmp((char *) event.key, "layer.mac")) {
LOG_I(EMU,"layer.mac %d\n",oai_emulation->emulation_config.layer.mac);
} else if (!strcmp((char *) event.key, "layer.rlc")) {
LOG_I(EMU,"layer.rlc %d\n",oai_emulation->emulation_config.layer.rlc);
} else if (!strcmp((char *) event.key, "layer.rrc")) {
LOG_I(EMU,"layer.rrc %d\n",oai_emulation->emulation_config.layer.rrc);
} else if (!strcmp((char *) event.key, "layer.pdcp")) {
LOG_I(EMU,"layer.pdcp %d\n",oai_emulation->emulation_config.layer.pdcp);
} else if (!strcmp((char *) event.key, "layer.omg")) {
LOG_I(EMU,"layer.omg %d\n",oai_emulation->emulation_config.layer.omg);
} else if (!strcmp((char *) event.key, "layer.emu")) {
LOG_I(EMU,"layer.emu %d\n",oai_emulation->emulation_config.layer.emu);
} else if (!strcmp((char *) event.key, "layer.otg")) {
LOG_I(EMU,"layer.otg %d\n",oai_emulation->emulation_config.layer.otg);
} else if (!strcmp((char *) event.key, "log_emu.level")) {
LOG_I(EMU,"log_emu.level %s\n",oai_emulation->emulation_config.log_emu.level);
} else if (!strcmp((char *) event.key, "log_emu.verbosity")) {
LOG_I(EMU,"log_emu.verbosity %s\n",oai_emulation->emulation_config.log_emu.verbosity);
} else if (!strcmp((char *) event.key, "log_emu.interval")) {
LOG_I(EMU,"log_emu.interval %d\n",oai_emulation->emulation_config.log_emu.interval);
} else if (!strcmp((char *) event.key, "packet_trace.enabled")) {
LOG_I(EMU,"packet_trace.enabled %d\n",oai_emulation->emulation_config.packet_trace.enabled);
} else if (!strcmp((char *) event.key, "packet_trace.start_time")) {
LOG_I(EMU,"packet_trace.start_time %u\n",oai_emulation->emulation_config.packet_trace.start_time);
} else if (!strcmp((char *) event.key, "packet_trace.end_time")) {
LOG_I(EMU,"packet_trace.end_time %u\n",oai_emulation->emulation_config.packet_trace.end_time);
} else if (!strcmp((char *) event.key, "customized_traffic_ed_size_pkts")) {
LOG_I(EMU,"seed.value %d\n",oai_emulation->emulation_config.seed.value);
}
} else if(event.optype == WRITE && event.value!=NULL) {
Emulation_Config * new_emu_config = (Emulation_Config *) event.value;
if(event.key==NULL) {
//update all parameters
oai_emulation->emulation_config.emulation_time_ms = new_emu_config->emulation_time_ms;
sprintf(oai_emulation->emulation_config.curve,"%s",new_emu_config->curve);
sprintf(oai_emulation->emulation_config.background_stats,"%s",new_emu_config->background_stats);
//performance metrics
sprintf(oai_emulation->emulation_config.performance_metrics.throughput,"%s",new_emu_config->performance_metrics.throughput);
sprintf(oai_emulation->emulation_config.performance_metrics.latency,"%s",new_emu_config->performance_metrics.latency);
sprintf(oai_emulation->emulation_config.performance_metrics.loss_rate,"%s",new_emu_config->performance_metrics.loss_rate);
sprintf(oai_emulation->emulation_config.performance_metrics.owd_radio_access,"%s",new_emu_config->performance_metrics.owd_radio_access);
oai_emulation->emulation_config.performance_metrics.signalling_overhead = new_emu_config->performance_metrics.signalling_overhead;
//Layer
oai_emulation->emulation_config.layer.phy = new_emu_config->layer.phy;
oai_emulation->emulation_config.layer.mac = new_emu_config->layer.mac;
oai_emulation->emulation_config.layer.rlc = new_emu_config->layer.rlc;
oai_emulation->emulation_config.layer.rrc = new_emu_config->layer.rrc;
oai_emulation->emulation_config.layer.pdcp = new_emu_config->layer.pdcp;
oai_emulation->emulation_config.layer.omg = new_emu_config->layer.omg;
oai_emulation->emulation_config.layer.emu = new_emu_config->layer.emu;
oai_emulation->emulation_config.layer.otg = new_emu_config->layer.otg;
//Log_emu
sprintf(oai_emulation->emulation_config.log_emu.level,"%s",new_emu_config->log_emu.level);
sprintf(oai_emulation->emulation_config.log_emu.verbosity,"%s",new_emu_config->log_emu.verbosity);
oai_emulation->emulation_config.log_emu.interval = new_emu_config->log_emu.interval;
//Packet_trace
oai_emulation->emulation_config.packet_trace.enabled = new_emu_config->packet_trace.enabled ;
oai_emulation->emulation_config.packet_trace.start_time = new_emu_config->packet_trace.start_time;
oai_emulation->emulation_config.packet_trace.end_time = new_emu_config->packet_trace.end_time;
//Seed
oai_emulation->emulation_config.seed.value = new_emu_config->packet_trace.end_time;
} else if(event.key != NULL) {
if (!strcmp((char *) event.key, "emulation_time_ms")) {
oai_emulation->emulation_config.emulation_time_ms = new_emu_config->emulation_time_ms;
} else if (!strcmp((char *) event.key, "curve")) {
sprintf(oai_emulation->emulation_config.curve,"%s",new_emu_config->curve);
} else if (!strcmp((char *) event.key, "brackground_stats")) {
sprintf(oai_emulation->emulation_config.background_stats,"%s",new_emu_config->background_stats);
} else if (!strcmp((char *) event.key, "performance_metrics.throughput")) {
sprintf(oai_emulation->emulation_config.performance_metrics.throughput,"%s",new_emu_config->performance_metrics.throughput);
} else if (!strcmp((char *) event.key, "performance_metrics.latency")) {
sprintf(oai_emulation->emulation_config.performance_metrics.latency,"%s",new_emu_config->performance_metrics.latency);
} else if (!strcmp((char *) event.key, "performance_metrics.loss_rate")) {
sprintf(oai_emulation->emulation_config.performance_metrics.loss_rate,"%s",new_emu_config->performance_metrics.loss_rate);
} else if (!strcmp((char *) event.key, "performance_metrics.owd_radio_access")) {
sprintf(oai_emulation->emulation_config.performance_metrics.owd_radio_access,"%s",new_emu_config->performance_metrics.owd_radio_access);
} else if (!strcmp((char *) event.key, "performance_metrics.signalling_overhead")) {
oai_emulation->emulation_config.performance_metrics.signalling_overhead = new_emu_config->performance_metrics.signalling_overhead;
} else if (!strcmp((char *) event.key, "layer.phy")) {
oai_emulation->emulation_config.layer.phy = new_emu_config->layer.phy;
} else if (!strcmp((char *) event.key, "layer.mac")) {
oai_emulation->emulation_config.layer.mac = new_emu_config->layer.mac;
} else if (!strcmp((char *) event.key, "layer.rlc")) {
oai_emulation->emulation_config.layer.rlc = new_emu_config->layer.rlc;
} else if (!strcmp((char *) event.key, "layer.rrc")) {
oai_emulation->emulation_config.layer.rrc = new_emu_config->layer.rrc;
} else if (!strcmp((char *) event.key, "layer.pdcp")) {
oai_emulation->emulation_config.layer.pdcp = new_emu_config->layer.pdcp;
} else if (!strcmp((char *) event.key, "layer.omg")) {
oai_emulation->emulation_config.layer.omg = new_emu_config->layer.omg;
} else if (!strcmp((char *) event.key, "layer.emu")) {
oai_emulation->emulation_config.layer.emu = new_emu_config->layer.emu;
} else if (!strcmp((char *) event.key, "layer.otg")) {
oai_emulation->emulation_config.layer.otg = new_emu_config->layer.otg;
} else if (!strcmp((char *) event.key, "log_emu.level")) {
sprintf(oai_emulation->emulation_config.log_emu.level,"%s",new_emu_config->log_emu.level);
} else if (!strcmp((char *) event.key, "log_emu.verbosity")) {
sprintf(oai_emulation->emulation_config.log_emu.verbosity,"%s",new_emu_config->log_emu.verbosity);
} else if (!strcmp((char *) event.key, "log_emu.interval")) {
oai_emulation->emulation_config.log_emu.interval = new_emu_config->log_emu.interval;
} else if (!strcmp((char *) event.key, "packet_trace.enabled")) {
oai_emulation->emulation_config.packet_trace.enabled = new_emu_config->packet_trace.enabled ;
} else if (!strcmp((char *) event.key, "packet_trace.start_time")) {
oai_emulation->emulation_config.packet_trace.start_time = new_emu_config->packet_trace.start_time;
} else if (!strcmp((char *) event.key, "packet_trace.end_time")) {
oai_emulation->emulation_config.packet_trace.end_time = new_emu_config->packet_trace.end_time;
} else if (!strcmp((char *) event.key, "customized_traffic_ed_size_pkts")) {
oai_emulation->emulation_config.seed.value = new_emu_config->packet_trace.end_time;
}
}
}
}
int validate_mac(Event_t event)
{
int i=0;
if(event.key ==NULL && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
if(event.ue == -1 && event.lcid == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(mac_config[i].DCI_aggregation_min<=0) {
return 0;
}
if(mac_config[i].DLSCH_dci_size_bits <=0) {
return 0;
}
if(mac_config[i].priority !=NULL) {
int j;
for(j=0; j<MAX_NUM_LCID; j++) {
if(mac_config[i].priority[j]<=0) {
return 0;
}
}
}
if(&mac_config[i].ul_bandwidth !=NULL) {
// faire boucle par ue puis par lcid
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
if(!(mac_config[i].ul_bandwidth[j]==6 || mac_config[i].ul_bandwidth[j]==15 || mac_config[i].ul_bandwidth[j]==25 || mac_config[i].ul_bandwidth[j]==50 || mac_config[i].ul_bandwidth[j]==75
|| mac_config[i].ul_bandwidth[j]==100))
return 0;
}
}
if(&mac_config[i].dl_bandwidth !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
if(!(mac_config[i].dl_bandwidth[j]==6 || mac_config[i].dl_bandwidth[j]==15 || mac_config[i].dl_bandwidth[j]==25 || mac_config[i].dl_bandwidth[j]==50 || mac_config[i].dl_bandwidth[j]==75
|| mac_config[i].dl_bandwidth[j]==100))
return 0;
}
}
if(&mac_config[i].min_ul_bandwidth !=NULL) {
// faire boucle par ue puis par lcid
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
if(!(mac_config[i].min_ul_bandwidth[j]==6 || mac_config[i].min_ul_bandwidth[j]==15 || mac_config[i].min_ul_bandwidth[j]==25 || mac_config[i].min_ul_bandwidth[j]==50
|| mac_config[i].min_ul_bandwidth[j]==75 || mac_config[i].min_ul_bandwidth[j]==100))
return 0;
}
}
if(&mac_config[i].min_dl_bandwidth !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
if(!(mac_config[i].min_dl_bandwidth[j]==6 || mac_config[i].min_dl_bandwidth[j]==15 || mac_config[i].min_dl_bandwidth[j]==25 || mac_config[i].min_dl_bandwidth[j]==50
|| mac_config[i].min_dl_bandwidth[j]==75 || mac_config[i].min_dl_bandwidth[j]==100))
return 0;
}
}
if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) {
if(!(mac_config[i].ue_AggregatedMaximumBitrateDL>0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000))
return 0;
}
if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) {
if(!(mac_config[i].ue_AggregatedMaximumBitrateUL>0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000))
return 0;
}
if(&mac_config[i].cqiSchedInterval !=NULL ) {
if(!(mac_config[i].cqiSchedInterval==1 || mac_config[i].cqiSchedInterval==2 || mac_config[i].cqiSchedInterval==5 || mac_config[i].cqiSchedInterval==10 || mac_config[i].cqiSchedInterval==20
|| mac_config[i].cqiSchedInterval==32 || mac_config[i].cqiSchedInterval==40 || mac_config[i].cqiSchedInterval==64 || mac_config[i].cqiSchedInterval==80 || mac_config[i].cqiSchedInterval==128
|| mac_config[i].cqiSchedInterval==160))
return 0;
}
if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) {
if(!(mac_config[i].mac_ContentionResolutionTimer==8 || mac_config[i].mac_ContentionResolutionTimer==16 || mac_config[i].mac_ContentionResolutionTimer==24
|| mac_config[i].mac_ContentionResolutionTimer==32 || mac_config[i].mac_ContentionResolutionTimer==40 || mac_config[i].mac_ContentionResolutionTimer==48
|| mac_config[i].mac_ContentionResolutionTimer==56 || mac_config[i].mac_ContentionResolutionTimer==64))
return 0;
}
if(mac_config->max_allowed_rbs !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
if(mac_config[i].max_allowed_rbs[j]<=0)
return 0;
}
}
if(mac_config[i].max_mcs !=NULL) {
int j=0;
for(j=0; j<MAX_NUM_LCID; j++) {
if(!(mac_config[i].max_mcs[j]>=0 && mac_config[i].max_mcs[j]<=27))
return 0;
}
}
}
}
}
if(event.key==NULL && event.value!=NULL && event.ue!=-1 && event.lcid!=-1) {
//check one param
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
i = event.ue;
int j = event.lcid;
if(&mac_config[i].DCI_aggregation_min) {
if(mac_config[i].DCI_aggregation_min<=0) {
return 0;
}
}
if(&mac_config[i].DLSCH_dci_size_bits !=NULL) {
if(mac_config[i].DLSCH_dci_size_bits <=0) {
return 0;
}
}
if(mac_config[i].priority !=NULL) {
if(&mac_config[i].priority[j]!=NULL) {
if(mac_config[i].priority[j]<=0) {
return 0;
}
}
}
if(&mac_config[i].ul_bandwidth !=NULL) {
if(!(mac_config[i].ul_bandwidth[j]==6 || mac_config[i].ul_bandwidth[j]==15 || mac_config[i].ul_bandwidth[j]==25 || mac_config[i].ul_bandwidth[j]==50 || mac_config[i].ul_bandwidth[j]==75
|| mac_config[i].ul_bandwidth[j]==100))
return 0;
}
if(&mac_config[i].dl_bandwidth !=NULL) {
if(!(mac_config[i].dl_bandwidth[j]==6 || mac_config[i].dl_bandwidth[j]==15 || mac_config[i].dl_bandwidth[j]==25 || mac_config[i].dl_bandwidth[j]==50 || mac_config[i].dl_bandwidth[j]==75
|| mac_config[i].dl_bandwidth[j]==100))
return 0;
}
if(&mac_config[i].min_ul_bandwidth !=NULL) {
if(!(mac_config[i].min_ul_bandwidth[j]==6 || mac_config[i].min_ul_bandwidth[j]==15 || mac_config[i].min_ul_bandwidth[j]==25 || mac_config[i].min_ul_bandwidth[j]==50
|| mac_config[i].min_ul_bandwidth[j]==75 || mac_config[i].min_ul_bandwidth[j]==100))
return 0;
}
if(&mac_config[i].min_dl_bandwidth !=NULL) {
if(!(mac_config[i].min_dl_bandwidth[j]==6 || mac_config[i].min_dl_bandwidth[j]==15 || mac_config[i].min_dl_bandwidth[j]==25 || mac_config[i].min_dl_bandwidth[j]==50
|| mac_config[i].min_dl_bandwidth[j]==75 || mac_config[i].min_dl_bandwidth[j]==100))
return 0;
}
if(&mac_config[i].ue_AggregatedMaximumBitrateDL !=NULL) {
if(!(mac_config[i].ue_AggregatedMaximumBitrateDL>0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000))
return 0;
}
if(&mac_config[i].ue_AggregatedMaximumBitrateUL !=NULL) {
if(!(mac_config[i].ue_AggregatedMaximumBitrateUL>0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000))
return 0;
}
if(&mac_config[i].cqiSchedInterval !=NULL) {
if(!(mac_config[i].cqiSchedInterval==1 || mac_config[i].cqiSchedInterval==2 || mac_config[i].cqiSchedInterval==5 || mac_config[i].cqiSchedInterval==10 || mac_config[i].cqiSchedInterval==20
|| mac_config[i].cqiSchedInterval==32 || mac_config[i].cqiSchedInterval==40 || mac_config[i].cqiSchedInterval==64 || mac_config[i].cqiSchedInterval==80 || mac_config[i].cqiSchedInterval==128
|| mac_config[i].cqiSchedInterval==160))
return 0;
}
if(&mac_config[i].mac_ContentionResolutionTimer !=NULL) {
if(!(mac_config[i].mac_ContentionResolutionTimer==8 || mac_config[i].mac_ContentionResolutionTimer==16 || mac_config[i].mac_ContentionResolutionTimer==24
|| mac_config[i].mac_ContentionResolutionTimer==32 || mac_config[i].mac_ContentionResolutionTimer==40 || mac_config[i].mac_ContentionResolutionTimer==48
|| mac_config[i].mac_ContentionResolutionTimer==56 || mac_config[i].mac_ContentionResolutionTimer==64))
return 0;
}
if(mac_config->max_allowed_rbs !=NULL) {
if(mac_config[i].max_allowed_rbs[j]<=0)
return 0;
}
if(mac_config[i].max_mcs !=NULL) {
if(!(mac_config[i].max_mcs[j]>=0 && mac_config[i].max_mcs[j]<=27))
return 0;
}
}
if(event.key!=NULL && event.value!=NULL) {
//printf("check one param");
if(!strcmp((char *) event.key, "priority") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid ==-1) {
for(i=0; i<MAX_NUM_LCID; i++) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].priority[j]!=NULL) {
if(mac_config[i].priority[j]<=0) {
return 0;
}
}
}
}
} else {
i = event.ue;
j = event.lcid;
if(mac_config[i].priority[j]<=0) {
return 0;
}
}
} else if(!strcmp((char *) event.key, "DCI_aggregation_min") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
if(event.ue == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(mac_config[i].DCI_aggregation_min<=0) {
return 0;
}
}
} else {
i=event.ue;
if(mac_config[i].DCI_aggregation_min<=0) {
return 0;
}
}
} else if(!strcmp((char *) event.key, "DLSCH_dci_size_bits") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
if(event.ue == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(mac_config[i].DLSCH_dci_size_bits <=0) {
return 0;
}
}
} else {
i = event.ue;
if(mac_config[i].DLSCH_dci_size_bits <=0) {
return 0;
}
}
} else if(!strcmp((char *) event.key, "ul_bandwidth") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
//mac_config[i] = *((Mac_config *) event.value + i);
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].ul_bandwidth[j]!=NULL) {
if(!(mac_config[i].ul_bandwidth[j]==6 || mac_config[i].ul_bandwidth[j]==15 || mac_config[i].ul_bandwidth[j]==25 || mac_config[i].ul_bandwidth[j]==50 || mac_config[i].ul_bandwidth[j]==75
|| mac_config[i].ul_bandwidth[j]==100))
return 0;
}
}
}
} else {
i = event.ue;
j = event.lcid;
if(!(mac_config[i].ul_bandwidth[j]==6 || mac_config[i].ul_bandwidth[j]==15 || mac_config[i].ul_bandwidth[j]==25 || mac_config[i].ul_bandwidth[j]==50 || mac_config[i].ul_bandwidth[j]==75
|| mac_config[i].ul_bandwidth[j]==100))
return 0;
}
} else if(!strcmp((char *) event.key, "min_ul_bandwidth") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
//mac_config[i] = *((Mac_config *) event.value + i);
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].min_ul_bandwidth[j]!=NULL) {
if(!(mac_config[i].min_ul_bandwidth[j]==6 || mac_config[i].min_ul_bandwidth[j]==15 || mac_config[i].min_ul_bandwidth[j]==25 || mac_config[i].min_ul_bandwidth[j]==50
|| mac_config[i].min_ul_bandwidth[j]==75 || mac_config[i].min_ul_bandwidth[j]==100))
return 0;
}
}
}
} else {
i = event.ue;
j = event.lcid;
if(!(mac_config[i].min_ul_bandwidth[j]==6 || mac_config[i].min_ul_bandwidth[j]==15 || mac_config[i].min_ul_bandwidth[j]==25 || mac_config[i].min_ul_bandwidth[j]==50
|| mac_config[i].min_ul_bandwidth[j]==75 || mac_config[i].min_ul_bandwidth[j]==100))
return 0;
}
} else if(!strcmp((char *) event.key, "dl_bandwidth") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(event.value + i !=NULL) {
//mac_config[i] = *((Mac_config *) event.value + i);
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].dl_bandwidth[j]!=NULL) {
if(!(mac_config[i].dl_bandwidth[j]==6 || mac_config[i].dl_bandwidth[j]==15 || mac_config[i].dl_bandwidth[j]==25 || mac_config[i].dl_bandwidth[j]==50 || mac_config[i].dl_bandwidth[j]==75
|| mac_config[i].dl_bandwidth[j]==100))
return 0;
}
}
}
}
} else {
i = event.ue;
j = event.lcid;
if(!(mac_config[i].dl_bandwidth[j]==6 || mac_config[i].dl_bandwidth[j]==15 || mac_config[i].dl_bandwidth[j]==25 || mac_config[i].dl_bandwidth[j]==50 || mac_config[i].dl_bandwidth[j]==75
|| mac_config[i].dl_bandwidth[j]==100))
return 0;
}
} else if(!strcmp((char *) event.key, "min_dl_bandwidth") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(event.value + i !=NULL) {
//mac_config[i] = *((Mac_config *) event.value + i);
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].min_dl_bandwidth[j]!=NULL) {
if(!(mac_config[i].min_dl_bandwidth[j]==6 || mac_config[i].min_dl_bandwidth[j]==15 || mac_config[i].min_dl_bandwidth[j]==25 || mac_config[i].min_dl_bandwidth[j]==50
|| mac_config[i].min_dl_bandwidth[j]==75 || mac_config[i].min_dl_bandwidth[j]==100))
return 0;
}
}
}
}
} else {
i = event.ue;
j = event.lcid;
if(!(mac_config[i].min_dl_bandwidth[j]==6 || mac_config[i].min_dl_bandwidth[j]==15 || mac_config[i].min_dl_bandwidth[j]==25 || mac_config[i].min_dl_bandwidth[j]==50
|| mac_config[i].min_dl_bandwidth[j]==75 || mac_config[i].dl_bandwidth[j]==100))
return 0;
}
} else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateDL") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
LOG_I(EMU,"ue_AggregatedMaximumBitrateDL update \n");
if(event.ue == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(!(mac_config[i].ue_AggregatedMaximumBitrateDL>0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000))
return 0;
}
} else {
i = event.ue;
if(!(mac_config[i].ue_AggregatedMaximumBitrateDL>0 && mac_config[i].ue_AggregatedMaximumBitrateDL<10000000000))
return 0;
}
} else if(!strcmp((char *) event.key, "ue_AggregatedMaximumBitrateUL") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
if(event.ue == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(!(mac_config[i].ue_AggregatedMaximumBitrateUL>0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000))
return 0;
}
} else {
i = event.ue;
if(!(mac_config[i].ue_AggregatedMaximumBitrateUL>0 && mac_config[i].ue_AggregatedMaximumBitrateUL<10000000000))
return 0;
}
} else if(!strcmp((char *) event.key, "cqiSchedInterval") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
if(event.ue == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(!(mac_config[i].cqiSchedInterval==1 || mac_config[i].cqiSchedInterval==2 || mac_config[i].cqiSchedInterval==5 || mac_config[i].cqiSchedInterval==10 || mac_config[i].cqiSchedInterval==20
|| mac_config[i].cqiSchedInterval==32 || mac_config[i].cqiSchedInterval==40 || mac_config[i].cqiSchedInterval==64 || mac_config[i].cqiSchedInterval==80 || mac_config[i].cqiSchedInterval==128
|| mac_config[i].cqiSchedInterval==160))
return 0;
}
} else {
i = event.ue;
if(!(mac_config[i].cqiSchedInterval==1 || mac_config[i].cqiSchedInterval==2 || mac_config[i].cqiSchedInterval==5 || mac_config[i].cqiSchedInterval==10 || mac_config[i].cqiSchedInterval==20
|| mac_config[i].cqiSchedInterval==32 || mac_config[i].cqiSchedInterval==40 || mac_config[i].cqiSchedInterval==64 || mac_config[i].cqiSchedInterval==80 || mac_config[i].cqiSchedInterval==128
|| mac_config[i].cqiSchedInterval==160))
return 0;
}
} else if(!strcmp((char *) event.key, "mac_ContentionResolutionTimer") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
if(event.ue == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(!(mac_config[i].mac_ContentionResolutionTimer==8 || mac_config[i].mac_ContentionResolutionTimer==16 || mac_config[i].mac_ContentionResolutionTimer==24
|| mac_config[i].mac_ContentionResolutionTimer==32 || mac_config[i].mac_ContentionResolutionTimer==40 || mac_config[i].mac_ContentionResolutionTimer==48
|| mac_config[i].mac_ContentionResolutionTimer==56 || mac_config[i].mac_ContentionResolutionTimer==64))
return 0;
}
} else {
i=event.ue;
if(!(mac_config[i].mac_ContentionResolutionTimer==8 || mac_config[i].mac_ContentionResolutionTimer==16 || mac_config[i].mac_ContentionResolutionTimer==24
|| mac_config[i].mac_ContentionResolutionTimer==32 || mac_config[i].mac_ContentionResolutionTimer==40 || mac_config[i].mac_ContentionResolutionTimer==48
|| mac_config[i].mac_ContentionResolutionTimer==56 || mac_config[i].mac_ContentionResolutionTimer==64))
return 0;
}
} else if(!strcmp((char *) event.key, "max_allowed_rbs") && event.value!=NULL && validate_mac(event)) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
if(event.value + i !=NULL) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].max_allowed_rbs[j]!=NULL) {
if(mac_config[i].max_allowed_rbs[j]<=0)
return 0;
}
}
}
}
} else {
i = event.ue;
j = event.lcid;
if(mac_config[i].max_allowed_rbs[j]<=0)
return 0;
}
} else if(!strcmp((char *) event.key, "max_mcs") && event.value!=NULL) {
Mac_config* mac_config;// = malloc(sizeof(Mac_config)*16);
mac_config = (Mac_config *) event.value;
int j=0;
if(event.ue == -1 && event.lcid == -1) {
for(i=0; i<NUMBER_OF_UE_MAX; i++) {
for(j=0; j<MAX_NUM_LCID; j++) {
if(&mac_config[i].max_mcs[j]!=NULL) {
if(!(mac_config[i].max_mcs[j]>=0 && mac_config[i].max_mcs[j]<=27))
return 0;
}
}
}
} else {
i = event.ue;
j = event.lcid;
if(!(mac_config[i].max_mcs[j]>=0 && mac_config[i].max_mcs[j]<=27))
return 0;
}
}
}
return 1;
}