* manage control elements in CCCH PDU through rx_sdu function
* add event handler for remote (online) configuration and status monitoring * update openair config generator (OCG) and scneario descriptor (OSD) with new features contributed by A. Gomes (one source) * fix the issue with netlink when benchmarking oaisim preformance * pre-ci passed except for eMBMS git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5299 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -332,7 +332,7 @@ uint8_t get_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
|||||||
subframe_dl = subframe - 4;
|
subframe_dl = subframe - 4;
|
||||||
o_ACK[0] = harq_ack[subframe_dl].ack;
|
o_ACK[0] = harq_ack[subframe_dl].ack;
|
||||||
status = harq_ack[subframe_dl].send_harq_status;
|
status = harq_ack[subframe_dl].send_harq_status;
|
||||||
printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]);
|
//printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch (frame_parms->tdd_config) {
|
switch (frame_parms->tdd_config) {
|
||||||
|
|||||||
@@ -3093,11 +3093,18 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui
|
|||||||
phy_vars_eNB->Mod_id,
|
phy_vars_eNB->Mod_id,
|
||||||
frame,harq_pid,i);
|
frame,harq_pid,i);
|
||||||
#endif
|
#endif
|
||||||
|
mac_xface->rx_sdu(phy_vars_eNB->Mod_id,
|
||||||
|
frame,
|
||||||
|
phy_vars_eNB->ulsch_eNB[i]->rnti,
|
||||||
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
|
||||||
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
||||||
|
/*
|
||||||
mac_xface->terminate_ra_proc(phy_vars_eNB->Mod_id,
|
mac_xface->terminate_ra_proc(phy_vars_eNB->Mod_id,
|
||||||
frame,
|
frame,
|
||||||
phy_vars_eNB->ulsch_eNB[i]->rnti,
|
phy_vars_eNB->ulsch_eNB[i]->rnti,
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->b,
|
||||||
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
phy_vars_eNB->ulsch_eNB[i]->harq_processes[harq_pid]->TBS>>3);
|
||||||
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
phy_vars_eNB->eNB_UE_stats[i].mode = PUSCH;
|
phy_vars_eNB->eNB_UE_stats[i].mode = PUSCH;
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ double pbch_bler(double sinr) {
|
|||||||
}
|
}
|
||||||
bler = pow(10.0,log10_bler);
|
bler = pow(10.0,log10_bler);
|
||||||
}
|
}
|
||||||
printf ("sinr %f bler %f\n",sinr,bler);
|
//printf ("sinr %f bler %f\n",sinr,bler);
|
||||||
return(bler);
|
return(bler);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,11 @@
|
|||||||
#ifndef __PLATFORM_CONSTANTS_H__
|
#ifndef __PLATFORM_CONSTANTS_H__
|
||||||
# define __PLATFORM_CONSTANTS_H__
|
# define __PLATFORM_CONSTANTS_H__
|
||||||
|
|
||||||
#define NL_MAX_PAYLOAD 4096 /* this should cover the max mtu size*/
|
#ifdef JUMBO_FRAME
|
||||||
|
#define NL_MAX_PAYLOAD 18000 /* this should cover the max mtu size*/
|
||||||
|
#else
|
||||||
|
#define NL_MAX_PAYLOAD 9000 /* this should cover the max mtu size*/
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USER_MODE
|
#ifdef USER_MODE
|
||||||
#ifdef LARGE_SCALE
|
#ifdef LARGE_SCALE
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ typedef uint32_t frame_t;
|
|||||||
typedef int32_t sframe_t;
|
typedef int32_t sframe_t;
|
||||||
typedef uint32_t sub_frame_t;
|
typedef uint32_t sub_frame_t;
|
||||||
typedef uint8_t module_id_t;
|
typedef uint8_t module_id_t;
|
||||||
typedef int8_t smodule_id_t;
|
typedef int16_t smodule_id_t;
|
||||||
typedef uint16_t rb_id_t;
|
typedef uint16_t rb_id_t;
|
||||||
typedef uint16_t srb_id_t;
|
typedef uint16_t srb_id_t;
|
||||||
|
|
||||||
|
|||||||
@@ -1069,7 +1069,7 @@ can be scheduled.
|
|||||||
@param subframe Index of current subframe
|
@param subframe Index of current subframe
|
||||||
@param calibration_flag Flag to indicate that eNB scheduler should schedule TDD auto-calibration PUSCH.
|
@param calibration_flag Flag to indicate that eNB scheduler should schedule TDD auto-calibration PUSCH.
|
||||||
*/
|
*/
|
||||||
void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, uint8_t cooperation_flag, frame_t frameP, sub_frame_t subframe);//, int calibration_flag);
|
void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, uint8_t cooperation_flag, frame_t frameP, sub_frame_t subframeP);//, int calibration_flag);
|
||||||
|
|
||||||
/* \brief Function to retrieve result of scheduling (DCI) in current subframe. Can be called an arbitrary numeber of times after eNB_dlsch_ulsch_scheduler
|
/* \brief Function to retrieve result of scheduling (DCI) in current subframe. Can be called an arbitrary numeber of times after eNB_dlsch_ulsch_scheduler
|
||||||
in a given subframe.
|
in a given subframe.
|
||||||
|
|||||||
+162
-106
@@ -436,12 +436,11 @@ unsigned char *get_dlsch_sdu(module_id_t module_idP, frame_t frameP, rnti_t rnti
|
|||||||
|
|
||||||
return((unsigned char *)&eNB_mac_inst[module_idP].BCCH_pdu.payload[0]);
|
return((unsigned char *)&eNB_mac_inst[module_idP].BCCH_pdu.payload[0]);
|
||||||
}
|
}
|
||||||
else {
|
else if ((ue_mod_id = find_UE_id(module_idP,rntiP)) != UE_INDEX_INVALID ){
|
||||||
|
LOG_D(MAC,"[eNB %d] Frame %d: Get DLSCH sdu for rnti %x => UE_id %d\n",module_idP,frameP,rntiP,ue_mod_id);
|
||||||
ue_mod_id = find_UE_id(module_idP,rntiP);
|
return((unsigned char *)&eNB_mac_inst[module_idP].DLSCH_pdu[ue_mod_id][TBindex].payload[0]);
|
||||||
LOG_D(MAC,"[eNB %d] Frame %d Get DLSCH sdu for rnti %x => UE_id %d\n",module_idP,frameP,rntiP,ue_mod_id);
|
} else {
|
||||||
|
LOG_E(MAC,"[eNB %d] Frame %d: UE with RNTI %x does not exist\n", module_idP,frameP,rntiP);
|
||||||
return((unsigned char *)&eNB_mac_inst[module_idP].DLSCH_pdu[ue_mod_id][TBindex].payload[0]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -516,9 +515,9 @@ unsigned char *parse_ulsch_header(unsigned char *mac_header,
|
|||||||
|
|
||||||
void SR_indication(module_id_t enb_mod_idP, frame_t frameP, rnti_t rntiP, sub_frame_t subframeP) {
|
void SR_indication(module_id_t enb_mod_idP, frame_t frameP, rnti_t rntiP, sub_frame_t subframeP) {
|
||||||
|
|
||||||
smodule_id_t ue_mod_id = find_UE_id(enb_mod_idP, rntiP);
|
module_id_t ue_mod_id = find_UE_id(enb_mod_idP, rntiP);
|
||||||
|
|
||||||
if (ue_mod_id >= 0) {
|
if (ue_mod_id != UE_INDEX_INVALID ) {
|
||||||
LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d \n",enb_mod_idP,rntiP,frameP,subframeP, ue_mod_id);
|
LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d \n",enb_mod_idP,rntiP,frameP,subframeP, ue_mod_id);
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].ul_SR = 1;
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].ul_SR = 1;
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].ul_active = TRUE;
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].ul_active = TRUE;
|
||||||
@@ -533,128 +532,185 @@ void rx_sdu(module_id_t enb_mod_idP,frame_t frameP,rnti_t rntiP,uint8_t *sdu, ui
|
|||||||
unsigned char rx_ces[MAX_NUM_CE],num_ce,num_sdu,i,*payload_ptr;
|
unsigned char rx_ces[MAX_NUM_CE],num_ce,num_sdu,i,*payload_ptr;
|
||||||
unsigned char rx_lcids[NB_RB_MAX];
|
unsigned char rx_lcids[NB_RB_MAX];
|
||||||
unsigned short rx_lengths[NB_RB_MAX];
|
unsigned short rx_lengths[NB_RB_MAX];
|
||||||
module_id_t ue_mod_id = find_UE_id(enb_mod_idP,rntiP);
|
module_id_t ue_mod_id = find_UE_id(enb_mod_idP,rntiP);
|
||||||
int ii,j;
|
int ii,j;
|
||||||
start_meas(&eNB_mac_inst[enb_mod_idP].rx_ulsch_sdu);
|
start_meas(&eNB_mac_inst[enb_mod_idP].rx_ulsch_sdu);
|
||||||
|
|
||||||
|
if ((ue_mod_id > NUMBER_OF_UE_MAX) || (ue_mod_id == -1) || (ue_mod_id == 255) )
|
||||||
|
|
||||||
for(ii=0; ii<NB_RB_MAX; ii++) rx_lengths[ii] = 0;
|
for(ii=0; ii<NB_RB_MAX; ii++) rx_lengths[ii] = 0;
|
||||||
|
|
||||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,1);
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,1);
|
||||||
|
|
||||||
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].total_pdu_bytes_rx+=sdu_len;
|
|
||||||
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].total_num_pdus_rx+=1;
|
|
||||||
|
|
||||||
LOG_D(MAC,"[eNB %d] Received ULSCH sdu from PHY (rnti %x, UE_id %d), parsing header\n",enb_mod_idP,rntiP,ue_mod_id);
|
LOG_D(MAC,"[eNB %d] Received ULSCH sdu from PHY (rnti %x, UE_id %d), parsing header\n",enb_mod_idP,rntiP,ue_mod_id);
|
||||||
payload_ptr = parse_ulsch_header(sdu,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_len);
|
payload_ptr = parse_ulsch_header(sdu,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_len);
|
||||||
|
|
||||||
// control element
|
// control element
|
||||||
for (i=0;i<num_ce;i++) {
|
for (i=0;i<num_ce;i++) {
|
||||||
|
|
||||||
switch (rx_ces[i]) { // implement and process BSR + CRNTI +
|
switch (rx_ces[i]) { // implement and process BSR + CRNTI +
|
||||||
case POWER_HEADROOM:
|
case POWER_HEADROOM:
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].phr_info = (payload_ptr[0] & 0x3f);// - PHR_MAPPING_OFFSET;
|
if (ue_mod_id != UE_INDEX_INVALID ){
|
||||||
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received PHR PH = %d (db)\n", rx_ces[i], eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].phr_info);
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].phr_info = (payload_ptr[0] & 0x3f);// - PHR_MAPPING_OFFSET;
|
||||||
payload_ptr+=sizeof(POWER_HEADROOM_CMD);
|
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received PHR PH = %d (db)\n", rx_ces[i], eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].phr_info);
|
||||||
break;
|
}
|
||||||
|
payload_ptr+=sizeof(POWER_HEADROOM_CMD);
|
||||||
|
break;
|
||||||
case CRNTI:
|
case CRNTI:
|
||||||
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received CRNTI %d \n", rx_ces[i], payload_ptr[0]);
|
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received CRNTI %d \n", rx_ces[i], payload_ptr[0]);
|
||||||
payload_ptr+=1;
|
payload_ptr+=1;
|
||||||
break;
|
break;
|
||||||
case TRUNCATED_BSR:
|
case TRUNCATED_BSR:
|
||||||
case SHORT_BSR: {
|
case SHORT_BSR: {
|
||||||
uint8_t lcgid;
|
if (ue_mod_id != UE_INDEX_INVALID ){
|
||||||
|
uint8_t lcgid;
|
||||||
lcgid = (payload_ptr[0] >> 6);
|
lcgid = (payload_ptr[0] >> 6);
|
||||||
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
|
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
|
||||||
rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
|
rx_ces[i], lcgid, payload_ptr[0] & 0x3f);
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f);
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f);
|
||||||
payload_ptr += 1;//sizeof(SHORT_BSR); // fixme
|
|
||||||
} break;
|
|
||||||
case LONG_BSR:
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID0] = ((payload_ptr[0] & 0xFC) >> 2);
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID1] =
|
|
||||||
((payload_ptr[0] & 0x03) << 4) | ((payload_ptr[1] & 0xF0) >> 4);
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID2] =
|
|
||||||
((payload_ptr[1] & 0x0F) << 2) | ((payload_ptr[2] & 0xC0) >> 6);
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID3] = (payload_ptr[2] & 0x3F);
|
|
||||||
LOG_D(MAC, "[eNB] MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = "
|
|
||||||
"%u LCGID2 = %u LCGID3 = %u\n",
|
|
||||||
rx_ces[i],
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID0],
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID1],
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID2],
|
|
||||||
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID3]);
|
|
||||||
payload_ptr += 3;////sizeof(LONG_BSR);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
LOG_E(MAC, "[eNB] Received unknown MAC header (0x%02x)\n", rx_ces[i]);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
payload_ptr += 1;//sizeof(SHORT_BSR); // fixme
|
||||||
|
} break;
|
||||||
|
case LONG_BSR:
|
||||||
|
if (ue_mod_id != UE_INDEX_INVALID ){
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID0] = ((payload_ptr[0] & 0xFC) >> 2);
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID1] =
|
||||||
|
((payload_ptr[0] & 0x03) << 4) | ((payload_ptr[1] & 0xF0) >> 4);
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID2] =
|
||||||
|
((payload_ptr[1] & 0x0F) << 2) | ((payload_ptr[2] & 0xC0) >> 6);
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID3] = (payload_ptr[2] & 0x3F);
|
||||||
|
LOG_D(MAC, "[eNB] MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = "
|
||||||
|
"%u LCGID2 = %u LCGID3 = %u\n",
|
||||||
|
rx_ces[i],
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID0],
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID1],
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID2],
|
||||||
|
eNB_mac_inst[enb_mod_idP].UE_template[ue_mod_id].bsr_info[LCGID3]);
|
||||||
|
}
|
||||||
|
payload_ptr += 3;////sizeof(LONG_BSR);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_E(MAC, "[eNB] Received unknown MAC header (0x%02x)\n", rx_ces[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0;i<num_sdu;i++) {
|
for (i=0;i<num_sdu;i++) {
|
||||||
LOG_D(MAC,"SDU Number %d MAC Subheader SDU_LCID %d, length %d\n",i,rx_lcids[i],rx_lengths[i]);
|
LOG_D(MAC,"SDU Number %d MAC Subheader SDU_LCID %d, length %d\n",i,rx_lcids[i],rx_lengths[i]);
|
||||||
|
|
||||||
if ((rx_lcids[i] == DCCH)||(rx_lcids[i] == DCCH1)) {
|
switch (rx_lcids[i]) {
|
||||||
// if(eNB_mac_inst[module_idP].Dcch_lchan[UE_id].Active==1){
|
case CCCH :
|
||||||
|
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d, Received CCCH: %x.%x.%x.%x.%x.%x, Terminating RA procedure for UE rnti %x\n",
|
||||||
|
enb_mod_idP,frameP,
|
||||||
|
payload_ptr[0],payload_ptr[1],payload_ptr[2],payload_ptr[3],payload_ptr[4], payload_ptr[5], rntiP);
|
||||||
|
|
||||||
|
for (ii=0;ii<NB_RA_PROC_MAX;ii++) {
|
||||||
|
LOG_D(MAC,"[RAPROC] Checking proc %d : rnti (%x, %x), active %d\n",ii,
|
||||||
|
eNB_mac_inst[enb_mod_idP].RA_template[ii].rnti, rntiP,
|
||||||
|
eNB_mac_inst[enb_mod_idP].RA_template[ii].RA_active);
|
||||||
|
|
||||||
|
if ((eNB_mac_inst[enb_mod_idP].RA_template[ii].rnti==rntiP) &&
|
||||||
|
(eNB_mac_inst[enb_mod_idP].RA_template[ii].RA_active==TRUE)) {
|
||||||
|
|
||||||
|
//payload_ptr = parse_ulsch_header(msg3,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,msg3_len);
|
||||||
|
|
||||||
|
if (ue_mod_id == UE_INDEX_INVALID) {
|
||||||
|
memcpy(&eNB_mac_inst[enb_mod_idP].RA_template[ii].cont_res_id[0],payload_ptr,6);
|
||||||
|
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d CCCH: Received RRCConnectionRequest: length %d, offset %d\n",
|
||||||
|
enb_mod_idP,frameP,rx_lengths[ii],payload_ptr-sdu);
|
||||||
|
if ((ue_mod_id=add_new_ue(enb_mod_idP,eNB_mac_inst[enb_mod_idP].RA_template[ii].rnti)) == -1 )
|
||||||
|
mac_xface->macphy_exit("[MAC][eNB] Max user count reached\n");
|
||||||
|
else
|
||||||
|
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Added user with rnti %x => UE %d\n",
|
||||||
|
enb_mod_idP,frameP,eNB_mac_inst[enb_mod_idP].RA_template[ii].rnti,ue_mod_id);
|
||||||
|
} else {
|
||||||
|
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d CCCH: Received RRCConnectionReestablishment from UE %d: length %d, offset %d\n",
|
||||||
|
enb_mod_idP,frameP,ue_mod_id,rx_lengths[ii],payload_ptr-sdu);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Is_rrc_registered == 1)
|
||||||
|
mac_rrc_data_ind(enb_mod_idP,frameP,CCCH,(uint8_t *)payload_ptr,rx_lengths[ii],1,enb_mod_idP,0);
|
||||||
|
|
||||||
|
|
||||||
|
if (num_ce >0) { // handle msg3 which is not RRCConnectionRequest
|
||||||
|
// process_ra_message(msg3,num_ce,rx_lcids,rx_ces);
|
||||||
|
}
|
||||||
|
|
||||||
|
eNB_mac_inst[enb_mod_idP].RA_template[ii].generate_Msg4 = 1;
|
||||||
|
eNB_mac_inst[enb_mod_idP].RA_template[ii].wait_ack_Msg4 = 0;
|
||||||
|
|
||||||
|
|
||||||
|
} // if process is active
|
||||||
|
|
||||||
|
} // loop on RA processes
|
||||||
|
|
||||||
|
break;
|
||||||
|
case DCCH :
|
||||||
|
case DCCH1 :
|
||||||
|
// if(eNB_mac_inst[module_idP].Dcch_lchan[UE_id].Active==1){
|
||||||
|
|
||||||
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
|
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
|
||||||
LOG_T(MAC,"offset: %d\n",(unsigned char)((unsigned char*)payload_ptr-sdu));
|
LOG_T(MAC,"offset: %d\n",(unsigned char)((unsigned char*)payload_ptr-sdu));
|
||||||
for (j=0;j<32;j++)
|
for (j=0;j<32;j++)
|
||||||
LOG_T(MAC,"%x ",payload_ptr[j]);
|
LOG_T(MAC,"%x ",payload_ptr[j]);
|
||||||
LOG_T(MAC,"\n");
|
LOG_T(MAC,"\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// This check is just to make sure we didn't get a bogus SDU length, to be removed ...
|
// This check is just to make sure we didn't get a bogus SDU length, to be removed ...
|
||||||
if (rx_lengths[i]<CCCH_PAYLOAD_SIZE_MAX) {
|
if (rx_lengths[i]<CCCH_PAYLOAD_SIZE_MAX) {
|
||||||
LOG_D(MAC,"[eNB %d] Frame %d : ULSCH -> UL-DCCH, received %d bytes form UE %d on LCID %d(%d) \n",
|
LOG_D(MAC,"[eNB %d] Frame %d : ULSCH -> UL-DCCH, received %d bytes form UE %d on LCID %d(%d) \n",
|
||||||
enb_mod_idP,frameP, rx_lengths[i], ue_mod_id, rx_lcids[i], rx_lcids[i]);
|
enb_mod_idP,frameP, rx_lengths[i], ue_mod_id, rx_lcids[i], rx_lcids[i]);
|
||||||
|
|
||||||
mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,ENB_FLAG_YES,MBMS_FLAG_NO,
|
mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,ENB_FLAG_YES,MBMS_FLAG_NO,
|
||||||
rx_lcids[i],
|
rx_lcids[i],
|
||||||
(char *)payload_ptr,
|
(char *)payload_ptr,
|
||||||
rx_lengths[i],
|
rx_lengths[i],
|
||||||
1,
|
1,
|
||||||
NULL);//(unsigned int*)crc_status);
|
NULL);//(unsigned int*)crc_status);
|
||||||
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_pdu_rx[rx_lcids[i]]+=1;
|
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_pdu_rx[rx_lcids[i]]+=1;
|
||||||
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i];
|
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i];
|
||||||
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
} else if (rx_lcids[i] >= DTCH) {
|
|
||||||
// if(eNB_mac_inst[module_idP].Dcch_lchan[UE_id].Active==1){
|
|
||||||
|
|
||||||
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
|
|
||||||
LOG_T(MAC,"offset: %d\n",(unsigned char)((unsigned char*)payload_ptr-sdu));
|
|
||||||
|
|
||||||
for (j=0;j<32;j++)
|
|
||||||
LOG_T(MAC,"%x ",payload_ptr[j]);
|
|
||||||
LOG_T(MAC,"\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
LOG_D(MAC,"[eNB %d] Frame %d : ULSCH -> UL-DTCH, received %d bytes from UE %d for lcid %d (%d)\n",
|
|
||||||
enb_mod_idP,frameP, rx_lengths[i], ue_mod_id,rx_lcids[i],rx_lcids[i]);
|
|
||||||
|
|
||||||
if ((rx_lengths[i] <SCH_PAYLOAD_SIZE_MAX) && (rx_lengths[i] > 0) ) { // MAX SIZE OF transport block
|
|
||||||
mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,ENB_FLAG_YES,MBMS_FLAG_NO,
|
|
||||||
DTCH,
|
|
||||||
(char *)payload_ptr,
|
|
||||||
rx_lengths[i],
|
|
||||||
1,
|
|
||||||
NULL);//(unsigned int*)crc_status);
|
|
||||||
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_pdu_rx[rx_lcids[i]]+=1;
|
|
||||||
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i];
|
|
||||||
|
|
||||||
}
|
|
||||||
// }
|
|
||||||
} else {
|
|
||||||
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_errors_rx+=1;
|
|
||||||
LOG_E(MAC,"[eNB %d] received unknown LCID %d from UE %d ", rx_lcids[i], ue_mod_id);
|
|
||||||
}
|
}
|
||||||
|
// }
|
||||||
payload_ptr+=rx_lengths[i];
|
break;
|
||||||
|
case DTCH: // default DRB
|
||||||
|
// if(eNB_mac_inst[module_idP].Dcch_lchan[UE_id].Active==1){
|
||||||
|
|
||||||
|
#if defined(ENABLE_MAC_PAYLOAD_DEBUG)
|
||||||
|
LOG_T(MAC,"offset: %d\n",(unsigned char)((unsigned char*)payload_ptr-sdu));
|
||||||
|
for (j=0;j<32;j++)
|
||||||
|
LOG_T(MAC,"%x ",payload_ptr[j]);
|
||||||
|
LOG_T(MAC,"\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LOG_D(MAC,"[eNB %d] Frame %d : ULSCH -> UL-DTCH, received %d bytes from UE %d for lcid %d (%d)\n",
|
||||||
|
enb_mod_idP,frameP, rx_lengths[i], ue_mod_id,rx_lcids[i],rx_lcids[i]);
|
||||||
|
|
||||||
|
if ((rx_lengths[i] <SCH_PAYLOAD_SIZE_MAX) && (rx_lengths[i] > 0) ) { // MAX SIZE OF transport block
|
||||||
|
mac_rlc_data_ind(enb_mod_idP,ue_mod_id, frameP,ENB_FLAG_YES,MBMS_FLAG_NO,
|
||||||
|
DTCH,
|
||||||
|
(char *)payload_ptr,
|
||||||
|
rx_lengths[i],
|
||||||
|
1,
|
||||||
|
NULL);//(unsigned int*)crc_status);
|
||||||
|
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_pdu_rx[rx_lcids[i]]+=1;
|
||||||
|
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i];
|
||||||
|
|
||||||
|
}
|
||||||
|
// }
|
||||||
|
break;
|
||||||
|
default : //if (rx_lcids[i] >= DTCH) {
|
||||||
|
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].num_errors_rx+=1;
|
||||||
|
LOG_E(MAC,"[eNB %d] received unsupported or unknown LCID %d from UE %d ", rx_lcids[i], ue_mod_id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
payload_ptr+=rx_lengths[i];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].total_pdu_bytes_rx+=sdu_len;
|
||||||
|
eNB_mac_inst[enb_mod_idP].eNB_UE_stats[ue_mod_id].total_num_pdus_rx+=1;
|
||||||
|
|
||||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,0);
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,0);
|
||||||
stop_meas(&eNB_mac_inst[enb_mod_idP].rx_ulsch_sdu);
|
stop_meas(&eNB_mac_inst[enb_mod_idP].rx_ulsch_sdu);
|
||||||
}
|
}
|
||||||
@@ -1625,7 +1681,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
|
|||||||
unsigned char i;//,harq_pid,round;
|
unsigned char i;//,harq_pid,round;
|
||||||
uint16_t rrc_sdu_length;
|
uint16_t rrc_sdu_length;
|
||||||
unsigned char lcid,offset;
|
unsigned char lcid,offset;
|
||||||
int8_t UE_id;
|
module_id_t UE_id= UE_INDEX_INVALID;
|
||||||
unsigned short TBsize = -1;
|
unsigned short TBsize = -1;
|
||||||
unsigned short msg4_padding,msg4_post_padding,msg4_header;
|
unsigned short msg4_padding,msg4_post_padding,msg4_header;
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ typedef struct
|
|||||||
|
|
||||||
// eNB functions
|
// eNB functions
|
||||||
/// Invoke dlsch/ulsch scheduling procedure for new subframe
|
/// Invoke dlsch/ulsch scheduling procedure for new subframe
|
||||||
void (*eNB_dlsch_ulsch_scheduler)(module_id_t Mod_id, uint8_t cooperation_flag, frame_t frameP, uint8_t subframe);//, int calibration_flag);
|
void (*eNB_dlsch_ulsch_scheduler)(module_id_t Mod_id, uint8_t cooperation_flag, frame_t frameP, sub_frame_t subframeP);//, int calibration_flag);
|
||||||
|
|
||||||
/// Fill random access response sdu, passing timing advance
|
/// Fill random access response sdu, passing timing advance
|
||||||
uint16_t (*fill_rar)(module_id_t Mod_id,frame_t frameP,uint8_t *dlsch_buffer,uint16_t N_RB_UL, uint8_t input_buffer_length);
|
uint16_t (*fill_rar)(module_id_t Mod_id,frame_t frameP,uint8_t *dlsch_buffer,uint16_t N_RB_UL, uint8_t input_buffer_length);
|
||||||
@@ -84,7 +84,7 @@ typedef struct
|
|||||||
void (*cancel_ra_proc)(module_id_t Mod_id,frame_t frameP,uint16_t preamble);
|
void (*cancel_ra_proc)(module_id_t Mod_id,frame_t frameP,uint16_t preamble);
|
||||||
|
|
||||||
/// Get DCI for current subframe from MAC
|
/// Get DCI for current subframe from MAC
|
||||||
DCI_PDU* (*get_dci_sdu)(module_id_t Mod_id,frame_t frameP,uint8_t subframe);
|
DCI_PDU* (*get_dci_sdu)(module_id_t Mod_id,frame_t frameP,sub_frame_t subframe);
|
||||||
|
|
||||||
/// Get DLSCH sdu for particular RNTI and Transport block index
|
/// Get DLSCH sdu for particular RNTI and Transport block index
|
||||||
uint8_t* (*get_dlsch_sdu)(module_id_t Mod_id,frame_t frameP,rnti_t rnti,uint8_t TB_index);
|
uint8_t* (*get_dlsch_sdu)(module_id_t Mod_id,frame_t frameP,rnti_t rnti,uint8_t TB_index);
|
||||||
@@ -96,7 +96,7 @@ typedef struct
|
|||||||
void (*mrbch_phy_sync_failure) (module_id_t Mod_id,frame_t frameP, uint8_t free_eNB_index);
|
void (*mrbch_phy_sync_failure) (module_id_t Mod_id,frame_t frameP, uint8_t free_eNB_index);
|
||||||
|
|
||||||
/// Indicate Scheduling Request from UE
|
/// Indicate Scheduling Request from UE
|
||||||
void (*SR_indication)(module_id_t Mod_id,frame_t frameP,rnti_t rnti,uint8_t subframe);
|
void (*SR_indication)(module_id_t Mod_id,frame_t frameP,rnti_t rnti,sub_frame_t subframe);
|
||||||
|
|
||||||
/// Configure Common PHY parameters from SIB1
|
/// Configure Common PHY parameters from SIB1
|
||||||
void (*phy_config_sib1_eNB)(module_id_t Mod_id,
|
void (*phy_config_sib1_eNB)(module_id_t Mod_id,
|
||||||
@@ -124,7 +124,7 @@ typedef struct
|
|||||||
|
|
||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
/// Get MCH sdu and corresponding MCS for particular MBSFN subframe
|
/// Get MCH sdu and corresponding MCS for particular MBSFN subframe
|
||||||
MCH_PDU* (*get_mch_sdu)(module_id_t Mod_id,frame_t frameP,uint32_t subframe);
|
MCH_PDU* (*get_mch_sdu)(module_id_t Mod_id,frame_t frameP,sub_frame_t subframe);
|
||||||
#endif
|
#endif
|
||||||
// configure the cba rnti at the physical layer
|
// configure the cba rnti at the physical layer
|
||||||
void (*phy_config_cba_rnti)(module_id_t Mod_id,eNB_flag_t eNB_flag, uint8_t index, uint16_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups);
|
void (*phy_config_cba_rnti)(module_id_t Mod_id,eNB_flag_t eNB_flag, uint8_t index, uint16_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups);
|
||||||
@@ -149,26 +149,26 @@ typedef struct
|
|||||||
|
|
||||||
/// Function to check if UE PHY needs to decode MCH for MAC
|
/// Function to check if UE PHY needs to decode MCH for MAC
|
||||||
/// get the sync area id, and teturn MCS value if need to decode, otherwise -1
|
/// get the sync area id, and teturn MCS value if need to decode, otherwise -1
|
||||||
int (*ue_query_mch)(module_id_t Mod_id,frame_t frameP,uint32_t subframe,uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active);
|
int (*ue_query_mch)(module_id_t Mod_id,frame_t frameP,sub_frame_t subframe,uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Retrieve ULSCH sdu from MAC
|
/// Retrieve ULSCH sdu from MAC
|
||||||
void (*ue_get_sdu)(module_id_t Mod_id,frame_t frameP,uint8_t subframe, uint8_t CH_index,uint8_t *ulsch_buffer,uint16_t buflen,uint8_t *access_mode);
|
void (*ue_get_sdu)(module_id_t Mod_id,frame_t frameP,sub_frame_t subframe, uint8_t CH_index,uint8_t *ulsch_buffer,uint16_t buflen,uint8_t *access_mode);
|
||||||
|
|
||||||
/// Retrieve RRCConnectionReq from MAC
|
/// Retrieve RRCConnectionReq from MAC
|
||||||
PRACH_RESOURCES_t* (*ue_get_rach)(module_id_t Mod_id,frame_t frameP,uint8_t Msg3_flag,uint8_t subframe);
|
PRACH_RESOURCES_t* (*ue_get_rach)(module_id_t Mod_id,frame_t frameP,uint8_t Msg3_flag,sub_frame_t subframe);
|
||||||
|
|
||||||
/// Process Random-Access Response
|
/// Process Random-Access Response
|
||||||
uint16_t (*ue_process_rar)(module_id_t Mod_id,frame_t frameP,uint8_t *dlsch_buffer,uint16_t *t_crnti,uint8_t preamble_index);
|
uint16_t (*ue_process_rar)(module_id_t Mod_id,frame_t frameP,uint8_t *dlsch_buffer,uint16_t *t_crnti,uint8_t preamble_index);
|
||||||
|
|
||||||
/// Get SR payload (0,1) from UE MAC
|
/// Get SR payload (0,1) from UE MAC
|
||||||
uint32_t (*ue_get_SR)(module_id_t Mod_id,frame_t frameP,uint8_t eNB_id,rnti_t rnti,uint8_t subframe);
|
uint32_t (*ue_get_SR)(module_id_t Mod_id,frame_t frameP,uint8_t eNB_id,rnti_t rnti,sub_frame_t subframe);
|
||||||
|
|
||||||
/// Indicate synchronization with valid PBCH
|
/// Indicate synchronization with valid PBCH
|
||||||
void (*dl_phy_sync_success) (module_id_t Mod_id,frame_t frameP, uint8_t CH_index,uint8_t first_sync);
|
void (*dl_phy_sync_success) (module_id_t Mod_id,frame_t frameP, uint8_t CH_index,uint8_t first_sync);
|
||||||
|
|
||||||
/// Only calls the PDCP for now
|
/// Only calls the PDCP for now
|
||||||
UE_L2_STATE_t (*ue_scheduler)(module_id_t Mod_id, frame_t frameP,uint8_t subframe, lte_subframe_t direction,uint8_t eNB_id);
|
UE_L2_STATE_t (*ue_scheduler)(module_id_t Mod_id, frame_t frameP,sub_frame_t subframe, lte_subframe_t direction,uint8_t eNB_id);
|
||||||
|
|
||||||
/// PHY-Config-Dedicated UE
|
/// PHY-Config-Dedicated UE
|
||||||
void (*phy_config_dedicated_ue)(module_id_t Mod_id,uint8_t CH_index,
|
void (*phy_config_dedicated_ue)(module_id_t Mod_id,uint8_t CH_index,
|
||||||
|
|||||||
@@ -65,6 +65,7 @@
|
|||||||
#include "RRCConnectionSetup.h"
|
#include "RRCConnectionSetup.h"
|
||||||
#include "RRCConnectionSetupComplete.h"
|
#include "RRCConnectionSetupComplete.h"
|
||||||
#include "RRCConnectionRequest.h"
|
#include "RRCConnectionRequest.h"
|
||||||
|
#include "RRCConnectionReestablishmentRequest.h"
|
||||||
#include "BCCH-DL-SCH-Message.h"
|
#include "BCCH-DL-SCH-Message.h"
|
||||||
#include "BCCH-BCH-Message.h"
|
#include "BCCH-BCH-Message.h"
|
||||||
#ifdef Rel10
|
#ifdef Rel10
|
||||||
@@ -197,6 +198,11 @@ typedef struct eNB_RRC_UE_INFO_s {
|
|||||||
UE_S_TMSI Initialue_identity_s_TMSI;
|
UE_S_TMSI Initialue_identity_s_TMSI;
|
||||||
EstablishmentCause_t establishment_cause;
|
EstablishmentCause_t establishment_cause;
|
||||||
|
|
||||||
|
/* Information from UE RRC ConnectionReestablishmentRequest */
|
||||||
|
|
||||||
|
ReestablishmentCause_t reestablishment_cause;
|
||||||
|
|
||||||
|
|
||||||
/* UE id for initial connection to S1AP */
|
/* UE id for initial connection to S1AP */
|
||||||
uint16_t ue_initial_id;
|
uint16_t ue_initial_id;
|
||||||
|
|
||||||
|
|||||||
@@ -357,8 +357,7 @@ RRC_status_t rrc_rx_tx(uint8_t Mod_id, const frame_t frameP, const eNB_flag_t eN
|
|||||||
}
|
}
|
||||||
if ((UE_rrc_inst[Mod_id].Info[index].T310_cnt % 10) == 0)
|
if ((UE_rrc_inst[Mod_id].Info[index].T310_cnt % 10) == 0)
|
||||||
LOG_D(RRC, "[UE %d] Frame %d T310 Count %d ms\n", Mod_id, frameP, UE_rrc_inst[Mod_id].Info[index].T310_cnt);
|
LOG_D(RRC, "[UE %d] Frame %d T310 Count %d ms\n", Mod_id, frameP, UE_rrc_inst[Mod_id].Info[index].T310_cnt);
|
||||||
if (UE_rrc_inst[Mod_id].Info[index].T310_cnt
|
if (UE_rrc_inst[Mod_id].Info[index].T310_cnt == T310[UE_rrc_inst[Mod_id].sib2[index]->ue_TimersAndConstants.t310]) {
|
||||||
== T310[UE_rrc_inst[Mod_id].sib2[index]->ue_TimersAndConstants.t310]) {
|
|
||||||
UE_rrc_inst[Mod_id].Info[index].T310_active = 0;
|
UE_rrc_inst[Mod_id].Info[index].T310_active = 0;
|
||||||
rrc_t310_expiration (frameP, Mod_id, index);
|
rrc_t310_expiration (frameP, Mod_id, index);
|
||||||
return (RRC_PHY_RESYNCH);
|
return (RRC_PHY_RESYNCH);
|
||||||
|
|||||||
+64
-13
@@ -48,6 +48,8 @@
|
|||||||
#include "COMMON/mac_rrc_primitives.h"
|
#include "COMMON/mac_rrc_primitives.h"
|
||||||
#include "RRC/LITE/MESSAGES/asn1_msg.h"
|
#include "RRC/LITE/MESSAGES/asn1_msg.h"
|
||||||
#include "RRCConnectionRequest.h"
|
#include "RRCConnectionRequest.h"
|
||||||
|
#include "RRCConnectionReestablishmentRequest.h"
|
||||||
|
//#include "ReestablishmentCause.h"
|
||||||
#include "UL-CCCH-Message.h"
|
#include "UL-CCCH-Message.h"
|
||||||
#include "DL-CCCH-Message.h"
|
#include "DL-CCCH-Message.h"
|
||||||
#include "UL-DCCH-Message.h"
|
#include "UL-DCCH-Message.h"
|
||||||
@@ -461,6 +463,30 @@ uint8_t rrc_eNB_get_next_transaction_identifier(
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Functions to handle UE index in eNB UE list */
|
/* Functions to handle UE index in eNB UE list */
|
||||||
|
|
||||||
|
|
||||||
|
static module_id_t rrc_eNB_get_UE_index(
|
||||||
|
module_id_t enb_mod_idP,
|
||||||
|
uint64_t UE_identity) {
|
||||||
|
|
||||||
|
boolean_t reg = FALSE;
|
||||||
|
module_id_t i;
|
||||||
|
|
||||||
|
AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB index invalid (%d/%d)!", enb_mod_idP, NB_eNB_INST);
|
||||||
|
|
||||||
|
for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
|
||||||
|
if (eNB_rrc_inst[enb_mod_idP].Info.UE_list[i] == UE_identity) {
|
||||||
|
// UE_identity already registered
|
||||||
|
reg = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg == FALSE) {
|
||||||
|
return (UE_MODULE_INVALID);
|
||||||
|
} else
|
||||||
|
return (i);
|
||||||
|
}
|
||||||
|
|
||||||
static module_id_t rrc_eNB_get_next_free_UE_index(
|
static module_id_t rrc_eNB_get_next_free_UE_index(
|
||||||
module_id_t enb_mod_idP,
|
module_id_t enb_mod_idP,
|
||||||
uint64_t UE_identity) {
|
uint64_t UE_identity) {
|
||||||
@@ -472,21 +498,20 @@ static module_id_t rrc_eNB_get_next_free_UE_index(
|
|||||||
|
|
||||||
for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
|
for (i = 0; i < NUMBER_OF_UE_MAX; i++) {
|
||||||
if ((first_index == UE_MODULE_INVALID) && (eNB_rrc_inst[enb_mod_idP].Info.UE_list[i] == 0)) {
|
if ((first_index == UE_MODULE_INVALID) && (eNB_rrc_inst[enb_mod_idP].Info.UE_list[i] == 0)) {
|
||||||
first_index = i; // save first free position
|
first_index = i; // save first free position
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eNB_rrc_inst[enb_mod_idP].Info.UE_list[i] == UE_identity) {
|
if (eNB_rrc_inst[enb_mod_idP].Info.UE_list[i] == UE_identity) {
|
||||||
// UE_identity already registered
|
// UE_identity already registered
|
||||||
reg = TRUE;
|
reg = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reg == 0) {
|
if (reg == 0) {
|
||||||
LOG_I(RRC, "[eNB %d] Adding UE %d with identity " PRIu64 "\n", enb_mod_idP, first_index, UE_identity);
|
LOG_I(RRC, "[eNB %d] Adding UE %d with identity " PRIu64 "\n", enb_mod_idP, first_index, UE_identity);
|
||||||
return (first_index);
|
return (first_index);
|
||||||
} else {
|
} else
|
||||||
return (UE_MODULE_INVALID);
|
return (UE_MODULE_INVALID);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rrc_eNB_free_UE_index(
|
void rrc_eNB_free_UE_index(
|
||||||
@@ -2613,6 +2638,7 @@ int rrc_eNB_decode_ccch(
|
|||||||
asn_dec_rval_t dec_rval;
|
asn_dec_rval_t dec_rval;
|
||||||
UL_CCCH_Message_t *ul_ccch_msg = NULL;
|
UL_CCCH_Message_t *ul_ccch_msg = NULL;
|
||||||
RRCConnectionRequest_r8_IEs_t *rrcConnectionRequest;
|
RRCConnectionRequest_r8_IEs_t *rrcConnectionRequest;
|
||||||
|
RRCConnectionReestablishmentRequest_r8_IEs_t *rrcConnectionReestablishmentRequest;
|
||||||
int i, rval;
|
int i, rval;
|
||||||
|
|
||||||
//memset(ul_ccch_msg,0,sizeof(UL_CCCH_Message_t));
|
//memset(ul_ccch_msg,0,sizeof(UL_CCCH_Message_t));
|
||||||
@@ -2672,13 +2698,40 @@ int rrc_eNB_decode_ccch(
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case UL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentRequest:
|
case UL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentRequest:
|
||||||
|
#ifdef RRC_MSG_PRINT
|
||||||
|
LOG_F(RRC, "RRC Connection Reestablishement Request\n");
|
||||||
|
for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++)
|
||||||
|
LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]);
|
||||||
|
LOG_F(RRC,"\n");
|
||||||
|
#endif
|
||||||
LOG_D(RRC,
|
LOG_D(RRC,
|
||||||
"[FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n",
|
"[FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n",
|
||||||
frameP, enb_mod_idP, enb_mod_idP);
|
frameP, enb_mod_idP, enb_mod_idP);
|
||||||
LOG_I(RRC, "[eNB %d] Frame %d : RRCConnectionReestablishmentRequest not supported yet\n", enb_mod_idP,
|
|
||||||
frameP);
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
rrcConnectionReestablishmentRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionReestablishmentRequest.criticalExtensions.choice.rrcConnectionReestablishmentRequest_r8;
|
||||||
|
|
||||||
|
LOG_I(RRC, "[eNB %d] Frame %d UE %d: RRCConnectionReestablishmentRequest cause %s\n", enb_mod_idP,
|
||||||
|
frameP,
|
||||||
|
((rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_otherFailure) ? "Other Failure" :
|
||||||
|
(rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_handoverFailure) ? "Handover Failure" :
|
||||||
|
"reconfigurationFailure"));
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
uint64_t c_rnti = 0;
|
||||||
|
|
||||||
|
memcpy(((uint8_t *) & c_rnti) + 3, rrcConnectionReestablishmentRequest.UE_identity.c_RNTI.buf,
|
||||||
|
rrcConnectionReestablishmentRequest.UE_identity.c_RNTI.size);
|
||||||
|
ue_mod_id = rrc_eNB_get_UE_index(enb_mod_idP, c_rnti);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((eNB_rrc_inst[enb_mod_idP].phyCellId == rrcConnectionReestablishmentRequest.UE_identity.physCellId) &&
|
||||||
|
(ue_mod_id != UE_INDEX_INVALID)){
|
||||||
|
rrc_eNB_generate_RRCConnectionReestablishement(enb_mod_idP, frameP, ue_mod_id);
|
||||||
|
}else {
|
||||||
|
rrc_eNB_generate_RRCConnectionReestablishementReject(enb_mod_idP, frameP, ue_mod_id);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
*/
|
||||||
case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest:
|
case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest:
|
||||||
#ifdef RRC_MSG_PRINT
|
#ifdef RRC_MSG_PRINT
|
||||||
LOG_F(RRC, "RRC Connection Request\n");
|
LOG_F(RRC, "RRC Connection Request\n");
|
||||||
@@ -2690,9 +2743,7 @@ int rrc_eNB_decode_ccch(
|
|||||||
"[FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n",
|
"[FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n",
|
||||||
frameP, enb_mod_idP, enb_mod_idP);
|
frameP, enb_mod_idP, enb_mod_idP);
|
||||||
|
|
||||||
rrcConnectionRequest =
|
rrcConnectionRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions.choice.rrcConnectionRequest_r8;
|
||||||
&ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions.
|
|
||||||
choice.rrcConnectionRequest_r8;
|
|
||||||
{
|
{
|
||||||
uint64_t random_value = 0;
|
uint64_t random_value = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -124,19 +124,20 @@ char g_sid[MAX_SID];
|
|||||||
#define CLI_MAX_NODES 10
|
#define CLI_MAX_NODES 10
|
||||||
|
|
||||||
/* The names of functions that actually do the manipulation. */
|
/* The names of functions that actually do the manipulation. */
|
||||||
int com_help (), com_exit ();
|
int com_help (char * arg);
|
||||||
|
int com_exit (char *arg);
|
||||||
|
|
||||||
int prompt(),prompt_usage(), info();
|
int prompt(char *arg),prompt_usage(void), info(char *arg);
|
||||||
|
|
||||||
int start(), set();
|
int start(char *arg), set(char *arg);
|
||||||
int start_usage(), set_usage();
|
int start_usage(void), set_usage(void);
|
||||||
|
|
||||||
/* Forward declarations. */
|
/* Forward declarations. */
|
||||||
char *stripwhite ();
|
char *stripwhite (char *string);
|
||||||
command *find_command ();
|
command *find_command (char* name);
|
||||||
void abandon_input(int);
|
void abandon_input(int);
|
||||||
char *command_generator ();
|
//char *command_generator (void);
|
||||||
char **fileman_completion ();
|
//char **fileman_completion (void);
|
||||||
int cli_login(const char *, int, int );
|
int cli_login(const char *, int, int );
|
||||||
int cli_loop(char* msg);
|
int cli_loop(char* msg);
|
||||||
int cli_set_prompt_char(void);
|
int cli_set_prompt_char(void);
|
||||||
|
|||||||
@@ -1,11 +1,39 @@
|
|||||||
/***************************************************************************
|
/*******************************************************************************
|
||||||
Job_list.c - description
|
|
||||||
-------------------
|
Eurecom OpenAirInterface
|
||||||
-------------------
|
Copyright(c) 1999 - 2011 Eurecom
|
||||||
AUTHOR : Mohamed Said MOSLI BOUKSIAA, Lionel GAUTHIER
|
|
||||||
COMPANY : EURECOM
|
This program is free software; you can redistribute it and/or modify it
|
||||||
EMAIL : mosli@eurecom.fr, Lionel.Gauthier@eurecom.fr
|
under the terms and conditions of the GNU General Public License,
|
||||||
***************************************************************************/
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
/*! \file pad_list.c
|
||||||
|
* \brief list management primimtives
|
||||||
|
* \author Mohamed Said MOSLI BOUKSIAA, Lionel GAUTHIER, Navid Nikaein
|
||||||
|
* \date 2012
|
||||||
|
* \version 0.5
|
||||||
|
* @ingroup util
|
||||||
|
*/
|
||||||
//#define LIST_C
|
//#define LIST_C
|
||||||
//#define NULL 0
|
//#define NULL 0
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,33 @@
|
|||||||
/*
|
/*******************************************************************************
|
||||||
list.h
|
|
||||||
-------------------
|
Eurecom OpenAirInterface
|
||||||
AUTHOR : Lionel GAUTHIER
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
COMPANY : EURECOM
|
|
||||||
EMAIL : Lionel.Gauthier@eurecom.fr
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __list_H__
|
#ifndef __list_H__
|
||||||
#define __list_H__
|
#define __list_H__
|
||||||
|
|
||||||
|
|||||||
+48
-11
@@ -1,12 +1,54 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Eurecom OpenAirInterface
|
||||||
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
#ifndef __FIFO_TYPES_H__
|
#ifndef __FIFO_TYPES_H__
|
||||||
#define __FIFO_TYPES_H__
|
#define __FIFO_TYPES_H__
|
||||||
#include "platform_types.h"
|
#include "platform_types.h"
|
||||||
|
|
||||||
/* Types of events triggering the end of the simulation */
|
|
||||||
typedef enum End_Of_Sim_Event_Type_e {FRAME, TRAFFIC} End_Of_Sim_Event_Type_t;
|
|
||||||
|
|
||||||
/* Types regrouping both user-defined and regular events */
|
/* Types regrouping both user-defined and regular events */
|
||||||
typedef enum Event_Type_e {ET_DL, ET_UL, ET_S, ET_OMG, ET_OTG} Event_Type_t;
|
typedef enum {
|
||||||
|
MIN_ET=0,
|
||||||
|
OAI_ET=MIN_ET, // config events
|
||||||
|
SYS_ET,
|
||||||
|
TOPO_ET,
|
||||||
|
APP_ET,
|
||||||
|
EMU_ET,
|
||||||
|
DL_ET, // frame events
|
||||||
|
UL_ET,
|
||||||
|
S_ET,
|
||||||
|
PHY_ET, // protocol events
|
||||||
|
MAC_ET,
|
||||||
|
RLC_ET,
|
||||||
|
PDCP_ET,
|
||||||
|
RRC_ET,
|
||||||
|
MAX_ET
|
||||||
|
} Event_Type_t;
|
||||||
|
|
||||||
/* decomposition of node functions into jobs for a given event */
|
/* decomposition of node functions into jobs for a given event */
|
||||||
typedef enum Job_type_e { JT_OTG, JT_PDCP, JT_PHY_MAC, JT_INIT_SYNC, JT_DL, JT_UL, RN_DL, RN_UL, JT_END} Job_Type_t;
|
typedef enum Job_type_e { JT_OTG, JT_PDCP, JT_PHY_MAC, JT_INIT_SYNC, JT_DL, JT_UL, RN_DL, RN_UL, JT_END} Job_Type_t;
|
||||||
@@ -43,8 +85,8 @@ typedef struct Packet_otg_s {
|
|||||||
pdcp_transmission_mode_t mode;
|
pdcp_transmission_mode_t mode;
|
||||||
} Packet_otg_t;
|
} Packet_otg_t;
|
||||||
|
|
||||||
typedef struct Event_s {
|
typedef struct {
|
||||||
enum Event_Type_e type;
|
Event_Type_t type;
|
||||||
char *key;
|
char *key;
|
||||||
void *value;
|
void *value;
|
||||||
frame_t frame;
|
frame_t frame;
|
||||||
@@ -59,11 +101,6 @@ typedef struct Event_s {
|
|||||||
double time_ms;
|
double time_ms;
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
typedef struct End_Of_Sim_Event_s {
|
|
||||||
enum End_Of_Sim_Event_Type_e type;
|
|
||||||
int value;
|
|
||||||
} End_Of_Sim_Event_t;
|
|
||||||
|
|
||||||
typedef struct Packet_otg_elt_s {
|
typedef struct Packet_otg_elt_s {
|
||||||
struct Packet_otg_elt_s *next;
|
struct Packet_otg_elt_s *next;
|
||||||
struct Packet_otg_elt_s *previous;
|
struct Packet_otg_elt_s *previous;
|
||||||
|
|||||||
+10
-3
@@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
/*! \file OCG.h
|
/*! \file OCG.h
|
||||||
* \brief Data structure for OCG of OpenAir emulator
|
* \brief Data structure for OCG of OpenAir emulator
|
||||||
* \author Lusheng Wang and Navid Nikaein
|
* \author Lusheng Wang and Navid Nikaein and Andre Gomes(One source)
|
||||||
* \date 2011
|
* \date 2011
|
||||||
* \version 1.0
|
* \version 1.0
|
||||||
* \company Eurecom
|
* \company Eurecom
|
||||||
@@ -404,6 +404,12 @@ The following diagram is based on graphviz (http://www.graphviz.org/), you need
|
|||||||
int grid;
|
int grid;
|
||||||
} eNB_Initial_Distribution;
|
} eNB_Initial_Distribution;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double pos_x;
|
||||||
|
double pos_y;
|
||||||
|
} Fixed_eNB_Distribution;
|
||||||
|
|
||||||
////// options of eNB_Initial_Distribution
|
////// options of eNB_Initial_Distribution
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -428,7 +434,8 @@ The following diagram is based on graphviz (http://www.graphviz.org/), you need
|
|||||||
eNB_Mobility_Type eNB_mobility_type;
|
eNB_Mobility_Type eNB_mobility_type;
|
||||||
|
|
||||||
eNB_Initial_Distribution eNB_initial_distribution;
|
eNB_Initial_Distribution eNB_initial_distribution;
|
||||||
// ! Note: the following three options are for eNB_Initial_Distribution, we put them here for the sake of simplicity of the XML file
|
// ! Note: the following four options are for eNB_Initial_Distribution, we put them here for the sake of simplicity of the XML file
|
||||||
|
Fixed_eNB_Distribution fixed_eNB_distribution;
|
||||||
Random_eNB_Distribution random_eNB_distribution;
|
Random_eNB_Distribution random_eNB_distribution;
|
||||||
Hexagonal_eNB_Distribution hexagonal_eNB_distribution;
|
Hexagonal_eNB_Distribution hexagonal_eNB_distribution;
|
||||||
Grid_eNB_Distribution grid_eNB_distribution;
|
Grid_eNB_Distribution grid_eNB_distribution;
|
||||||
@@ -664,6 +671,7 @@ The following diagram is based on graphviz (http://www.graphviz.org/), you need
|
|||||||
unsigned char otg_enabled; // openair traffic generator
|
unsigned char otg_enabled; // openair traffic generator
|
||||||
unsigned char omv_enabled; // openair mobility visulizer
|
unsigned char omv_enabled; // openair mobility visulizer
|
||||||
unsigned char opp_enabled; // openair performance profiler
|
unsigned char opp_enabled; // openair performance profiler
|
||||||
|
unsigned char oeh_enabled; // openair event handler, with CLI this could provide a remote event management
|
||||||
char *itti_dump_file;
|
char *itti_dump_file;
|
||||||
unsigned char vcd_enabled;
|
unsigned char vcd_enabled;
|
||||||
char *vcd_file;
|
char *vcd_file;
|
||||||
@@ -701,7 +709,6 @@ The following diagram is based on graphviz (http://www.graphviz.org/), you need
|
|||||||
unsigned char extended_prefix_flag;
|
unsigned char extended_prefix_flag;
|
||||||
unsigned char N_RB_DL;
|
unsigned char N_RB_DL;
|
||||||
unsigned char transmission_mode;
|
unsigned char transmission_mode;
|
||||||
|
|
||||||
int max_predefined_traffic_config_index;
|
int max_predefined_traffic_config_index;
|
||||||
int max_customized_traffic_config_index;
|
int max_customized_traffic_config_index;
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,11 @@
|
|||||||
|
|
||||||
/*! \file OCG_parse_XML.c
|
/*! \file OCG_parse_XML.c
|
||||||
* \brief Parse the content of the XML configuration file
|
* \brief Parse the content of the XML configuration file
|
||||||
* \author Lusheng Wang & Navid Nikaein & Aymen Hafsaoui
|
* \author Lusheng Wang & Navid Nikaein & Aymen Hafsaoui & Andre Gomes(One Source)
|
||||||
* \date 2011
|
* \date 2011
|
||||||
* \version 0.1
|
* \version 0.1
|
||||||
* \company Eurecom
|
* \company Eurecom
|
||||||
* \email: lusheng.wang@eurecom.fr
|
* \email: navid.nikaein@eurecom.fr
|
||||||
* \note
|
* \note
|
||||||
* \warning
|
* \warning
|
||||||
*/
|
*/
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
#include "OCG_parse_XML.h"
|
#include "OCG_parse_XML.h"
|
||||||
#include "UTIL/LOG/log.h"
|
#include "UTIL/LOG/log.h"
|
||||||
#include "UTIL/OTG/otg_defs.h"
|
#include "UTIL/OTG/otg_defs.h"
|
||||||
|
#include "UTIL/OPT/opt.h"
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef HAVE_STRNDUP
|
#ifndef HAVE_STRNDUP
|
||||||
@@ -72,7 +73,9 @@ static int inter_site_correlation_;
|
|||||||
static int wall_penetration_loss_dB_;
|
static int wall_penetration_loss_dB_;
|
||||||
static int system_bandwidth_MB_;
|
static int system_bandwidth_MB_;
|
||||||
static int system_frequency_GHz_;
|
static int system_frequency_GHz_;
|
||||||
|
static int number_of_rbs_dl_;
|
||||||
static int transmission_mode_;
|
static int transmission_mode_;
|
||||||
|
static int frame_config_;
|
||||||
static int frame_type_;
|
static int frame_type_;
|
||||||
static int tdd_config_;
|
static int tdd_config_;
|
||||||
static int antenna_;
|
static int antenna_;
|
||||||
@@ -123,6 +126,9 @@ static int max_journey_time_ms_;
|
|||||||
static int eNB_mobility_;
|
static int eNB_mobility_;
|
||||||
static int eNB_mobility_type_;
|
static int eNB_mobility_type_;
|
||||||
static int eNB_initial_distribution_;
|
static int eNB_initial_distribution_;
|
||||||
|
static int eNB_initial_coordinates_;
|
||||||
|
static double eNB_pos_x_;
|
||||||
|
static double eNB_pos_y_;
|
||||||
static int random_eNB_distribution_;
|
static int random_eNB_distribution_;
|
||||||
static int number_of_cells_;
|
static int number_of_cells_;
|
||||||
static int hexagonal_eNB_distribution_;
|
static int hexagonal_eNB_distribution_;
|
||||||
@@ -174,6 +180,8 @@ static int packet_gen_type_;
|
|||||||
static int emulation_config_; /*!< \brief indicating that the parsing position is now within Emu_Config_*/
|
static int emulation_config_; /*!< \brief indicating that the parsing position is now within Emu_Config_*/
|
||||||
static int emulation_time_ms_;
|
static int emulation_time_ms_;
|
||||||
static int curve_;
|
static int curve_;
|
||||||
|
static int profiling_;
|
||||||
|
static int trace_file_;
|
||||||
static int background_stats_;
|
static int background_stats_;
|
||||||
static int performance_metrics_; /*!< \brief indicating that the parsing position is now within Performance_*/
|
static int performance_metrics_; /*!< \brief indicating that the parsing position is now within Performance_*/
|
||||||
static int throughput_;
|
static int throughput_;
|
||||||
@@ -263,8 +271,12 @@ void start_element(void *user_data, const xmlChar *name, const xmlChar **attrs)
|
|||||||
system_bandwidth_MB_ = 1;
|
system_bandwidth_MB_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_FREQUENCY_GHz")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_FREQUENCY_GHz")) {
|
||||||
system_frequency_GHz_ = 1;
|
system_frequency_GHz_ = 1;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_RBS_DL")) {
|
||||||
|
number_of_rbs_dl_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "TRANSMISSION_MODE")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "TRANSMISSION_MODE")) {
|
||||||
transmission_mode_ = 1;
|
transmission_mode_ = 1;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "FRAME_CONFIG")) {
|
||||||
|
frame_config_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "FRAME_TYPE")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "FRAME_TYPE")) {
|
||||||
frame_type_ = 1;
|
frame_type_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "TDD_CONFIG")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "TDD_CONFIG")) {
|
||||||
@@ -297,7 +309,6 @@ void start_element(void *user_data, const xmlChar *name, const xmlChar **attrs)
|
|||||||
antenna_orientation_degree_2_ = 1;
|
antenna_orientation_degree_2_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree3")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree3")) {
|
||||||
antenna_orientation_degree_3_ = 1;
|
antenna_orientation_degree_3_ = 1;
|
||||||
|
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "TOPOLOGY_CONFIG")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "TOPOLOGY_CONFIG")) {
|
||||||
topology_config_ = 1;
|
topology_config_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "AREA")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "AREA")) {
|
||||||
@@ -364,6 +375,12 @@ void start_element(void *user_data, const xmlChar *name, const xmlChar **attrs)
|
|||||||
eNB_mobility_type_ = 1;
|
eNB_mobility_type_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_DISTRIBUTION")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_DISTRIBUTION")) {
|
||||||
eNB_initial_distribution_ = 1;
|
eNB_initial_distribution_ = 1;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_COORDINATES")) {
|
||||||
|
eNB_initial_coordinates_ = 1;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "POS_X")) {
|
||||||
|
eNB_pos_x_ = 1;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "POS_Y")) {
|
||||||
|
eNB_pos_y_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_eNB_DISTRIBUTION")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_eNB_DISTRIBUTION")) {
|
||||||
random_eNB_distribution_ = 1;
|
random_eNB_distribution_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_CELLS")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_CELLS")) {
|
||||||
@@ -399,7 +416,6 @@ void start_element(void *user_data, const xmlChar *name, const xmlChar **attrs)
|
|||||||
} else if (!xmlStrcmp(name,(unsigned char*) "OMV")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "OMV")) {
|
||||||
omv_ = 1;
|
omv_ = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_CONFIG")) {
|
else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_CONFIG")) {
|
||||||
application_config_ = 1;
|
application_config_ = 1;
|
||||||
oai_emulation.info.max_predefined_traffic_config_index = 0;
|
oai_emulation.info.max_predefined_traffic_config_index = 0;
|
||||||
@@ -494,13 +510,16 @@ void start_element(void *user_data, const xmlChar *name, const xmlChar **attrs)
|
|||||||
stream_ = 1;
|
stream_ = 1;
|
||||||
} else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_PORT")) {
|
} else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_PORT")) {
|
||||||
destination_port_ = 1;
|
destination_port_ = 1;
|
||||||
|
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_CONFIG")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_CONFIG")) {
|
||||||
emulation_config_ = 1;
|
emulation_config_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_TIME_ms")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_TIME_ms")) {
|
||||||
emulation_time_ms_ = 1;
|
emulation_time_ms_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "CURVE")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "CURVE")) {
|
||||||
curve_ = 1;
|
curve_ = 1;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "PROFILING")) {
|
||||||
|
profiling_ = 1;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "TRACE_FILE")) {
|
||||||
|
trace_file_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "BACKGROUND_STATS")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "BACKGROUND_STATS")) {
|
||||||
background_stats_ = 1;
|
background_stats_ = 1;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "PERFORMANCE_METRICS")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "PERFORMANCE_METRICS")) {
|
||||||
@@ -593,8 +612,12 @@ void end_element(void *user_data, const xmlChar *name) { // called once at the e
|
|||||||
system_bandwidth_MB_ = 0;
|
system_bandwidth_MB_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_FREQUENCY_GHz")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "SYSTEM_FREQUENCY_GHz")) {
|
||||||
system_frequency_GHz_ = 0;
|
system_frequency_GHz_ = 0;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_RBS_DL")) {
|
||||||
|
number_of_rbs_dl_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "TRANSMISSION_MODE")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "TRANSMISSION_MODE")) {
|
||||||
transmission_mode_ = 0;
|
transmission_mode_ = 0;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "FRAME_CONFIG")) {
|
||||||
|
frame_config_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "FRAME_TYPE")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "FRAME_TYPE")) {
|
||||||
frame_type_ = 0;
|
frame_type_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "TDD_CONFIG")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "TDD_CONFIG")) {
|
||||||
@@ -627,7 +650,6 @@ void end_element(void *user_data, const xmlChar *name) { // called once at the e
|
|||||||
antenna_orientation_degree_2_ = 0;
|
antenna_orientation_degree_2_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree3")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "ANTENNA_ORIENTATION_degree3")) {
|
||||||
antenna_orientation_degree_3_ = 0;
|
antenna_orientation_degree_3_ = 0;
|
||||||
|
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "TOPOLOGY_CONFIG")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "TOPOLOGY_CONFIG")) {
|
||||||
topology_config_ = 0;
|
topology_config_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "AREA")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "AREA")) {
|
||||||
@@ -694,6 +716,12 @@ void end_element(void *user_data, const xmlChar *name) { // called once at the e
|
|||||||
eNB_mobility_type_ = 0;
|
eNB_mobility_type_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_DISTRIBUTION")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_DISTRIBUTION")) {
|
||||||
eNB_initial_distribution_ = 0;
|
eNB_initial_distribution_ = 0;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "eNB_INITIAL_COORDINATES")) {
|
||||||
|
eNB_initial_coordinates_ = 0;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "POS_X")) {
|
||||||
|
eNB_pos_x_ = 0;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "POS_Y")) {
|
||||||
|
eNB_pos_y_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_eNB_DISTRIBUTION")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "RANDOM_eNB_DISTRIBUTION")) {
|
||||||
random_eNB_distribution_ = 0;
|
random_eNB_distribution_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_CELLS")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "NUMBER_OF_CELLS")) {
|
||||||
@@ -728,7 +756,6 @@ void end_element(void *user_data, const xmlChar *name) { // called once at the e
|
|||||||
sumo_hport_ = 0;
|
sumo_hport_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "OMV")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "OMV")) {
|
||||||
omv_ = 0;
|
omv_ = 0;
|
||||||
|
|
||||||
} else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_CONFIG")) {
|
} else if (!xmlStrcmp(name, (unsigned char*) "APPLICATION_CONFIG")) {
|
||||||
application_config_ = 0;
|
application_config_ = 0;
|
||||||
} else if (!xmlStrcmp(name, (unsigned char*) "PREDEFINED_TRAFFIC")) {
|
} else if (!xmlStrcmp(name, (unsigned char*) "PREDEFINED_TRAFFIC")) {
|
||||||
@@ -815,13 +842,16 @@ void end_element(void *user_data, const xmlChar *name) { // called once at the e
|
|||||||
stream_ = 0;
|
stream_ = 0;
|
||||||
} else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_PORT")) {
|
} else if (!xmlStrcmp(name, (unsigned char*) "DESTINATION_PORT")) {
|
||||||
destination_port_ = 0;
|
destination_port_ = 0;
|
||||||
|
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_CONFIG")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_CONFIG")) {
|
||||||
emulation_config_ = 0;
|
emulation_config_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_TIME_ms")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "EMULATION_TIME_ms")) {
|
||||||
emulation_time_ms_ = 0;
|
emulation_time_ms_ = 0;
|
||||||
}else if (!xmlStrcmp(name,(unsigned char*) "CURVE")) {
|
}else if (!xmlStrcmp(name,(unsigned char*) "CURVE")) {
|
||||||
curve_ = 0;
|
curve_ = 0;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "PROFILING")) {
|
||||||
|
profiling_ = 0;
|
||||||
|
} else if (!xmlStrcmp(name,(unsigned char*) "TRACE_FILE")) {
|
||||||
|
trace_file_ = 0;
|
||||||
}else if (!xmlStrcmp(name,(unsigned char*) "BACKGROUND_STATS")) {
|
}else if (!xmlStrcmp(name,(unsigned char*) "BACKGROUND_STATS")) {
|
||||||
background_stats_ = 0;
|
background_stats_ = 0;
|
||||||
} else if (!xmlStrcmp(name,(unsigned char*) "PERFORMANCE_METRICS")) {
|
} else if (!xmlStrcmp(name,(unsigned char*) "PERFORMANCE_METRICS")) {
|
||||||
@@ -911,12 +941,21 @@ void characters(void *user_data, const xmlChar *xmlch, int xmllen) { // called o
|
|||||||
oai_emulation.environment_system_config.system_bandwidth_MB = atof(ch);
|
oai_emulation.environment_system_config.system_bandwidth_MB = atof(ch);
|
||||||
} else if (system_frequency_GHz_) {
|
} else if (system_frequency_GHz_) {
|
||||||
oai_emulation.environment_system_config.system_frequency_GHz = atof(ch);
|
oai_emulation.environment_system_config.system_frequency_GHz = atof(ch);
|
||||||
|
} else if (number_of_rbs_dl_) {
|
||||||
|
oai_emulation.info.N_RB_DL = atoi(ch);
|
||||||
} else if (transmission_mode_) {
|
} else if (transmission_mode_) {
|
||||||
oai_emulation.info.transmission_mode = atof(ch);
|
oai_emulation.info.transmission_mode = atoi(ch);
|
||||||
} else if (frame_type_) {
|
} else if (frame_config_) {
|
||||||
oai_emulation.info.frame_type_name = strndup(ch, len);
|
if (frame_type_) {
|
||||||
} else if (tdd_config_) {
|
oai_emulation.info.frame_type = atoi(ch);
|
||||||
oai_emulation.info.tdd_config = atof(ch);
|
if (oai_emulation.info.frame_type) {
|
||||||
|
oai_emulation.info.frame_type_name = "TDD";
|
||||||
|
} else {
|
||||||
|
oai_emulation.info.frame_type_name = "FDD";
|
||||||
|
}
|
||||||
|
} else if (tdd_config_) {
|
||||||
|
oai_emulation.info.tdd_config = atoi(ch);
|
||||||
|
}
|
||||||
} else if (antenna_) {
|
} else if (antenna_) {
|
||||||
if (eNB_antenna_) {
|
if (eNB_antenna_) {
|
||||||
if (number_of_sectors_) {
|
if (number_of_sectors_) {
|
||||||
@@ -1045,6 +1084,13 @@ void characters(void *user_data, const xmlChar *xmlch, int xmllen) { // called o
|
|||||||
oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option = strndup(ch, len);
|
oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option = strndup(ch, len);
|
||||||
} else if (eNB_initial_distribution_) {
|
} else if (eNB_initial_distribution_) {
|
||||||
oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option = strndup(ch, len);
|
oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option = strndup(ch, len);
|
||||||
|
} else if (eNB_initial_coordinates_) {
|
||||||
|
if (eNB_pos_x_) {
|
||||||
|
oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_x = atof(ch);
|
||||||
|
}
|
||||||
|
else if (eNB_pos_y_) {
|
||||||
|
oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_y = atof(ch);
|
||||||
|
}
|
||||||
} else if (random_eNB_distribution_) {
|
} else if (random_eNB_distribution_) {
|
||||||
if (number_of_cells_) {
|
if (number_of_cells_) {
|
||||||
oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = atoi(ch);
|
oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = atoi(ch);
|
||||||
@@ -1184,7 +1230,20 @@ void characters(void *user_data, const xmlChar *xmlch, int xmllen) { // called o
|
|||||||
oai_emulation.emulation_config.emulation_time_ms = atof(ch);
|
oai_emulation.emulation_config.emulation_time_ms = atof(ch);
|
||||||
} else if (curve_) {
|
} else if (curve_) {
|
||||||
oai_emulation.emulation_config.curve = strndup(ch, len);
|
oai_emulation.emulation_config.curve = strndup(ch, len);
|
||||||
} else if (background_stats_) {
|
} else if (profiling_) {
|
||||||
|
oai_emulation.info.opp_enabled = atoi(ch);
|
||||||
|
} else if (trace_file_) {
|
||||||
|
oai_emulation.info.opt_enabled = 1;
|
||||||
|
if (strcmp(strndup(ch, len), "wireshark") == 0) {
|
||||||
|
opt_type = OPT_WIRESHARK;
|
||||||
|
} else if (strcmp(strndup(ch, len), "pcap") == 0) {
|
||||||
|
opt_type = OPT_PCAP;
|
||||||
|
} else {
|
||||||
|
opt_type = OPT_NONE;
|
||||||
|
oai_emulation.info.opt_enabled = 0;
|
||||||
|
}
|
||||||
|
oai_emulation.info.opt_mode = opt_type;
|
||||||
|
} else if (background_stats_) {
|
||||||
oai_emulation.emulation_config.background_stats = strndup(ch, len);
|
oai_emulation.emulation_config.background_stats = strndup(ch, len);
|
||||||
}else if (performance_metrics_) {
|
}else if (performance_metrics_) {
|
||||||
if (throughput_) {
|
if (throughput_) {
|
||||||
|
|||||||
@@ -158,14 +158,9 @@ Node_list remove_node_entry(NodePtr node, Node_list Node_Vector){
|
|||||||
// display list of nodes
|
// display list of nodes
|
||||||
void display_node_list(Node_list Node_Vector){
|
void display_node_list(Node_list Node_Vector){
|
||||||
Node_list tmp = Node_Vector;
|
Node_list tmp = Node_Vector;
|
||||||
if (tmp == NULL){
|
|
||||||
#ifdef STANDALONE
|
while ((tmp != NULL) &&
|
||||||
printf("Empty Node_list\n");
|
(tmp->node != NULL)){
|
||||||
#else
|
|
||||||
LOG_I(OMG, "Empty Node_list\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
while (tmp != NULL){
|
|
||||||
LOG_I(OMG,"[%s][%s] Node of ID %d is %s. Now, it is at location (%.3f, %.3f)\n",
|
LOG_I(OMG,"[%s][%s] Node of ID %d is %s. Now, it is at location (%.3f, %.3f)\n",
|
||||||
map_int_to_str(mob_type, tmp->node->generator),
|
map_int_to_str(mob_type, tmp->node->generator),
|
||||||
map_int_to_str(nodes_type, tmp->node->type),
|
map_int_to_str(nodes_type, tmp->node->type),
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
||||||
Eurecom OpenAirInterface
|
Eurecom OpenAirInterface
|
||||||
Copyright(c) 1999 - 2011 Eurecom
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms and conditions of the GNU General Public License,
|
under the terms and conditions of the GNU General Public License,
|
||||||
@@ -28,9 +28,16 @@
|
|||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file defs.h
|
* \file defs.h
|
||||||
* \brief Typedefs & Prototypes of OMG functions
|
* \brief Typedefs & Prototypes of OMG functions
|
||||||
*/
|
* \author Navid Nikaein and Andre Gomes (one source)
|
||||||
|
* \date 2014
|
||||||
|
* \version 1.0
|
||||||
|
* \company Eurecom
|
||||||
|
* \email: navid.nikaein@eurecom.fr
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __DEFS_H__
|
#ifndef __DEFS_H__
|
||||||
#define __DEFS_H__
|
#define __DEFS_H__
|
||||||
@@ -114,6 +121,9 @@ typedef struct omg_global_param{
|
|||||||
double max_X; /*!< The maximum value that the X coordinate might take, i.e the maximum boundary of the simulation area according to the X axis*/
|
double max_X; /*!< The maximum value that the X coordinate might take, i.e the maximum boundary of the simulation area according to the X axis*/
|
||||||
double min_Y; /*!< The minimum value that the Y coordinate might take, i.e the minimum boundary of the simulation area according to the Y axis */
|
double min_Y; /*!< The minimum value that the Y coordinate might take, i.e the minimum boundary of the simulation area according to the Y axis */
|
||||||
double max_Y; /*!< The minimum value that the Y coordinate might take, i.e the maximum boundary of the simulation area according to the Y axis */
|
double max_Y; /*!< The minimum value that the Y coordinate might take, i.e the maximum boundary of the simulation area according to the Y axis */
|
||||||
|
bool user_fixed; /*!< Sets if the coordinates are user defined*/
|
||||||
|
double fixed_X; /*!< The user defined x value*/
|
||||||
|
double fixed_Y; /*!< The user defined y value*/
|
||||||
double min_speed; /*!< The minimum speed. It should be different than 0.0 in order to avoid instability*/
|
double min_speed; /*!< The minimum speed. It should be different than 0.0 in order to avoid instability*/
|
||||||
double max_speed; /*!< The maximum allowed speed */
|
double max_speed; /*!< The maximum allowed speed */
|
||||||
double min_journey_time; /*!< The minimum allowed trip duration. It should be different than 0.0 in order to avoid instability and properly reflect the mobility model behavior */
|
double min_journey_time; /*!< The minimum allowed trip duration. It should be different than 0.0 in order to avoid instability and properly reflect the mobility model behavior */
|
||||||
|
|||||||
@@ -29,11 +29,11 @@
|
|||||||
|
|
||||||
/*! \file rwalk.c
|
/*! \file rwalk.c
|
||||||
* \brief static mobility generator
|
* \brief static mobility generator
|
||||||
* \author M. Mahersi, J. Harri, N. Nikaein,
|
* \author M. Mahersi, J. Harri, N. Nikaein, Andre Gomes (One source)
|
||||||
* \date 2011
|
* \date 2011
|
||||||
* \version 0.1
|
* \version 0.1
|
||||||
* \company Eurecom
|
* \company Eurecom
|
||||||
* \email:
|
* \email: openair_tech@eurecom.fr
|
||||||
* \note
|
* \note
|
||||||
* \warning
|
* \warning
|
||||||
*/
|
*/
|
||||||
@@ -84,13 +84,28 @@ void start_static_generator(omg_global_param omg_param_list) {
|
|||||||
|
|
||||||
|
|
||||||
void place_static_node(NodePtr node) {
|
void place_static_node(NodePtr node) {
|
||||||
|
if (omg_param_list.user_fixed && node->type == eNB) {
|
||||||
node->X_pos = (double) ((int) (randomGen(omg_param_list.min_X, omg_param_list.max_X)*100))/ 100;
|
if (omg_param_list.fixed_X <= omg_param_list.max_X && omg_param_list.fixed_X >= omg_param_list.min_X)
|
||||||
node->mob->X_from = node->X_pos;
|
node->X_pos = omg_param_list.fixed_X;
|
||||||
node->mob->X_to = node->X_pos;
|
else
|
||||||
node->Y_pos = (double) ((int) (randomGen(omg_param_list.min_Y,omg_param_list.max_Y)*100))/ 100;
|
node->X_pos = (double) ((int) (randomGen(omg_param_list.min_X, omg_param_list.max_X)*100))/ 100;
|
||||||
node->mob->Y_from = node->Y_pos;
|
node->mob->X_from = node->X_pos;
|
||||||
node->mob->Y_to = node->Y_pos;
|
node->mob->X_to = node->X_pos;
|
||||||
|
if (omg_param_list.fixed_Y <= omg_param_list.max_Y && omg_param_list.fixed_Y >= omg_param_list.min_Y)
|
||||||
|
node->Y_pos = omg_param_list.fixed_Y;
|
||||||
|
else
|
||||||
|
node->Y_pos = (double) ((int) (randomGen(omg_param_list.min_Y,omg_param_list.max_Y)*100))/ 100;
|
||||||
|
node->mob->Y_from = node->Y_pos;
|
||||||
|
node->mob->Y_to = node->Y_pos;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
node->X_pos = (double) ((int) (randomGen(omg_param_list.min_X, omg_param_list.max_X)*100))/ 100;
|
||||||
|
node->mob->X_from = node->X_pos;
|
||||||
|
node->mob->X_to = node->X_pos;
|
||||||
|
node->Y_pos = (double) ((int) (randomGen(omg_param_list.min_Y,omg_param_list.max_Y)*100))/ 100;
|
||||||
|
node->mob->Y_from = node->Y_pos;
|
||||||
|
node->mob->Y_to = node->Y_pos;
|
||||||
|
}
|
||||||
|
|
||||||
node->mob->speed = 0.0;
|
node->mob->speed = 0.0;
|
||||||
node->mob->journey_time = 0.0;
|
node->mob->journey_time = 0.0;
|
||||||
|
|||||||
@@ -29,21 +29,29 @@
|
|||||||
<input type="radio" name="smallscale" value="EVA">EVA<br>
|
<input type="radio" name="smallscale" value="EVA">EVA<br>
|
||||||
<input type="radio" name="smallscale" value="ETU">ETU<br>
|
<input type="radio" name="smallscale" value="ETU">ETU<br>
|
||||||
<input type="radio" name="smallscale" value="Rayleigh8">Rayleigh8<br>
|
<input type="radio" name="smallscale" value="Rayleigh8">Rayleigh8<br>
|
||||||
<input type="radio" name="smallscale" value="Rayleigh1" checked>Rayleigh1<br>
|
<input type="radio" name="smallscale" value="Rayleigh1">Rayleigh1<br>
|
||||||
<input type="radio" name="smallscale" value="Rayleigh1_corr">Rayleigh1_corr<br>
|
<input type="radio" name="smallscale" value="Rayleigh1_corr">Rayleigh1_corr<br>
|
||||||
<input type="radio" name="smallscale" value="Rayleigh1_anticorr">Rayleigh1_anticorr<br>
|
<input type="radio" name="smallscale" value="Rayleigh1_anticorr">Rayleigh1_anticorr<br>
|
||||||
<input type="radio" name="smallscale" value="Rice8">Rice8<br>
|
<input type="radio" name="smallscale" value="Rice8">Rice8<br>
|
||||||
<input type="radio" name="smallscale" value="Rice1">Rice1<br>
|
<input type="radio" name="smallscale" value="Rice1">Rice1<br>
|
||||||
<input type="radio" name="smallscale" value="Rice1_corr">Rice1_corr<br>
|
<input type="radio" name="smallscale" value="Rice1_corr">Rice1_corr<br>
|
||||||
<input type="radio" name="smallscale" value="Rice1_anticorr">Rice1_anticorr<br>
|
<input type="radio" name="smallscale" value="Rice1_anticorr">Rice1_anticorr<br>
|
||||||
<input type="radio" name="smallscale" value="AWGN">AWGN<br>
|
<input type="radio" name="smallscale" value="AWGN" checked>AWGN<br>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="span-7">
|
<div class="span-7">
|
||||||
<h4><u>Other parameters</u></h4>
|
<h4><u>Other parameters</u></h4>
|
||||||
<label>Wall penetration loss</label><input name="wallpenetloss" id="wallpenetloss" size="3" maxlength="4" value="5" class="required"> dB<span class="message"></span><br>
|
<label>Wall penetration loss</label><input name="wallpenetloss" id="wallpenetloss" size="3" maxlength="4" value="5" class="required"> dB<span class="message"></span><br>
|
||||||
<label>System Bandwidth : </label><input name="sysbw" id="sysbw" size="3" maxlength="4" value="7.68" class="required"> MHz<span class="message"></span><br>
|
<label>System Bandwidth : </label><input name="sysbw" id="sysbw" size="3" maxlength="4" value="5" class="required"> MHz<span class="message"></span><br>
|
||||||
<label>UE Frequency : </label><input name="uefreq" id="uefreq" size="3" maxlength="4" value="1.9" class="required"> GHz<span class="message"></span><br>
|
<label>UE Frequency : </label><input name="uefreq" id="uefreq" size="3" maxlength="4" value="1.9" class="required"> GHz<span class="message"></span><br>
|
||||||
|
<label>Number of RBs DL (6,15,25,50,75,100) : </label><input name="num_rbs_dl" id="num_rbs_dl" size="3" maxlength="4" value="25"><span class="message"></span><br>
|
||||||
|
<label>Target DL MCS : </label><input name="dl_mcs" id="dl_mcs" size="3" maxlength="4" value="20"><span class="message"></span><br>
|
||||||
|
<label>Target UL MCS : </label><input name="ul_mcs" id="ul_mcs" size="3" maxlength="4" value="16"><span class="message"></span><br>
|
||||||
|
<label>SNR : </label><input name="snr" id="snr" size="3" maxlength="4" value="15"><span class="message"></span><br>
|
||||||
|
<label>Transmission Mode (1,2,5,6) : </label><input name="transmission_mode" id="transmission_mode" size="3" maxlength="4" value="1"><span class="message"></span><br>
|
||||||
|
<br><label>Frame Type : </label><br>
|
||||||
|
<input type="radio" name="frame_type" value="1" checked>TDD <label>Frame Config (0-6) : </label><input name="tdd_config" id="tdd_config" size="3" maxlength="4" value="1"><span class="message"></span><br>
|
||||||
|
<input type="radio" name="frame_type" value="0">FDD<br>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="span-10">
|
<div class="span-10">
|
||||||
@@ -161,10 +169,13 @@
|
|||||||
|
|
||||||
<div class="span-7">
|
<div class="span-7">
|
||||||
<label>eNB Initial Distribution : </label><br>
|
<label>eNB Initial Distribution : </label><br>
|
||||||
<input type="radio" name="eNB_initial_distribution" value="random" checked> Random <!--<span id="random" style="display">-> Number of cells :<input name="nbenbs" id="nbenbs" size="1" maxlength="4" value="1" class="required"><span class="message"></span></span>--><br>
|
<input type="radio" name="eNB_initial_distribution" value="fixed" checked> Fixed <br>
|
||||||
<input type="radio" name="eNB_initial_distribution" value="grid" class="disabled"> Grid <!-- <span id="grid" style="display:none">-> Grid X value :<input name="gridx" id="gridx" size="1" maxlength="4" value="1" class="required"><span class="message"></span>Grid Y value :<input name="gridy" id="gridy" size="1" maxlength="4" value="1" class="required"><span class="message"></span></span>--><br>
|
Pos X : <input name="pos_x" id="pos_x" size="4" maxlength="4" value="250" class="required"> m<span class="message"></span><br>
|
||||||
<input type="radio" name="eNB_initial_distribution" value="hexagonal" class="disabled"> Hexagonal <!--<span id="hexagonal" style="display:none">-> Number of Cells :<input name="hexanbcells" id="hexabncells" size="1" maxlength="4" value="1" class="required"><span class="message"></span> Inter eNB distance :<input name="interenbdist" id="interenbdist" size="1" maxlength="4" value="1" class="required"> km<span class="message"></span></span>--><br>
|
Pos Y : <input name="pos_y" id="pos_y" size="4" maxlength="4" value="250" class="required"> m<span class="message"></span><br>
|
||||||
<br>
|
<input type="radio" name="eNB_initial_distribution" value="random"> Random <!--<span id="random" style="display">-> Number of cells :<input name="nbenbs" id="nbenbs" size="1" maxlength="4" value="1" class="required"><span class="message"></span></span>--><br>
|
||||||
|
<input type="radio" name="eNB_initial_distribution" value="grid" class="disabled"> Grid <!-- <span id="grid" style="display:none">-> Grid X value :<input name="gridx" id="gridx" size="1" maxlength="4" value="1" class="required"><span class="message"></span>Grid Y value :<input name="gridy" id="gridy" size="1" maxlength="4" value="1" class="required"><span class="message"></span></span>--><br>
|
||||||
|
<input type="radio" name="eNB_initial_distribution" value="hexagonal" class="disabled"> Hexagonal <!--<span id="hexagonal" style="display:none">-> Number of Cells :<input name="hexanbcells" id="hexabncells" size="1" maxlength="4" value="1" class="required"><span class="message"></span> Inter eNB distance :<input name="interenbdist" id="interenbdist" size="1" maxlength="4" value="1" class="required"> km<span class="message"></span></span>--><br>
|
||||||
|
<br>
|
||||||
|
|
||||||
<label>Random eNB Distribution : </label><br>
|
<label>Random eNB Distribution : </label><br>
|
||||||
Number of Cells : <input name="random_eNB_distr" id="random_eNB_distr" size="1" maxlength="4" value="1"><span class="message"></span><br><br>
|
Number of Cells : <input name="random_eNB_distr" id="random_eNB_distr" size="1" maxlength="4" value="1"><span class="message"></span><br><br>
|
||||||
@@ -310,7 +321,15 @@
|
|||||||
<input name="throughput" value="1" type="checkbox" class="required" > Throughput<span class="message"></span><br>
|
<input name="throughput" value="1" type="checkbox" class="required" > Throughput<span class="message"></span><br>
|
||||||
<input name="latency" value="1" type="checkbox" class="required" > Latency<span class="message"></span><br>
|
<input name="latency" value="1" type="checkbox" class="required" > Latency<span class="message"></span><br>
|
||||||
<input name="lossrate" value="1" type="checkbox" class="required"> Loss Rate<span class="message"></span><br>
|
<input name="lossrate" value="1" type="checkbox" class="required"> Loss Rate<span class="message"></span><br>
|
||||||
<br>
|
<br>
|
||||||
|
<input name="phy_abstraction" value="1" type="checkbox" class="required"> PHY Abstraction<span class="message"></span><br>
|
||||||
|
<input name="profiling" value="1" type="checkbox" class="required" checked> Profiling Statistics<span class="message"></span><br>
|
||||||
|
<input name="pcap_trace" value="1" type="checkbox" class="required"> PCAP Trace<span class="message"></span><br>
|
||||||
|
<br>
|
||||||
|
<input name="cli_enabled" value="1" type="checkbox" class="required"> CLI Enabled<span class="message"></span><br>
|
||||||
|
<input name="cli_start_enb" value="1" type="checkbox" class="required"> CLI Start eNB<span class="message"></span><br>
|
||||||
|
<input name="cli_start_ue" value="1" type="checkbox" class="required"> CLI Start UE<span class="message"></span><br>
|
||||||
|
<br>
|
||||||
<input name="curves" value="1" type="checkbox" class="required"> Show Curves (not working)<span class="message"></span><br>
|
<input name="curves" value="1" type="checkbox" class="required"> Show Curves (not working)<span class="message"></span><br>
|
||||||
</div>
|
</div>
|
||||||
<div class="span-6">
|
<div class="span-6">
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<?php
|
||||||
|
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||||
|
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||||
|
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
||||||
|
?>
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="-1">
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
|
||||||
<title>OpenAirEmulation Scenario Descriptor - Basic Scenario</title>
|
<title>OpenAirEmulation Scenario Descriptor - Basic Scenario</title>
|
||||||
<link type="text/css" rel="stylesheet" media="screen,projection" href="/OSD/css/screen.css?8" />
|
<link type="text/css" rel="stylesheet" media="screen,projection" href="/OSD/css/screen.css?8" />
|
||||||
@@ -42,22 +50,31 @@ $(function(){
|
|||||||
|
|
||||||
// PART 2 - BUTTON eNB TOPOLOGY
|
// PART 2 - BUTTON eNB TOPOLOGY
|
||||||
$(":radio[name='eNB_initial_distribution']").click(function(){
|
$(":radio[name='eNB_initial_distribution']").click(function(){
|
||||||
if ($(":radio[name='eNB_initial_distribution']:checked").val() == 'random') {
|
if ($(":radio[name='eNB_initial_distribution']:checked").val() == 'random') {
|
||||||
$("#grid").hide(1);
|
$("#grid").hide(1);
|
||||||
$("#hexagonal").hide(1);
|
$("#hexagonal").hide(1);
|
||||||
$("#random").show(1);
|
$("#random").hide(1);
|
||||||
}
|
$("#fixed").show(1);
|
||||||
if ($(":radio[name='eNB_initial_distribution']:checked").val() == 'grid') {
|
}
|
||||||
$("#grid").show(1);
|
if ($(":radio[name='eNB_initial_distribution']:checked").val() == 'random') {
|
||||||
$("#hexagonal").hide(1);
|
$("#grid").hide(1);
|
||||||
$("#random").hide(1);
|
$("#hexagonal").hide(1);
|
||||||
}
|
$("#random").show(1);
|
||||||
if ($(":radio[name='eNB_initial_distribution']:checked").val() == 'hexagonal') {
|
$("#fixed").hide(1);
|
||||||
$("#grid").hide(1);
|
}
|
||||||
$("#hexagonal").show(1);
|
if ($(":radio[name='eNB_initial_distribution']:checked").val() == 'grid') {
|
||||||
$("#random").hide(1);
|
$("#grid").show(1);
|
||||||
}
|
$("#hexagonal").hide(1);
|
||||||
});
|
$("#random").hide(1);
|
||||||
|
$("#fixed").hide(1);
|
||||||
|
}
|
||||||
|
if ($(":radio[name='eNB_initial_distribution']:checked").val() == 'hexagonal') {
|
||||||
|
$("#grid").hide(1);
|
||||||
|
$("#hexagonal").show(1);
|
||||||
|
$("#random").hide(1);
|
||||||
|
$("#fixed").hide(1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// PART 2 - BUTTON UE DISTRIBUTION
|
// PART 2 - BUTTON UE DISTRIBUTION
|
||||||
$(":radio[name='uedistr']").click(function(){
|
$(":radio[name='uedistr']").click(function(){
|
||||||
|
|||||||
+188
-34
@@ -1,3 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Eurecom OpenAirInterface
|
||||||
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
/*! \file recep.php
|
||||||
|
* \brief Process the POST of the OSD form.
|
||||||
|
* \author Philippe Foubert & Navid Nikaein & Andre Gomes (One Source)
|
||||||
|
* \date 2014
|
||||||
|
* \version 0.1
|
||||||
|
* \company Eurecom,
|
||||||
|
* \email: openair_tech@eurecom.fr
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
@@ -39,6 +80,16 @@ if ( isset($_POST['lossrate']) && $_POST['lossrate'] == '1' ) { $LOSS_RATE = 1
|
|||||||
if ( isset($_POST['pkttrace']) && $_POST['pkttrace'] == '1' ) { $PKTTRACE = 1; } else { $PKTTRACE = 0; }
|
if ( isset($_POST['pkttrace']) && $_POST['pkttrace'] == '1' ) { $PKTTRACE = 1; } else { $PKTTRACE = 0; }
|
||||||
if ( isset($_POST['bg_traffic']) && $_POST['bg_traffic'] == '1' ) { $BG_TRAFFIC = 1; } else { $BG_TRAFFIC = 0; }
|
if ( isset($_POST['bg_traffic']) && $_POST['bg_traffic'] == '1' ) { $BG_TRAFFIC = 1; } else { $BG_TRAFFIC = 0; }
|
||||||
if ( isset($_POST['curves']) && $_POST['curves'] == '1' ) { $CURVES = enabled; } else { $CURVES = disabled; }
|
if ( isset($_POST['curves']) && $_POST['curves'] == '1' ) { $CURVES = enabled; } else { $CURVES = disabled; }
|
||||||
|
// More parameters
|
||||||
|
if ( isset($_POST['phy_abstraction']) && $_POST['phy_abstraction'] == '1' ) { $PHY_ABSTRACTION = '-a'; } else { $PHY_ABSTRACTION = ''; }
|
||||||
|
if ( isset($_POST['pcap_trace']) && $_POST['pcap_trace'] == '1' ) { $PCAP_TRACE = 1; } else { $PCAP_TRACE = 0; }
|
||||||
|
if ( isset($_POST['profiling']) && $_POST['profiling'] == '1' ) { $PROFILING = 1; } else { $PROFILING = 0; }
|
||||||
|
if ( isset($_POST['dl_mcs'])) { $DL_MCS = '-m' . $_POST['dl_mcs']; } else { $DL_MCS = ''; }
|
||||||
|
if ( isset($_POST['ul_mcs'])) { $UL_MCS = '-t' . $_POST['ul_mcs']; } else { $UL_MCS = ''; }
|
||||||
|
if ( isset($_POST['snr'])) { $SNR = '-s' . $_POST['snr']; } else { $SNR = ''; }
|
||||||
|
if ( isset($_POST['transmission_mode'])) { $TRANSMISSION_MODE = $_POST['transmission_mode']; } else { $TRANSMISSION_MODE = ''; }
|
||||||
|
if ( isset($_POST['frame_type'])) { $FRAME_TYPE = $_POST['frame_type']; } else { $FRAME_TYPE = ''; }
|
||||||
|
if ( isset($_POST['tdd_config'])) { $TDD_CONFIG = '<TDD_CONFIG>'.$_POST['tdd_config'].'</TDD_CONFIG>'; } else { $TDD_CONFIG = ''; }
|
||||||
|
|
||||||
// VARIABLES FOR BOTH WEBPORTAL AND PORTABLE VERSION
|
// VARIABLES FOR BOTH WEBPORTAL AND PORTABLE VERSION
|
||||||
$espace= array(" ");
|
$espace= array(" ");
|
||||||
@@ -48,6 +99,53 @@ $ID = $PERSON.$date;
|
|||||||
$user = $_POST['username'];
|
$user = $_POST['username'];
|
||||||
$XML_FILENAME = str_replace($espace, "", $user).'.'.$date.'.xml';
|
$XML_FILENAME = str_replace($espace, "", $user).'.'.$date.'.xml';
|
||||||
|
|
||||||
|
// eNB Distribution
|
||||||
|
if (isset($_POST['eNB_initial_distribution']) && $_POST['eNB_initial_distribution'] == 'fixed') {
|
||||||
|
$eNB_INITIAL_DISTRIBUTION =
|
||||||
|
'<eNB_INITIAL_DISTRIBUTION>fixed</eNB_INITIAL_DISTRIBUTION>
|
||||||
|
<eNB_INITIAL_COORDINATES>
|
||||||
|
<POS_X>'.nospace($_POST['pos_x']).'</POS_X>
|
||||||
|
<POS_Y>'.nospace($_POST['pos_y']).'</POS_Y>
|
||||||
|
</eNB_INITIAL_COORDINATES>';
|
||||||
|
}
|
||||||
|
elseif (isset($_POST['eNB_initial_distribution']) && $_POST['eNB_initial_distribution'] == 'random') {
|
||||||
|
$eNB_INITIAL_DISTRIBUTION =
|
||||||
|
'<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||||
|
<RANDOM_eNB_DISTRIBUTION>
|
||||||
|
<NUMBER_OF_CELLS>'.nospace($_POST['random_eNB_distr']).'</NUMBER_OF_CELLS>
|
||||||
|
</RANDOM_eNB_DISTRIBUTION>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// RBs
|
||||||
|
if (isset($_POST['num_rbs_dl'])) {
|
||||||
|
$NUMBER_OF_RBS = '<NUMBER_OF_RBS_DL>'.$_POST['num_rbs_dl'].'</NUMBER_OF_RBS_DL>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$NUM_RBS = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// PCAP
|
||||||
|
if ($PCAP_TRACE == 1) {
|
||||||
|
$TRACE_FILE = '<TRACE_FILE>pcap</TRACE_FILE>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$TRACE_FILE = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// CLI
|
||||||
|
if ( isset($_POST['cli_enabled']) && $_POST['cli_enabled'] == '1' ) {
|
||||||
|
if ( isset($_POST['cli_start_enb']) && $_POST['cli_start_enb'] == '1' ) { $CLI_START_ENB = 1; } else { $CLI_START_ENB = 0; }
|
||||||
|
if ( isset($_POST['cli_start_ue']) && $_POST['cli_start_ue'] == '1' ) { $CLI_START_UE = 1; } else { $CLI_START_UE = 0; }
|
||||||
|
$CLI =
|
||||||
|
'<CLI>
|
||||||
|
<START_ENB>'.$CLI_START_ENB.'</START_ENB>
|
||||||
|
<START_UE>'.$CLI_START_UE.'</START_UE>
|
||||||
|
</CLI>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$CLI = '';
|
||||||
|
}
|
||||||
|
|
||||||
// ICI TOUTES LES OPTIONS - ELLES SONT COMMENTEES EN BAS DU FICHIER
|
// ICI TOUTES LES OPTIONS - ELLES SONT COMMENTEES EN BAS DU FICHIER
|
||||||
|
|
||||||
// <!-- Here is the XML template which will be filled in with the user values -->
|
// <!-- Here is the XML template which will be filled in with the user values -->
|
||||||
@@ -66,6 +164,12 @@ $data = '
|
|||||||
<WALL_PENETRATION_LOSS_dB>'.nospace($_POST['wallpenetloss']).'</WALL_PENETRATION_LOSS_dB>
|
<WALL_PENETRATION_LOSS_dB>'.nospace($_POST['wallpenetloss']).'</WALL_PENETRATION_LOSS_dB>
|
||||||
<SYSTEM_BANDWIDTH_MB>'.nospace($_POST['sysbw']).'</SYSTEM_BANDWIDTH_MB>
|
<SYSTEM_BANDWIDTH_MB>'.nospace($_POST['sysbw']).'</SYSTEM_BANDWIDTH_MB>
|
||||||
<SYSTEM_FREQUENCY_GHz>'.nospace($_POST['uefreq']).'</SYSTEM_FREQUENCY_GHz>
|
<SYSTEM_FREQUENCY_GHz>'.nospace($_POST['uefreq']).'</SYSTEM_FREQUENCY_GHz>
|
||||||
|
'.$NUMBER_OF_RBS.'
|
||||||
|
<TRANSMISSION_MODE>'.$TRANSMISSION_MODE.'</TRANSMISSION_MODE>
|
||||||
|
<FRAME_CONFIG>
|
||||||
|
<FRAME_TYPE>'.$FRAME_TYPE.'</FRAME_TYPE>
|
||||||
|
'.$TDD_CONFIG.'
|
||||||
|
</FRAME_CONFIG>
|
||||||
<ANTENNA>
|
<ANTENNA>
|
||||||
<eNB_ANTENNA>
|
<eNB_ANTENNA>
|
||||||
<RX_NOISE_LEVEL_dB>'.nospace($_POST['eNB_RX_noise_power']).'</RX_NOISE_LEVEL_dB>
|
<RX_NOISE_LEVEL_dB>'.nospace($_POST['eNB_RX_noise_power']).'</RX_NOISE_LEVEL_dB>
|
||||||
@@ -106,11 +210,7 @@ $data = '
|
|||||||
</UE_MOVING_DYNAMICS>
|
</UE_MOVING_DYNAMICS>
|
||||||
</UE_MOBILITY>
|
</UE_MOBILITY>
|
||||||
<eNB_MOBILITY>
|
<eNB_MOBILITY>
|
||||||
<eNB_INITIAL_DISTRIBUTION>'.nospace($_POST['eNB_initial_distribution']).'</eNB_INITIAL_DISTRIBUTION>
|
'.nospace($eNB_INITIAL_DISTRIBUTION).'
|
||||||
<RANDOM_eNB_DISTRIBUTION>
|
|
||||||
<NUMBER_OF_CELLS>'.nospace($_POST['random_eNB_distr']).'</NUMBER_OF_CELLS>
|
|
||||||
</RANDOM_eNB_DISTRIBUTION>
|
|
||||||
|
|
||||||
<eNB_MOBILITY_TYPE>'.nospace($_POST['enbmobility']).'</eNB_MOBILITY_TYPE>
|
<eNB_MOBILITY_TYPE>'.nospace($_POST['enbmobility']).'</eNB_MOBILITY_TYPE>
|
||||||
</eNB_MOBILITY>
|
</eNB_MOBILITY>
|
||||||
</MOBILITY>
|
</MOBILITY>
|
||||||
@@ -162,6 +262,8 @@ $data = '
|
|||||||
<EMULATION_CONFIG>
|
<EMULATION_CONFIG>
|
||||||
<EMULATION_TIME_ms>'.nospace($_POST['emutime']).'</EMULATION_TIME_ms>
|
<EMULATION_TIME_ms>'.nospace($_POST['emutime']).'</EMULATION_TIME_ms>
|
||||||
<CURVE>'.$CURVES.'</CURVE>
|
<CURVE>'.$CURVES.'</CURVE>
|
||||||
|
<PROFILING>'.$PROFILING.'</PROFILING>
|
||||||
|
'.$TRACE_FILE.'
|
||||||
<PERFORMANCE_METRICS>
|
<PERFORMANCE_METRICS>
|
||||||
<THROUGHPUT>'.$THROUGHPUT.'</THROUGHPUT>
|
<THROUGHPUT>'.$THROUGHPUT.'</THROUGHPUT>
|
||||||
<LATENCY>'.$LATENCY.'</LATENCY>
|
<LATENCY>'.$LATENCY.'</LATENCY>
|
||||||
@@ -175,6 +277,7 @@ $data = '
|
|||||||
</LOG>
|
</LOG>
|
||||||
<PACKET_TRACE>'.$PKTTRACE.'</PACKET_TRACE>
|
<PACKET_TRACE>'.$PKTTRACE.'</PACKET_TRACE>
|
||||||
<SEED_VALUE>'.nospace($_POST['seedvalue']).'</SEED_VALUE>
|
<SEED_VALUE>'.nospace($_POST['seedvalue']).'</SEED_VALUE>
|
||||||
|
'.$CLI.'
|
||||||
</EMULATION_CONFIG>
|
</EMULATION_CONFIG>
|
||||||
<PROFILE>'.$XML_FILENAME.'</PROFILE>
|
<PROFILE>'.$XML_FILENAME.'</PROFILE>
|
||||||
</OAI_EMULATION>
|
</OAI_EMULATION>
|
||||||
@@ -206,27 +309,82 @@ $RESULTS_PATH_EMULATION = $RESULTS_PATH."/".str_replace($espace, "", $user)."/".
|
|||||||
//$RESULTS_PATH_EMULATION_LOGS = $RESULTS_PATH_EMULATION."LOGS/";
|
//$RESULTS_PATH_EMULATION_LOGS = $RESULTS_PATH_EMULATION."LOGS/";
|
||||||
//$RESULTS_PATH_EMULATION_XML = $RESULTS_PATH_EMULATION."SCENARIO/XML/";
|
//$RESULTS_PATH_EMULATION_XML = $RESULTS_PATH_EMULATION."SCENARIO/XML/";
|
||||||
|
|
||||||
|
// PROFILING and PCAP Copy
|
||||||
|
if ($PROFILING == 1) {
|
||||||
|
$PROFILING_PARSE = '2>profiling.log';
|
||||||
|
$PROFILING_COPY = ' ; cp profiling.log '.$RESULTS_PATH_EMULATION;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$PROFILING_PARSE = '';
|
||||||
|
$PROFILING_COPY = '';
|
||||||
|
}
|
||||||
|
if ($PCAP_TRACE == 1) {
|
||||||
|
$PCAP_COPY = ' ; cp oai_opt.pcap '.$RESULTS_PATH_EMULATION;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$PCAP_COPY = '';
|
||||||
|
}
|
||||||
|
|
||||||
// -1 : portable, 0: web portal, # for templates
|
// -1 : portable, 0: web portal, # for templates
|
||||||
// 2 - STARTING OAISIM
|
// 2 - STARTING OAISIM
|
||||||
// $OAISIM=shell_exec("set -x ; mkdir /tmp/$ID ; cd /tmp/$ID ; export OPENAIR1_DIR=$OPENAIR1_DIR ; export OPENAIR2_DIR=$OPENAIR2_DIR ; export OPENAIR3_DIR=$OPENAIR3_DIR ; export OPENAIR_TARGETS=$OPENAIR_TARGETS ; $OPENAIR_TARGETS/SIMU/USER/oaisim -a -c $XML_FILENAME >oaisim.log ; mv * $RESULTS_PATH_EMULATION_LOGS ; rmdir /tmp/$ID ");
|
// $OAISIM=shell_exec("set -x ; mkdir /tmp/$ID ; cd /tmp/$ID ; export OPENAIR1_DIR=$OPENAIR1_DIR ; export OPENAIR2_DIR=$OPENAIR2_DIR ; export OPENAIR3_DIR=$OPENAIR3_DIR ; export OPENAIR_TARGETS=$OPENAIR_TARGETS ; $OPENAIR_TARGETS/SIMU/USER/oaisim -a -c $XML_FILENAME >oaisim.log ; mv * $RESULTS_PATH_EMULATION_LOGS ; rmdir /tmp/$ID ");
|
||||||
|
|
||||||
$OAISIM="set -x ; mkdir /tmp/$ID ; cd /tmp/$ID ; export OPENAIR1_DIR=$OPENAIR1_DIR ; export OPENAIR2_DIR=$OPENAIR2_DIR ; export OPENAIR3_DIR=$OPENAIR3_DIR ; export OPENAIR_TARGETS=$OPENAIR_TARGETS ; $OPENAIR_TARGETS/SIMU/USER/oaisim -a -c -1 >oaisim.log ; cp oaisim.log $RESULTS_PATH_EMULATION";
|
$OAISIM="set -x ; mkdir /tmp/$ID ; cd /tmp/$ID ; export OPENAIR1_DIR=$OPENAIR1_DIR ; export OPENAIR2_DIR=$OPENAIR2_DIR ; export OPENAIR3_DIR=$OPENAIR3_DIR ; export OPENAIR_TARGETS=$OPENAIR_TARGETS ; $OPENAIR_TARGETS/SIMU/USER/oaisim $PHY_ABSTRACTION $SNR $DL_MCS $UL_MCS -c -1 >oaisim.log ".$PROFILING_PARSE." ; cp oaisim.log $RESULTS_PATH_EMULATION".$PROFILING_COPY.$PCAP_COPY;
|
||||||
|
|
||||||
//echo $OAISIM;
|
//echo $OAISIM;
|
||||||
|
|
||||||
shell_exec($OAISIM);
|
shell_exec($OAISIM);
|
||||||
|
|
||||||
// APACHE VARIABLES
|
// Get hostname
|
||||||
$RESULTS_PATH="http://localhost/results/";
|
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
|
||||||
$XMLFILE_PATH="http://localhost/xmlfile/";
|
$hostname = gethostname();
|
||||||
|
}
|
||||||
|
elseif (version_compare(PHP_VERSION, '4.2.0') >= 0) {
|
||||||
|
$hostname = php_uname('n');
|
||||||
|
}
|
||||||
|
elseif (version_compare(PHP_VERSION, '4.2.0') < 0) {
|
||||||
|
$hostname = getenv('HOSTNAME');
|
||||||
|
if(!$hostname) $hostname = trim(`hostname`);
|
||||||
|
if(!$hostname) $hostname = exec('echo $HOSTNAME');
|
||||||
|
if(!$hostname) $hostname = preg_replace('#^\w+\s+(\w+).*$#', '$1', exec('uname -a'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// APACHE VARIABLES
|
||||||
|
$RESULTS_PATH="http://".$hostname."/results/";
|
||||||
|
$XMLFILE_PATH="http://".$hostname."/xmlfile/";
|
||||||
|
|
||||||
|
// PROFILING and PCAP Results
|
||||||
|
if ($PROFILING == 1) {
|
||||||
|
$PROFILING_OUTPUT = '
|
||||||
|
<div align="center" class="notice span-9">
|
||||||
|
<br>
|
||||||
|
<p>Here are the performance profiling statistics :
|
||||||
|
<br>
|
||||||
|
<a href="'.$RESULTS_PATH.str_replace($espace, "", $user).'/'.$date.'/profiling.log" target="_blank">profiling.log</a></p>
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$PROFILING_OUTPUT = '';
|
||||||
|
}
|
||||||
|
if ($PCAP_TRACE == 1) {
|
||||||
|
$PCAP_OUTPUT = '
|
||||||
|
<div align="center" class="notice span-9">
|
||||||
|
<br>
|
||||||
|
<p>Here is the PCAP File :
|
||||||
|
<br>
|
||||||
|
<a href="'.$RESULTS_PATH.str_replace($espace, "", $user).'/'.$date.'/oai_opt.pcap" target="_blank">oai_opt.pcap</a></p>
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$PCAP_OUTPUT = '';
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// 3 - DISPLAY RESULTS
|
// 3 - DISPLAY RESULTS
|
||||||
//
|
//
|
||||||
|
|
||||||
// THE FIRST SQUARE - XML FILE
|
// THE FIRST SQUARE - XML FILE
|
||||||
echo '
|
echo '
|
||||||
|
|
||||||
<div class=" span-50">
|
<div class=" span-50">
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
@@ -237,33 +395,29 @@ echo '
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div align="center" class=" span-10">
|
<div align="center" class=" span-10">
|
||||||
<div class="success span-9">
|
<div class="success span-9">
|
||||||
<br>
|
<br>
|
||||||
<p>Here is the XML file of your OpenAirEmulation :
|
<p>Here is the XML file of your OpenAirEmulation :
|
||||||
<br>
|
<br>
|
||||||
<a href="'.$RESULTS_PATH.str_replace($espace, "", $user).'/'.$date.'/'.$XML_FILENAME.'" target="_blank">'.$XML_FILENAME.'</a></p>
|
<a href="'.$RESULTS_PATH.str_replace($espace, "", $user).'/'.$date.'/'.$XML_FILENAME.'" target="_blank">'.$XML_FILENAME.'</a></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div align="center" class="info span-9">
|
<div align="center" class="info span-9">
|
||||||
<br>
|
<br>
|
||||||
<p>Here is the output of your OpenAirEmulation :
|
<p>Here is the output of your OpenAirEmulation :
|
||||||
<br>
|
<br>
|
||||||
<a href="'.$RESULTS_PATH.str_replace($espace, "", $user).'/'.$date.'/oaisim.log" target="_blank">oaisim.log</a></p>
|
<a href="'.$RESULTS_PATH.str_replace($espace, "", $user).'/'.$date.'/oaisim.log" target="_blank">oaisim.log</a></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div align="center" class="notice span-9">
|
'.$PROFILING_OUTPUT.'
|
||||||
<br>
|
|
||||||
<p>For the future:
|
|
||||||
<br>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class=" span-10">
|
'.$PCAP_OUTPUT.'
|
||||||
<br>
|
|
||||||
</div>
|
<div class=" span-10">
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ fc=fopen("/tmp/otg.log","w");;
|
|||||||
rx_loss_rate_pkts(i,j,k);
|
rx_loss_rate_pkts(i,j,k);
|
||||||
average_pkt_jitter(i,j,k);
|
average_pkt_jitter(i,j,k);
|
||||||
|
|
||||||
// LOG_I(OTG,"KPI: (src=%d, dst=%d, traffic=%d) NB packet TX= %d, NB packet RX= %d\n ", i, j, k,otg_info->tx_num_pkt[i][j][k], otg_info->rx_num_pkt[i][j][k]);
|
// LOG_I(OTG,"KPI: (src=%d, dst=%d, traffic=%d) NB packet TX= %d, NB packet RX= %d\n ",i, j, k,otg_info->tx_num_pkt[i][j][k], otg_info->rx_num_pkt[i][j][k]);
|
||||||
|
|
||||||
if (otg_multicast_info->tx_throughput[i][j]>0) {
|
if (otg_multicast_info->tx_throughput[i][j]>0) {
|
||||||
//multicast
|
//multicast
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Active_eNBs = ( "eNB_Eurecom_0");
|
Active_eNBs = ( "eNB_Eurecom_1");
|
||||||
# Asn1_verbosity, choice in: none, info, annoying
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
Asn1_verbosity = "none";
|
Asn1_verbosity = "none";
|
||||||
eNBs =
|
eNBs =
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
<EMULATION_CONFIG>
|
<EMULATION_CONFIG>
|
||||||
<EMULATION_TIME_ms>10000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
<EMULATION_TIME_ms>10000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||||
<CURVE>disable</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
<CURVE>enabled</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||||
<PERFORMANCE_METRICS>
|
<PERFORMANCE_METRICS>
|
||||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||||
|
|||||||
@@ -228,6 +228,7 @@ OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_config.o
|
|||||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/sinr_sim.o
|
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/sinr_sim.o
|
||||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/cor_SF_sim.o
|
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/cor_SF_sim.o
|
||||||
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_functions.o
|
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/oaisim_functions.o
|
||||||
|
OAISIM_OBJS_COMMON += $(OPENAIR_TARGETS)/SIMU/USER/event_handler.o
|
||||||
|
|
||||||
OAISIM_OBJS = $(OPENAIR_TARGETS)/SIMU/USER/oaisim.o
|
OAISIM_OBJS = $(OPENAIR_TARGETS)/SIMU/USER/oaisim.o
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
#include "oaisim.h"
|
|
||||||
#include "UTIL/FIFO/pad_list.h"
|
|
||||||
|
|
||||||
void add_event(struct Event event);
|
|
||||||
|
|
||||||
void schedule(enum Event_Type type, int frame, char * key, void* value);
|
|
||||||
|
|
||||||
void schedule_end_of_simulation(End_Of_Sim_Event_Type type, int value);
|
|
||||||
|
|
||||||
int end_of_simulation();
|
|
||||||
|
|
||||||
void update_omg_model(char * key, void * value);
|
|
||||||
|
|
||||||
void update_otg_model(char * key, void * value);
|
|
||||||
@@ -1,37 +1,75 @@
|
|||||||
#include "discrete_event_generator.h"
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Eurecom OpenAirInterface
|
||||||
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
/*! \file event_handler.c
|
||||||
|
* \brief event handler primitives
|
||||||
|
* \author Navid Nikaein and Mohamed Said MOSLI BOUKSIAA,
|
||||||
|
* \date 2014
|
||||||
|
* \version 0.5
|
||||||
|
* @ingroup _oai
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
extern frame_t frame;
|
#include "event_handler.h"
|
||||||
End_Of_Sim_Event end_event; //Could later be a list of condition_events (if the end condition is more complicated)
|
|
||||||
Event_List event_list;
|
|
||||||
|
|
||||||
void add_event(struct Event event) {
|
//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_elt * counter = event_list.head;
|
Event_List_t event_list;
|
||||||
Event_elt * previous = counter;
|
|
||||||
Event_elt * elt = malloc(sizeof(Event_elt));
|
|
||||||
|
|
||||||
while (counter != NULL) {
|
void add_event(Event_t event) {
|
||||||
if ((counter->event).frame > event.frame) break;
|
|
||||||
//else if ((counter->event).next_slot > event.next_slot) break;
|
Event_elt_t * counter = event_list.head;
|
||||||
else {
|
Event_elt_t * previous = counter;
|
||||||
previous = counter;
|
Event_elt_t * elt = malloc(sizeof(Event_elt_t));
|
||||||
counter = counter->next;
|
|
||||||
}
|
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;
|
|
||||||
|
elt->event = event;
|
||||||
if (event_list.head != NULL)
|
|
||||||
event_list_add_element(elt, previous, &event_list);
|
if (event_list.head != NULL)
|
||||||
else
|
event_list_add_element(elt, previous, &event_list);
|
||||||
event_list_add_head(elt, &event_list);
|
else
|
||||||
|
event_list_add_head(elt, &event_list);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void schedule(enum Event_Type type, int frame, char * key, void * value) {
|
void schedule(Event_Type_t type, int frame, char * key, void * value) {
|
||||||
Event event;
|
Event_t event;
|
||||||
event.frame = frame;
|
event.frame = frame;
|
||||||
if (key == NULL) { //Global model update
|
if (key == NULL) { //Global model update
|
||||||
event.key = NULL;
|
event.key = NULL;
|
||||||
@@ -44,25 +82,130 @@ void schedule(enum Event_Type type, int frame, char * key, void * value) {
|
|||||||
add_event(event);
|
add_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void schedule_end_of_simulation(End_Of_Sim_Event_Type type, int value) {
|
/*
|
||||||
end_event.type = type;
|
* this function can reschedule events in the future to build a desired (more dynamic) scenario
|
||||||
end_event.value = value;
|
* TODO: make sure that OCG OAI_Emulation is decoupled with the local vars
|
||||||
|
*/
|
||||||
|
void schedule_events(){
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 1: vars needed for future changes
|
||||||
|
*/
|
||||||
|
|
||||||
|
// overall config associated with OAI_ET
|
||||||
|
// OAI_Emulation * oai_frame_1000;
|
||||||
|
|
||||||
|
// specific config
|
||||||
|
/*
|
||||||
|
* associated with SYS_ET
|
||||||
|
*/
|
||||||
|
//Environment_System_Config * system_frame_200;
|
||||||
|
/*
|
||||||
|
* associated with TOPO_ET
|
||||||
|
*/
|
||||||
|
//Topology_Config *topology_frame_10;
|
||||||
|
/*
|
||||||
|
* associated with APP_ET
|
||||||
|
*/
|
||||||
|
//Application_Config *application_frame_20;
|
||||||
|
/*
|
||||||
|
* associated with EMU_ET
|
||||||
|
*/
|
||||||
|
//Emulation_Config * emulation_frame_100;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 2: set the desired future changes in the vars
|
||||||
|
*/
|
||||||
|
// i.e. optionally provide an XML file and update OCG vars
|
||||||
|
|
||||||
|
//mob_frame_10 -> ...
|
||||||
|
//application_frame_30 -> ...
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Step 3: schedule the execution of changes
|
||||||
|
*/
|
||||||
|
|
||||||
|
// general OAI dynamic configuration
|
||||||
|
|
||||||
|
//schedule(OAI_ET, 1000, NULL, oai_frame_1000);
|
||||||
|
//schedule(SYS_ET, 200, NULL, system_frame_200);
|
||||||
|
//schedule(TOPO_ET, 10, NULL, topology_frame_10);
|
||||||
|
//schedule(APP_ET, 20, NULL, application_frame_20);
|
||||||
|
//schedule(EMU_ET, 100, NULL,emulation_frame_100);
|
||||||
|
|
||||||
|
// protocol dynamic configuration
|
||||||
|
//schedule(MAC_ET, 100, NULL,mac_frame_100);
|
||||||
|
|
||||||
|
|
||||||
|
//event_list_display(&event_list);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int end_of_simulation() {
|
void execute_events(frame_t frame){
|
||||||
switch (end_event.type) {
|
|
||||||
case FRAME:
|
Event_elt_t *user_defined_event;
|
||||||
if (frame == end_event.value)
|
Event_t event;
|
||||||
return 1;
|
|
||||||
break;
|
while ((user_defined_event = event_list_get_head(&event_list)) != NULL) {
|
||||||
|
|
||||||
/* default:
|
event = user_defined_event->event;
|
||||||
return 0;*/
|
|
||||||
|
if (event.frame == frame) {
|
||||||
|
switch (event.type) {
|
||||||
|
case OAI_ET:
|
||||||
|
update_oai_model(event.key, event.value);
|
||||||
|
user_defined_event = event_list_remove_head(&event_list);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SYS_ET:
|
||||||
|
update_sys_model(event.key, event.value);
|
||||||
|
user_defined_event = event_list_remove_head(&event_list);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TOPO_ET:
|
||||||
|
update_topo_model(event.key, event.value); //implement it with assigning the new values to that of oai_emulation & second thing is to ensure mob model is always read from oai_emulation
|
||||||
|
user_defined_event = event_list_remove_head(&event_list);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case APP_ET:
|
||||||
|
update_app_model(event.key, event.value);
|
||||||
|
user_defined_event = event_list_remove_head(&event_list);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EMU_ET:
|
||||||
|
update_emu_model(event.key, event.value);
|
||||||
|
user_defined_event = event_list_remove_head(&event_list);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MAC_ET:
|
||||||
|
update_mac(event.key, event.value);
|
||||||
|
user_defined_event = event_list_remove_head(&event_list);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default :
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_omg_model(char * key, void * value) {
|
void update_mac(char * key, void * value) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_oai_model(char * key, void * value) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_sys_model(char * key, void * value) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void update_topo_model(char * key, void * value) {
|
||||||
printf("\n\n\nA NEW MOB MODEL\n\n\n");
|
printf("\n\n\nA NEW MOB MODEL\n\n\n");
|
||||||
/*
|
/*
|
||||||
if (key != NULL) { //Global model update
|
if (key != NULL) { //Global model update
|
||||||
@@ -127,7 +270,7 @@ void update_omg_model(char * key, void * value) {
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_otg_model(char * key, void * value) {
|
void update_app_model(char * key, void * value) {
|
||||||
printf("\n\n\nA NEW APP MODEL\n\n\n");
|
printf("\n\n\nA NEW APP MODEL\n\n\n");
|
||||||
//int i;
|
//int i;
|
||||||
/*
|
/*
|
||||||
@@ -329,3 +472,8 @@ void update_otg_model(char * key, void * value) {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void update_emu_model(char * key, void * value) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Eurecom OpenAirInterface
|
||||||
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
/*! \file event_handler.h
|
||||||
|
* \brief primitives to handle event acting on oai
|
||||||
|
* \author Navid Nikaein and Mohamed Said MOSLI BOUKSIAA,
|
||||||
|
* \date 2014
|
||||||
|
* \version 0.5
|
||||||
|
* @ingroup _oai
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "oaisim.h"
|
||||||
|
#include "UTIL/FIFO/pad_list.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void add_event(Event_t event);
|
||||||
|
|
||||||
|
void schedule(Event_Type_t type, int frame, char * key, void* value);
|
||||||
|
|
||||||
|
void schedule_events(void);
|
||||||
|
|
||||||
|
void execute_events(frame_t frame);
|
||||||
|
|
||||||
|
|
||||||
|
void update_oai_model(char * key, void * value);
|
||||||
|
|
||||||
|
void update_sys_model(char * key, void * value);
|
||||||
|
|
||||||
|
void update_topo_model(char * key, void * value);
|
||||||
|
|
||||||
|
void update_app_model(char * key, void * value);
|
||||||
|
|
||||||
|
void update_emu_model(char * key, void * value);
|
||||||
|
|
||||||
|
void update_mac(char * key, void * value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
void schedule_end_of_simulation(End_Of_Sim_Event_Type type, int value);
|
||||||
|
|
||||||
|
int end_of_simulation();
|
||||||
|
*/
|
||||||
@@ -1,3 +1,32 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Eurecom OpenAirInterface
|
||||||
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -8,6 +37,7 @@
|
|||||||
#include <cblas.h>
|
#include <cblas.h>
|
||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
|
|
||||||
|
#include "event_handler.h"
|
||||||
#include "SIMULATION/RF/defs.h"
|
#include "SIMULATION/RF/defs.h"
|
||||||
#include "PHY/types.h"
|
#include "PHY/types.h"
|
||||||
#include "PHY/defs.h"
|
#include "PHY/defs.h"
|
||||||
@@ -556,7 +586,11 @@ void *l2l1_task(void *args_p) {
|
|||||||
}
|
}
|
||||||
} while(message_p != NULL);
|
} while(message_p != NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//Run the aperiodic user-defined events
|
||||||
|
if (oai_emulation.info.oeh_enabled == 1)
|
||||||
|
execute_events(frame);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Handling the cooperation Flag
|
// Handling the cooperation Flag
|
||||||
if (cooperation_flag == 2)
|
if (cooperation_flag == 2)
|
||||||
@@ -1075,6 +1109,10 @@ int main(int argc, char **argv) {
|
|||||||
smbv_init_config(smbv_fname, smbv_nframes);
|
smbv_init_config(smbv_fname, smbv_nframes);
|
||||||
smbv_write_config_from_frame_parms(smbv_fname, &PHY_vars_eNB_g[0]->lte_frame_parms);
|
smbv_write_config_from_frame_parms(smbv_fname, &PHY_vars_eNB_g[0]->lte_frame_parms);
|
||||||
#endif
|
#endif
|
||||||
|
// add events to future event list: Currently not used
|
||||||
|
if (oai_emulation.info.oeh_enabled == 1)
|
||||||
|
schedule_events();
|
||||||
|
|
||||||
// oai performance profiler is enabled
|
// oai performance profiler is enabled
|
||||||
if (oai_emulation.info.opp_enabled == 1)
|
if (oai_emulation.info.opp_enabled == 1)
|
||||||
reset_opp_meas();
|
reset_opp_meas();
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ void do_DL_sig(double **r_re0,double **r_im0,double **r_re,double **r_im,double
|
|||||||
void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant);//Abstraction changes
|
void init_ue(node_desc_t *ue_data, UE_Antenna ue_ant);//Abstraction changes
|
||||||
void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant);//Abstraction changes
|
void init_enb(node_desc_t *enb_data, eNB_Antenna enb_ant);//Abstraction changes
|
||||||
void extract_position(Node_list input_node_list, node_desc_t**, int nb_nodes);//Abstraction changes
|
void extract_position(Node_list input_node_list, node_desc_t**, int nb_nodes);//Abstraction changes
|
||||||
void get_beta_map();//Abstraction changes
|
void get_beta_map(void);//Abstraction changes
|
||||||
void get_MIESM_param(void);
|
void get_MIESM_param(void);
|
||||||
|
|
||||||
void init_snr(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint8_t, uint16_t, uint8_t);//Abstraction changes
|
void init_snr(channel_desc_t *, node_desc_t *, node_desc_t *, double*, double*, uint8_t, uint16_t, uint8_t);//Abstraction changes
|
||||||
@@ -42,13 +42,12 @@ void calc_path_loss(node_desc_t* node_tx, node_desc_t* node_rx, channel_desc_t *
|
|||||||
|
|
||||||
void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, frame_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms);
|
void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, frame_t frame, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms);
|
||||||
|
|
||||||
#ifdef OPENAIR2
|
|
||||||
int omv_write (int pfd, Node_list enb_node_list, Node_list ue_node_list, Data_Flow_Unit omv_data);
|
|
||||||
void omv_end (int pfd, Data_Flow_Unit omv_data);
|
|
||||||
|
|
||||||
void reset_opp_meas(void);
|
void reset_opp_meas(void);
|
||||||
void print_opp_meas(void);
|
void print_opp_meas(void);
|
||||||
|
|
||||||
|
#ifdef OPENAIR2
|
||||||
|
int omv_write (int pfd, Node_list enb_node_list, Node_list ue_node_list, Data_Flow_Unit omv_data);
|
||||||
|
void omv_end (int pfd, Data_Flow_Unit omv_data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,43 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Eurecom OpenAirInterface
|
||||||
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
/*! \file oaisim_config.c
|
||||||
|
* \brief Configuration of oaisim
|
||||||
|
* \author Navid Nikaein & Andre Gomes (One source)
|
||||||
|
* \date 2014
|
||||||
|
* \version 1.0
|
||||||
|
* \company Eurecom
|
||||||
|
* \email: openair_tech@eurecom.fr
|
||||||
|
* \note
|
||||||
|
* \warning
|
||||||
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -165,7 +205,7 @@ mapping packet_gen_names[] =
|
|||||||
{NULL, -1}
|
{NULL, -1}
|
||||||
};
|
};
|
||||||
|
|
||||||
void init_oai_emulation() {
|
void init_oai_emulation(void) {
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -195,7 +235,6 @@ void init_oai_emulation() {
|
|||||||
oai_emulation.environment_system_config.system_bandwidth_MB = 7.68;
|
oai_emulation.environment_system_config.system_bandwidth_MB = 7.68;
|
||||||
oai_emulation.environment_system_config.system_frequency_GHz = 1.9;
|
oai_emulation.environment_system_config.system_frequency_GHz = 1.9;
|
||||||
|
|
||||||
|
|
||||||
oai_emulation.topology_config.area.x_m = 500;
|
oai_emulation.topology_config.area.x_m = 500;
|
||||||
oai_emulation.topology_config.area.y_m = 500;
|
oai_emulation.topology_config.area.y_m = 500;
|
||||||
oai_emulation.topology_config.network_type.selected_option = "homogeneous";
|
oai_emulation.topology_config.network_type.selected_option = "homogeneous";
|
||||||
@@ -218,6 +257,8 @@ void init_oai_emulation() {
|
|||||||
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = 10.0;
|
oai_emulation.topology_config.mobility.UE_mobility.UE_moving_dynamics.max_journey_time_ms = 10.0;
|
||||||
oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option = "STATIC";
|
oai_emulation.topology_config.mobility.eNB_mobility.eNB_mobility_type.selected_option = "STATIC";
|
||||||
oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option = "random";
|
oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option = "random";
|
||||||
|
oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_x = 1;
|
||||||
|
oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_y = 1;
|
||||||
oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = 1;
|
oai_emulation.topology_config.mobility.eNB_mobility.random_eNB_distribution.number_of_cells = 1;
|
||||||
oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells = 1;
|
oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.number_of_cells = 1;
|
||||||
oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km = 1;
|
oai_emulation.topology_config.mobility.eNB_mobility.hexagonal_eNB_distribution.inter_eNB_distance_km = 1;
|
||||||
@@ -338,6 +379,7 @@ void init_oai_emulation() {
|
|||||||
oai_emulation.info.omv_enabled =0; // v flag
|
oai_emulation.info.omv_enabled =0; // v flag
|
||||||
oai_emulation.info.vcd_enabled=0;
|
oai_emulation.info.vcd_enabled=0;
|
||||||
oai_emulation.info.opp_enabled=0;
|
oai_emulation.info.opp_enabled=0;
|
||||||
|
oai_emulation.info.oeh_enabled=0;
|
||||||
|
|
||||||
oai_emulation.info.cba_group_active=0;
|
oai_emulation.info.cba_group_active=0;
|
||||||
oai_emulation.info.eMBMS_active_state=0;
|
oai_emulation.info.eMBMS_active_state=0;
|
||||||
@@ -392,7 +434,7 @@ void init_oai_emulation() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void oaisim_config() {
|
void oaisim_config(void) {
|
||||||
|
|
||||||
// init log gen first
|
// init log gen first
|
||||||
//initialize the log generator
|
//initialize the log generator
|
||||||
@@ -436,7 +478,7 @@ void oaisim_config() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int olg_config() {
|
int olg_config(void) {
|
||||||
int comp;
|
int comp;
|
||||||
int ocg_log_level = map_str_to_int(log_level_names, oai_emulation.emulation_config.log_emu.level);
|
int ocg_log_level = map_str_to_int(log_level_names, oai_emulation.emulation_config.log_emu.level);
|
||||||
int ocg_log_verbosity = map_str_to_int(log_verbosity_names, oai_emulation.emulation_config.log_emu.verbosity);
|
int ocg_log_verbosity = map_str_to_int(log_verbosity_names, oai_emulation.emulation_config.log_emu.verbosity);
|
||||||
@@ -510,7 +552,7 @@ int olg_config() {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ocg_config_env() {
|
int ocg_config_env(void) {
|
||||||
// int func related to channel desc from oaisim.c could be moved here
|
// int func related to channel desc from oaisim.c could be moved here
|
||||||
|
|
||||||
if (oai_emulation.info.ocg_enabled){
|
if (oai_emulation.info.ocg_enabled){
|
||||||
@@ -531,7 +573,7 @@ int ocg_config_env() {
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
int ocg_config_topo() {
|
int ocg_config_topo(void) {
|
||||||
|
|
||||||
// omg
|
// omg
|
||||||
init_omg_global_params();
|
init_omg_global_params();
|
||||||
@@ -571,8 +613,13 @@ int ocg_config_topo() {
|
|||||||
LOG_I(OMG,"TRACE file at %s\n", omg_param_list.mobility_file);
|
LOG_I(OMG,"TRACE file at %s\n", omg_param_list.mobility_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
omg_param_list.mobility_type = oai_emulation.info.omg_model_enb;
|
omg_param_list.mobility_type = oai_emulation.info.omg_model_enb;
|
||||||
omg_param_list.nodes_type = eNB; //eNB or eNB + RN
|
omg_param_list.nodes_type = eNB; //eNB or eNB + RN
|
||||||
|
if (strcmp(oai_emulation.topology_config.mobility.eNB_mobility.eNB_initial_distribution.selected_option, "fixed") == 0) {
|
||||||
|
omg_param_list.user_fixed = true;
|
||||||
|
omg_param_list.fixed_X = (double)oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_x;
|
||||||
|
omg_param_list.fixed_Y = (double)oai_emulation.topology_config.mobility.eNB_mobility.fixed_eNB_distribution.pos_y;
|
||||||
|
}
|
||||||
omg_param_list.nodes = oai_emulation.info.nb_enb_local + oai_emulation.info.nb_rn_local;
|
omg_param_list.nodes = oai_emulation.info.nb_enb_local + oai_emulation.info.nb_rn_local;
|
||||||
omg_param_list.seed = oai_emulation.info.seed; // specific seed for enb and ue to avoid node overlapping
|
omg_param_list.seed = oai_emulation.info.seed; // specific seed for enb and ue to avoid node overlapping
|
||||||
|
|
||||||
@@ -1057,7 +1104,7 @@ g_otg->application_idx[source_id_index][destination_id_index]+=1;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ocg_config_emu(){
|
int ocg_config_emu(void){
|
||||||
|
|
||||||
if (oai_emulation.emulation_config.emulation_time_ms != 0) {
|
if (oai_emulation.emulation_config.emulation_time_ms != 0) {
|
||||||
oai_emulation.info.n_frames = (int) oai_emulation.emulation_config.emulation_time_ms / 10; // configure the number of frame
|
oai_emulation.info.n_frames = (int) oai_emulation.emulation_config.emulation_time_ms / 10; // configure the number of frame
|
||||||
@@ -1083,6 +1130,9 @@ int ocg_config_emu(){
|
|||||||
oai_emulation.info.cli_start_ue[0]);
|
oai_emulation.info.cli_start_ue[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oai_emulation.info.opp_enabled)
|
||||||
|
opp_enabled = 1;
|
||||||
|
|
||||||
//bin/LOG_I(OCG, "OPT output file directory = %s\n", oai_emulation.info.output_path);
|
//bin/LOG_I(OCG, "OPT output file directory = %s\n", oai_emulation.info.output_path);
|
||||||
oai_emulation.info.opt_enabled = ( oai_emulation.emulation_config.packet_trace.enabled == 0) ? oai_emulation.info.opt_enabled : oai_emulation.emulation_config.packet_trace.enabled;
|
oai_emulation.info.opt_enabled = ( oai_emulation.emulation_config.packet_trace.enabled == 0) ? oai_emulation.info.opt_enabled : oai_emulation.emulation_config.packet_trace.enabled;
|
||||||
if (oai_emulation.info.opt_enabled == 1) {
|
if (oai_emulation.info.opt_enabled == 1) {
|
||||||
|
|||||||
@@ -30,11 +30,11 @@
|
|||||||
|
|
||||||
/*! \file oaisim_config.h
|
/*! \file oaisim_config.h
|
||||||
* \brief configure an emulation
|
* \brief configure an emulation
|
||||||
* \author Lusheng Wang
|
* \author navid nikaein & Lusheng Wang
|
||||||
* \date 2006-2010
|
* \date 2006-2010
|
||||||
* \version 4.0
|
* \version 4.0
|
||||||
* \company Eurecom
|
* \company Eurecom
|
||||||
* \email: wangl@eurecom.fr
|
* \email: openair_tech@eurecom.fr
|
||||||
* \note this a note
|
* \note this a note
|
||||||
* \bug this is a bug
|
* \bug this is a bug
|
||||||
* \warning this is a warning
|
* \warning this is a warning
|
||||||
@@ -59,19 +59,20 @@ The current sturcture of oaisim is shown by the figure.
|
|||||||
#include "UTIL/OMG/omg.h"
|
#include "UTIL/OMG/omg.h"
|
||||||
#include "UTIL/CLI/cli_if.h"
|
#include "UTIL/CLI/cli_if.h"
|
||||||
#include "SIMULATION/ETH_TRANSPORT/defs.h"
|
#include "SIMULATION/ETH_TRANSPORT/defs.h"
|
||||||
|
#include "PHY/defs.h"
|
||||||
|
|
||||||
/** @defgroup _init_oai Initial oaisim
|
/** @defgroup _init_oai Initial oaisim
|
||||||
* @ingroup _fn
|
* @ingroup _fn
|
||||||
* @brief Initialize all the parameters before start an emulation
|
* @brief Initialize all the parameters before start an emulation
|
||||||
* @{*/
|
* @{*/
|
||||||
void init_oai_emulation();
|
void init_oai_emulation(void);
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
/** @defgroup _config_oaisim All the configurations for an emulation
|
/** @defgroup _config_oaisim All the configurations for an emulation
|
||||||
* @ingroup _fn
|
* @ingroup _fn
|
||||||
* @brief This is the function that calls all the other configuration functions
|
* @brief This is the function that calls all the other configuration functions
|
||||||
* @{*/
|
* @{*/
|
||||||
void oaisim_config();
|
void oaisim_config(void);
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
|
|
||||||
@@ -79,11 +80,11 @@ void oaisim_config();
|
|||||||
* @ingroup _fn
|
* @ingroup _fn
|
||||||
* @brief There are the functions to configure different various modules in the emulator
|
* @brief There are the functions to configure different various modules in the emulator
|
||||||
* @{*/
|
* @{*/
|
||||||
int olg_config();
|
int olg_config(void);
|
||||||
int ocg_config_env();
|
int ocg_config_env(void);
|
||||||
int ocg_config_omg();
|
int ocg_config_omg(void);
|
||||||
int ocg_config_topo();
|
int ocg_config_topo(void);
|
||||||
int ocg_config_app();
|
int ocg_config_app(void);
|
||||||
int ocg_config_emu();
|
int ocg_config_emu(void);
|
||||||
/* @}*/
|
/* @}*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,33 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Eurecom OpenAirInterface
|
||||||
|
Copyright(c) 1999 - 2014 Eurecom
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Contact Information
|
||||||
|
Openair Admin: openair_admin@eurecom.fr
|
||||||
|
Openair Tech : openair_tech@eurecom.fr
|
||||||
|
Forums : http://forums.eurecom.fsr/openairinterface
|
||||||
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -137,6 +167,7 @@ void get_simulation_options(int argc, char *argv[]) {
|
|||||||
|
|
||||||
LONG_OPTION_PDNC_PERIOD,
|
LONG_OPTION_PDNC_PERIOD,
|
||||||
LONG_OPTION_OMG_PERIOD,
|
LONG_OPTION_OMG_PERIOD,
|
||||||
|
LONG_OPTION_OEH_ENABLED,
|
||||||
|
|
||||||
LONG_OPTION_ENB_RAL_LISTENING_PORT,
|
LONG_OPTION_ENB_RAL_LISTENING_PORT,
|
||||||
LONG_OPTION_ENB_RAL_IP_ADDRESS,
|
LONG_OPTION_ENB_RAL_IP_ADDRESS,
|
||||||
@@ -160,8 +191,9 @@ void get_simulation_options(int argc, char *argv[]) {
|
|||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"enb-conf", required_argument, 0, LONG_OPTION_ENB_CONF},
|
{"enb-conf", required_argument, 0, LONG_OPTION_ENB_CONF},
|
||||||
|
|
||||||
{"pdcp_period", required_argument, 0, LONG_OPTION_PDNC_PERIOD},
|
{"pdcp-period", required_argument, 0, LONG_OPTION_PDNC_PERIOD},
|
||||||
{"omg_period", required_argument, 0, LONG_OPTION_OMG_PERIOD},
|
{"omg-period", required_argument, 0, LONG_OPTION_OMG_PERIOD},
|
||||||
|
{"oeh-enabled", no_argument, 0, LONG_OPTION_OEH_ENABLED},
|
||||||
|
|
||||||
{"enb-ral-listening-port", required_argument, 0, LONG_OPTION_ENB_RAL_LISTENING_PORT},
|
{"enb-ral-listening-port", required_argument, 0, LONG_OPTION_ENB_RAL_LISTENING_PORT},
|
||||||
{"enb-ral-ip-address", required_argument, 0, LONG_OPTION_ENB_RAL_IP_ADDRESS},
|
{"enb-ral-ip-address", required_argument, 0, LONG_OPTION_ENB_RAL_IP_ADDRESS},
|
||||||
@@ -180,6 +212,7 @@ void get_simulation_options(int argc, char *argv[]) {
|
|||||||
{"ue-mihf-remote-port", required_argument, 0, LONG_OPTION_UE_MIHF_REMOTE_PORT},
|
{"ue-mihf-remote-port", required_argument, 0, LONG_OPTION_UE_MIHF_REMOTE_PORT},
|
||||||
{"ue-mihf-ip-address", required_argument, 0, LONG_OPTION_UE_MIHF_IP_ADDRESS},
|
{"ue-mihf-ip-address", required_argument, 0, LONG_OPTION_UE_MIHF_IP_ADDRESS},
|
||||||
{"ue-mihf-id", required_argument, 0, LONG_OPTION_UE_MIHF_ID},
|
{"ue-mihf-id", required_argument, 0, LONG_OPTION_UE_MIHF_ID},
|
||||||
|
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -205,7 +238,10 @@ void get_simulation_options(int argc, char *argv[]) {
|
|||||||
printf("OMG period is %d\n", omg_period);
|
printf("OMG period is %d\n", omg_period);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LONG_OPTION_OEH_ENABLED:
|
||||||
|
oai_emulation.info.oeh_enabled = 1;
|
||||||
|
break;
|
||||||
#if defined(ENABLE_RAL)
|
#if defined(ENABLE_RAL)
|
||||||
case LONG_OPTION_ENB_RAL_LISTENING_PORT:
|
case LONG_OPTION_ENB_RAL_LISTENING_PORT:
|
||||||
if (optarg) {
|
if (optarg) {
|
||||||
@@ -475,11 +511,11 @@ void get_simulation_options(int argc, char *argv[]) {
|
|||||||
}
|
}
|
||||||
oai_emulation.info.opt_mode = opt_type;
|
oai_emulation.info.opt_mode = opt_type;
|
||||||
break;
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
// openair performane profiler
|
// openair performane profiler
|
||||||
oai_emulation.info.opp_enabled = 1; // this var is used for OCG
|
oai_emulation.info.opp_enabled = 1; // this var is used for OCG
|
||||||
opp_enabled = 1; // this is the global var used by oaisim
|
opp_enabled = 1; // this is the global var used by oaisim
|
||||||
break;
|
break;
|
||||||
case 'Q':
|
case 'Q':
|
||||||
//eMBMS_active=1;
|
//eMBMS_active=1;
|
||||||
// 0 : not used (default), 1: eMBMS and RRC enabled, 2: eMBMS relaying and RRC enabled, 3: eMBMS enabled, RRC disabled, 4: eMBMS relaying enabled, RRC disabled
|
// 0 : not used (default), 1: eMBMS and RRC enabled, 2: eMBMS relaying and RRC enabled, 3: eMBMS enabled, RRC disabled, 4: eMBMS relaying enabled, RRC disabled
|
||||||
@@ -512,7 +548,7 @@ void get_simulation_options(int argc, char *argv[]) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 't':
|
case 't':
|
||||||
target_ul_mcs = atoi (optarg);
|
target_ul_mcs = atoi (optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'T':
|
case 'T':
|
||||||
|
|||||||
Reference in New Issue
Block a user