* adding additional tests for 10MHz and 20MHz channel BW
* applying patches 8 and 9 contributed from S. Held git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6536 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -654,6 +654,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
||||
AssertError (0, parse_errors ++,
|
||||
"Failed to parse eNB configuration file %s, %u th enb\n",
|
||||
lib_config_file_name_pP, i);
|
||||
continue; // FIXME this prevents segfaults below, not sure what happens after function exit
|
||||
}
|
||||
// search if in active list
|
||||
for (j=0; j < num_enb_properties; j++) {
|
||||
@@ -768,6 +769,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
||||
AssertError (0, parse_errors ++,
|
||||
"Failed to parse eNB configuration file %s, Component Carrier %d!\n",
|
||||
lib_config_file_name_pP, enb_properties.properties[enb_properties_index]->nb_cc++);
|
||||
continue; // FIXME this prevents segfaults below, not sure what happens after function exit
|
||||
}
|
||||
enb_properties.properties[enb_properties_index]->nb_cc++;
|
||||
|
||||
@@ -1633,6 +1635,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) {
|
||||
AssertError (0, parse_errors ++,
|
||||
"Failed to parse eNB configuration file %s, %u th enb %u th mme address !\n",
|
||||
lib_config_file_name_pP, i, j);
|
||||
continue; // FIXME will prevent segfaults below, not sure what happens at function exit...
|
||||
}
|
||||
enb_properties.properties[enb_properties_index]->nb_mme += 1;
|
||||
|
||||
|
||||
@@ -37,7 +37,9 @@
|
||||
|
||||
#ifndef ENB_CONFIG_H_
|
||||
#define ENB_CONFIG_H_
|
||||
#include <netinet/in.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "commonDef.h"
|
||||
#include "platform_types.h"
|
||||
|
||||
@@ -134,8 +134,8 @@ int rrc_mac_config_req(module_id_t Mod_id, eNB_flag_t eNB_flagP,uint8_t UE_id,ui
|
||||
}
|
||||
}
|
||||
|
||||
if ((tdd_Config!=NULL)||(SIwindowsize!=NULL)||(SIperiod!=NULL)){
|
||||
if (eNB_flagP==1)
|
||||
if (tdd_Config && SIwindowsize && SIperiod) {
|
||||
if (eNB_flagP == ENB_FLAG_YES)
|
||||
mac_xface->phy_config_sib1_eNB(Mod_id,0,tdd_Config,*SIwindowsize,*SIperiod);
|
||||
else
|
||||
mac_xface->phy_config_sib1_ue(Mod_id,0,eNB_index,tdd_Config,*SIwindowsize,*SIperiod);
|
||||
@@ -226,7 +226,8 @@ int rrc_mac_config_req(module_id_t Mod_id, eNB_flag_t eNB_flagP,uint8_t UE_id,ui
|
||||
UE_mac_inst[Mod_id].scheduling_info.prohibitPHR_SF = get_sf_prohibitPHR_Timer(UE_mac_inst[Mod_id].scheduling_info.prohibitPHR_Timer);
|
||||
UE_mac_inst[Mod_id].scheduling_info.PathlossChange_db = get_db_dl_PathlossChange(UE_mac_inst[Mod_id].scheduling_info.PathlossChange);
|
||||
LOG_D(MAC,"[UE %d] config PHR (%d): periodic %d (SF) prohibit %d (SF) pathlosschange %d (db) \n",
|
||||
Mod_id,mac_MainConfig->phr_Config->present,
|
||||
Mod_id,
|
||||
(mac_MainConfig->phr_Config)?mac_MainConfig->phr_Config->present:-1,
|
||||
UE_mac_inst[Mod_id].scheduling_info.periodicPHR_SF,
|
||||
UE_mac_inst[Mod_id].scheduling_info.prohibitPHR_SF,
|
||||
UE_mac_inst[Mod_id].scheduling_info.PathlossChange_db);
|
||||
|
||||
@@ -283,6 +283,7 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
|
||||
switch (mac_xface->lte_frame_parms->tdd_config) {
|
||||
case 2:
|
||||
schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,7,nCCE);
|
||||
// no break here!
|
||||
case 5:
|
||||
schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
|
||||
fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,0,mbsfn_status);
|
||||
@@ -307,8 +308,11 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
|
||||
case 1:
|
||||
// schedule_RA(module_idP,frameP,subframeP,nprb,nCCE);
|
||||
schedule_ulsch(module_idP,frameP,cooperation_flag,subframeP,8,nCCE);
|
||||
// no break here!
|
||||
case 2:
|
||||
// no break here!
|
||||
case 4:
|
||||
// no break here!
|
||||
case 5:
|
||||
schedule_ue_spec(module_idP,frameP,subframeP,nprb,nCCE,mbsfn_status);
|
||||
fill_DLSCH_dci(module_idP,frameP,subframeP,RBalloc,1,mbsfn_status);
|
||||
|
||||
@@ -389,6 +389,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
|
||||
}
|
||||
LOG_I(MAC,"[eNB %d][RAPROC] Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n",
|
||||
module_idP,frameP,subframeP,TBsize,rrc_sdu_length,msg4_header,msg4_padding,msg4_post_padding);
|
||||
DevAssert( UE_id != UE_INDEX_INVALID ); // FIXME not sure how to gracefully return
|
||||
offset = generate_dlsch_header((unsigned char*)eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0],
|
||||
1, //num_sdus
|
||||
&rrc_sdu_length, //
|
||||
|
||||
@@ -71,7 +71,7 @@ void schedule_SI(module_id_t module_idP,frame_t frameP, unsigned int *nprbP,unsi
|
||||
|
||||
|
||||
|
||||
unsigned char bcch_sdu_length;
|
||||
int8_t bcch_sdu_length;
|
||||
int mcs = -1;
|
||||
void *BCCH_alloc_pdu;
|
||||
int CC_id;
|
||||
|
||||
@@ -2146,14 +2146,16 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
|
||||
|
||||
unsigned char *get_dlsch_sdu(module_id_t module_idP, int CC_id, frame_t frameP, rnti_t rntiP, uint8_t TBindex) {
|
||||
|
||||
int UE_id;
|
||||
eNB_MAC_INST *eNB=&eNB_mac_inst[module_idP];
|
||||
|
||||
if (rntiP==SI_RNTI) {
|
||||
LOG_D(MAC,"[eNB %d] Frame %d Get DLSCH sdu for BCCH \n",module_idP,frameP);
|
||||
|
||||
return((unsigned char *)&eNB->common_channels[CC_id].BCCH_pdu.payload[0]);
|
||||
} else if ((UE_id = find_UE_id(module_idP,rntiP)) != UE_INDEX_INVALID ){
|
||||
}
|
||||
|
||||
int UE_id = find_UE_id(module_idP,rntiP);
|
||||
if (UE_id != -1) {
|
||||
LOG_D(MAC,"[eNB %d] Frame %d: CC_id %d Get DLSCH sdu for rnti %x => UE_id %d\n",module_idP,frameP,CC_id,rntiP,UE_id);
|
||||
return((unsigned char *)&eNB->UE_list.DLSCH_pdu[CC_id][TBindex][UE_id].payload[0]);
|
||||
} else {
|
||||
@@ -2191,6 +2193,7 @@ void set_ue_dai(sub_frame_t subframeP,
|
||||
case 0:
|
||||
if ((subframeP==0)||(subframeP==1)||(subframeP==3)||(subframeP==5)||(subframeP==6)||(subframeP==8))
|
||||
UE_list->UE_template[CC_id][UE_id].DAI = 0;
|
||||
break;
|
||||
case 1:
|
||||
if ((subframeP==0)||(subframeP==4)||(subframeP==5)||(subframeP==9))
|
||||
UE_list->UE_template[CC_id][UE_id].DAI = 0;
|
||||
@@ -2214,6 +2217,7 @@ void set_ue_dai(sub_frame_t subframeP,
|
||||
case 6:
|
||||
if ((subframeP==0)||(subframeP==1)||(subframeP==5)||(subframeP==6)||(subframeP==9))
|
||||
UE_list->UE_template[CC_id][UE_id].DAI = 0;
|
||||
break;
|
||||
default:
|
||||
UE_list->UE_template[CC_id][UE_id].DAI = 0;
|
||||
LOG_N(MAC,"unknow TDD config %d\n",tdd_config);
|
||||
|
||||
@@ -362,8 +362,10 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag) {
|
||||
|
||||
prev_i = prev(listP,nodeiP,ul_flag);
|
||||
prev_j = prev(listP,nodejP,ul_flag);
|
||||
if ((prev_i<0) || (prev_j<0))
|
||||
mac_xface->macphy_exit("");
|
||||
if ((prev_i<0) || (prev_j<0)) {
|
||||
mac_xface->macphy_exit("");
|
||||
return; // not reached
|
||||
}
|
||||
|
||||
if (ul_flag == 0){
|
||||
next_i = listP->next[nodeiP];
|
||||
@@ -471,7 +473,7 @@ void SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, rnti_t rntiP
|
||||
int UE_id = find_UE_id(mod_idP, rntiP);
|
||||
UE_list_t *UE_list = &eNB_mac_inst[mod_idP].UE_list;
|
||||
|
||||
if (UE_id != UE_INDEX_INVALID ) {
|
||||
if (UE_id != -1) {
|
||||
LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d on CC_id %d\n",mod_idP,rntiP,frameP,subframeP, UE_id,cc_idP);
|
||||
UE_list->UE_template[cc_idP][UE_id].ul_SR = 1;
|
||||
UE_list->UE_template[cc_idP][UE_id].ul_active = TRUE;
|
||||
|
||||
@@ -94,7 +94,7 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_idP,frame_t frameP,rnti_t rntiP,uint8
|
||||
|
||||
switch (rx_ces[i]) { // implement and process BSR + CRNTI +
|
||||
case POWER_HEADROOM:
|
||||
if (UE_id != UE_INDEX_INVALID ){
|
||||
if (UE_id != -1){
|
||||
UE_list->UE_template[CC_idP][UE_id].phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET;
|
||||
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received PHR PH = %d (db)\n", rx_ces[i], UE_list->UE_template[CC_idP][UE_id].phr_info);
|
||||
UE_list->UE_template[CC_idP][UE_id].phr_info_configured=1;
|
||||
@@ -107,7 +107,7 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_idP,frame_t frameP,rnti_t rntiP,uint8
|
||||
break;
|
||||
case TRUNCATED_BSR:
|
||||
case SHORT_BSR: {
|
||||
if (UE_id != UE_INDEX_INVALID ){
|
||||
if (UE_id != -1){
|
||||
uint8_t lcgid;
|
||||
lcgid = (payload_ptr[0] >> 6);
|
||||
LOG_D(MAC, "[eNB] MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n",
|
||||
@@ -119,7 +119,7 @@ void rx_sdu(module_id_t enb_mod_idP,int CC_idP,frame_t frameP,rnti_t rntiP,uint8
|
||||
payload_ptr += 1;//sizeof(SHORT_BSR); // fixme
|
||||
} break;
|
||||
case LONG_BSR:
|
||||
if (UE_id != UE_INDEX_INVALID ){
|
||||
if (UE_id != -1){
|
||||
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] = ((payload_ptr[0] & 0xFC) >> 2);
|
||||
UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1] =
|
||||
((payload_ptr[0] & 0x03) << 4) | ((payload_ptr[1] & 0xF0) >> 4);
|
||||
|
||||
@@ -47,7 +47,7 @@ int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP,uint8_t CC_id) {
|
||||
if (CC_id>0) {
|
||||
LOG_E(MAC,"Transmission on secondary CCs is not supported yet\n");
|
||||
mac_xface->macphy_exit("MAC FATAL CC_id>0");
|
||||
return;
|
||||
return 0; // not reached
|
||||
}
|
||||
|
||||
if (UE_mac_inst[module_idP].radioResourceConfigCommon)
|
||||
@@ -66,7 +66,7 @@ int8_t get_deltaP_rampup(module_id_t module_idP,uint8_t CC_id) {
|
||||
if (CC_id>0) {
|
||||
LOG_E(MAC,"Transmission on secondary CCs is not supported yet\n");
|
||||
mac_xface->macphy_exit("MAC FATAL CC_id>0");
|
||||
return;
|
||||
return 0; // not reached
|
||||
}
|
||||
|
||||
LOG_D(MAC,"[PUSCH]%d dB\n",UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER<<1);
|
||||
|
||||
@@ -91,16 +91,16 @@ int openair2_stats_read(char *buffer, char **my_buffer, off_t off, int length)
|
||||
|
||||
len+=sprintf(&buffer[len],"UE TTI: %d\n",UE_mac_inst[ue_id].frame);
|
||||
|
||||
for (enb_id= 0; enb_id <NUM_eNB_INST;enb_id++) {
|
||||
for (enb_id= 0; enb_id <NB_SIG_CNX_UE;enb_id++) {
|
||||
|
||||
switch (mac_get_rrc_status(eNB_id,0,ue_id) > RRC_CONNECTED) {
|
||||
switch (mac_get_rrc_status(ue_id,0,enb_id) > RRC_CONNECTED) {
|
||||
case RRC_RECONFIGURED :
|
||||
case RRC_CONNECTED:
|
||||
case RRC_SI_RECEIVED:
|
||||
case RRC_IDLE:
|
||||
break;
|
||||
|
||||
if (mac_get_rrc_status(eNB_id,0,ue_id) > RRC_CONNECTED) {
|
||||
if (mac_get_rrc_status(ue_id,0,enb_id) > RRC_CONNECTED) {
|
||||
// if (UE_mac_inst[ue_id].Dcch_lchan[CH_index].Active==1) {
|
||||
len+=sprintf(&buffer[len],"eNB %d: Wideband SINR %d dB---\n",
|
||||
CH_index,UE_mac_inst[Mod_id].Def_meas[CH_index].Wideband_sinr);
|
||||
|
||||
@@ -249,8 +249,10 @@ int maxcqi(module_id_t Mod_id,int32_t UE_id) {
|
||||
for (n=0;n<UE_list->numactiveCCs[UE_id];n++) {
|
||||
CC_id = UE_list->ordered_CCids[n][UE_id];
|
||||
eNB_UE_stats = mac_xface->get_eNB_UE_stats(Mod_id,CC_id,UE_RNTI(Mod_id,UE_id));
|
||||
if (eNB_UE_stats==NULL)
|
||||
if (eNB_UE_stats==NULL) {
|
||||
mac_xface->macphy_exit("maxcqi: could not get eNB_UE_stats\n");
|
||||
return 0; // not reached
|
||||
}
|
||||
if (eNB_UE_stats->DL_cqi[0] > CQI)
|
||||
CQI = eNB_UE_stats->DL_cqi[0];
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@ void get_prach_resources(module_id_t module_idP,
|
||||
else {
|
||||
LOG_E(MAC,"[UE %d] FATAL radioResourceConfigCommon is NULL !!!\n",module_idP);
|
||||
mac_xface->macphy_exit("MAC FATAL radioResourceConfigCommon is NULL");
|
||||
return; // not reached
|
||||
}
|
||||
|
||||
if (rach_ConfigDedicated) { // This is for network controlled Mobility, later
|
||||
|
||||
@@ -219,7 +219,7 @@ uint32_t ue_get_SR(module_id_t module_idP,int CC_id,frame_t frameP,uint8_t eNB_i
|
||||
if (CC_id>0) {
|
||||
LOG_E(MAC,"Transmission on secondary CCs is not supported yet\n");
|
||||
mac_xface->macphy_exit("MAC FATAL CC_id>0");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// determin the measurement gap
|
||||
@@ -1733,7 +1733,7 @@ boolean_t update_bsr(module_id_t module_idP, frame_t frameP, uint8_t lcid, uint
|
||||
boolean_t sr_pending = FALSE;
|
||||
|
||||
|
||||
if ((lcg_id < 0) || (lcg_id > MAX_NUM_LCGID) )
|
||||
if ((lcg_id < 0) || (lcg_id >= MAX_NUM_LCGID) )
|
||||
return sr_pending;
|
||||
// fixme: need a better way to reset
|
||||
if ((lcid == DCCH) || (lcid == DTCH)){
|
||||
@@ -1766,10 +1766,13 @@ uint8_t locate (const uint32_t *table, int size, int value){
|
||||
uint8_t ju, jm, jl;
|
||||
int ascend;
|
||||
|
||||
DevAssert( size > 0 );
|
||||
DevAssert( size <= 256 );
|
||||
|
||||
if (value == 0) return 0; //elseif (value > 150000) return 63;
|
||||
|
||||
jl = 0; // lower bound
|
||||
ju = size ;// upper bound
|
||||
jl = 0; // lower bound
|
||||
ju = size - 1; // upper bound
|
||||
ascend = (table[ju] >= table[jl]) ? 1 : 0; // determine the order of the the table: 1 if ascending order of table, 0 otherwise
|
||||
|
||||
while (ju-jl > 1) { //If we are not yet done,
|
||||
|
||||
@@ -655,6 +655,7 @@ boolean_t pdcp_data_ind(
|
||||
module_id_t src_id, dst_id;
|
||||
int ctime;
|
||||
|
||||
DevAssert(pdcp_p);
|
||||
if (pdcp_p->rlc_mode == RLC_MODE_AM ) {
|
||||
pdcp_p->last_submitted_pdcp_rx_sn = sequence_number;
|
||||
}
|
||||
|
||||
@@ -157,8 +157,7 @@ config_req_rlc_am (
|
||||
config_am_pP->t_status_prohibit);
|
||||
} else {
|
||||
LOG_E(RLC, PROTOCOL_CTXT_FMT RB_AM_FMT" CONFIG_REQ RLC NOT FOUND\n",
|
||||
PROTOCOL_CTXT_ARGS(ctxt_pP),
|
||||
RB_AM_ARGS(l_rlc_p));
|
||||
PROTOCOL_CTXT_ARGS(ctxt_pP) );
|
||||
}
|
||||
}
|
||||
uint32_t pollPDU_tab[PollPDU_pInfinity+1]={4,8,16,32,64,128,256,1024}; // What is PollPDU_pInfinity??? 1024 for now
|
||||
@@ -224,8 +223,7 @@ void config_req_rlc_am_asn1 (
|
||||
}
|
||||
} else {
|
||||
LOG_E(RLC, PROTOCOL_CTXT_FMT RB_AM_FMT "CONFIG_REQ RLC NOT FOUND\n",
|
||||
PROTOCOL_CTXT_ARGS(ctxt_pP),
|
||||
RB_AM_ARGS(l_rlc_p));
|
||||
PROTOCOL_CTXT_ARGS(ctxt_pP) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -417,9 +417,10 @@ rlc_um_mac_status_indication (const protocol_ctxt_t* const ctxt_pP, void *rlc_pP
|
||||
status_resp.head_sdu_remaining_size_to_send = 0;
|
||||
status_resp.head_sdu_creation_time = 0;
|
||||
status_resp.head_sdu_is_segmented = 0;
|
||||
status_resp.rlc_info.rlc_protocol_state = ((rlc_um_entity_t *) rlc_pP)->protocol_state;
|
||||
|
||||
if (rlc_pP) {
|
||||
status_resp.rlc_info.rlc_protocol_state = ((rlc_um_entity_t *) rlc_pP)->protocol_state;
|
||||
|
||||
rlc_p = (rlc_um_entity_t *) rlc_pP;
|
||||
rlc_um_check_timer_dar_time_out(ctxt_pP, rlc_p);
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ void config_req_rlc_um_asn1 (
|
||||
(ctxt_pP->enb_flag) ? "eNB" : "UE",
|
||||
ctxt_pP->enb_module_id,
|
||||
ctxt_pP->ue_module_id,
|
||||
(dl_rlc_pP->t_Reordering<31)?t_Reordering_tab[dl_rlc_pP->t_Reordering]:-1,
|
||||
(dl_rlc_pP && dl_rlc_pP->t_Reordering<31)?t_Reordering_tab[dl_rlc_pP->t_Reordering]:-1,
|
||||
ctxt_pP->enb_module_id,
|
||||
ctxt_pP->ue_module_id,
|
||||
rb_idP);
|
||||
|
||||
@@ -628,10 +628,15 @@ void rrc_lite_out_of_sync_ind(module_id_t Mod_idP, frame_t frameP, uint16_t eNB_
|
||||
//-------------------------------------------------------------------------------------------//
|
||||
int mac_get_rrc_lite_status(module_id_t Mod_idP,eNB_flag_t enb_flagP,uint8_t index){
|
||||
//-------------------------------------------------------------------------------------------//
|
||||
if(enb_flagP == ENB_FLAG_YES)
|
||||
if (enb_flagP == ENB_FLAG_YES) {
|
||||
DevAssert( Mod_idP < NB_eNB_INST );
|
||||
DevAssert( index < NUMBER_OF_UE_MAX );
|
||||
return(eNB_rrc_inst[Mod_idP].Info.UE[index].Status);
|
||||
else
|
||||
} else {
|
||||
DevAssert( Mod_idP < NB_UE_INST );
|
||||
DevAssert( index < NB_SIG_CNX_UE );
|
||||
return(UE_rrc_inst[Mod_idP].Info[index].State);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------//
|
||||
|
||||
@@ -131,8 +131,8 @@ typedef struct rrc_ral_threshold_key_s {
|
||||
|
||||
//#define NUM_PRECONFIGURED_LCHAN (NB_CH_CX*2) //BCCH, CCCH
|
||||
|
||||
#define UE_MODULE_INVALID ((module_id_t) ~0)
|
||||
#define UE_INDEX_INVALID ((module_id_t) ~0)
|
||||
#define UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!!
|
||||
#define UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1
|
||||
|
||||
typedef enum UE_STATE_e {
|
||||
RRC_INACTIVE=0,
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#define NULL 0
|
||||
|
||||
#include "list.h"
|
||||
#include <string.h>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/*
|
||||
@@ -48,10 +49,9 @@ void
|
||||
list_init (list_t * listP, char *nameP)
|
||||
{
|
||||
//-----------------------------------------------------------------------------
|
||||
int i = 0;
|
||||
|
||||
if (nameP) {
|
||||
while ((listP->name[i] = nameP[i]) && (i++ < LIST_NAME_MAX_CHAR));
|
||||
strncpy( listP->name, nameP, LIST_NAME_MAX_CHAR );
|
||||
listP->name[LIST_NAME_MAX_CHAR-1] = 0; // terminate string
|
||||
}
|
||||
listP->tail = NULL;
|
||||
listP->head = NULL;
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/*
|
||||
@@ -33,10 +35,9 @@ void
|
||||
list2_init (list2_t * listP, char *nameP)
|
||||
{
|
||||
//-----------------------------------------------------------------------------
|
||||
unsigned char i = 0;
|
||||
|
||||
if (nameP) {
|
||||
while ((listP->name[i] = nameP[i]) && (i++ < LIST_NAME_MAX_CHAR));
|
||||
strncpy( listP->name, nameP, LIST_NAME_MAX_CHAR );
|
||||
listP->name[LIST_NAME_MAX_CHAR-1] = 0; // terminate string
|
||||
}
|
||||
listP->tail = NULL;
|
||||
listP->head = NULL;
|
||||
|
||||
@@ -366,7 +366,7 @@ The following diagram is based on graphviz (http://www.graphviz.org/), you need
|
||||
typedef struct
|
||||
{
|
||||
char *command;
|
||||
char *file;
|
||||
char *file; //!< 256 bytes memory (see oaisim_config.c)
|
||||
int start;
|
||||
int end;
|
||||
int step;
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
*/
|
||||
|
||||
#include "id_manager.h"
|
||||
#include "assertions.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -135,13 +136,8 @@ void remove_oaiID_by_SUMO(char *sumo_id, IDManagerPtr ID_manager) {
|
||||
char* get_sumo_entry(int oai_id, Map_list Map_Vector) {
|
||||
Map_list tmp = Map_Vector;
|
||||
|
||||
if(Map_Vector == NULL) {
|
||||
printf("bug here..should not be NULL");
|
||||
}
|
||||
|
||||
if(Map_Vector->map == NULL) {
|
||||
printf("bug here..map should have been initialized");
|
||||
}
|
||||
AssertFatal( Map_Vector, "bug here..should not be NULL" );
|
||||
AssertFatal( Map_Vector->map, "bug here..map should have been initialized" );
|
||||
|
||||
if (tmp->map->oai_id == oai_id) {
|
||||
//printf("got it...at the head and value is %s \n",tmp->map->sumo_id);
|
||||
|
||||
@@ -78,7 +78,7 @@ init_omg_global_params (void)
|
||||
job_vector_end[mob_t] = NULL;
|
||||
}
|
||||
|
||||
for (node_t = eNB; node_t < MAX_NUM_MOB_TYPES; node_t++)
|
||||
for (node_t = eNB; node_t < MAX_NUM_NODE_TYPES; node_t++)
|
||||
{
|
||||
node_vector[node_t] = NULL;
|
||||
node_vector_end[node_t] = NULL;
|
||||
|
||||
@@ -345,13 +345,12 @@ update_rwalk_nodes (double cur_time)
|
||||
node_struct *my_node;
|
||||
while (tmp != NULL && done == 0)
|
||||
{
|
||||
my_node = (node_struct *) tmp->pair->b;
|
||||
|
||||
//case1:time to next event equals to current time
|
||||
if (tmp->pair != NULL
|
||||
&& ((double) tmp->pair->next_event_t >= cur_time - omg_eps)
|
||||
&& ((double) tmp->pair->next_event_t <= cur_time + omg_eps))
|
||||
{
|
||||
my_node = tmp->pair->b;
|
||||
if (my_node->mobile == 1)
|
||||
sleep_rwalk_node (tmp->pair, cur_time);
|
||||
else
|
||||
@@ -364,6 +363,7 @@ update_rwalk_nodes (double cur_time)
|
||||
&& (cur_time - omg_eps) > tmp->pair->next_event_t)
|
||||
{
|
||||
|
||||
my_node = tmp->pair->b;
|
||||
while (cur_time >= tmp->pair->next_event_t)
|
||||
{
|
||||
if (my_node->mobile == 1)
|
||||
|
||||
@@ -320,13 +320,12 @@ update_rwp_nodes (double cur_time)
|
||||
node_struct *my_node;
|
||||
while (tmp != NULL && done == 0)
|
||||
{
|
||||
my_node = (node_struct *) tmp->pair->b;
|
||||
|
||||
//case1:time to next event equals to current time
|
||||
if (tmp->pair != NULL
|
||||
&& ((double) tmp->pair->next_event_t >= cur_time - omg_eps)
|
||||
&& ((double) tmp->pair->next_event_t <= cur_time + omg_eps))
|
||||
{
|
||||
my_node = tmp->pair->b;
|
||||
if (my_node->mobile == 1)
|
||||
sleep_rwp_node (tmp->pair, cur_time);
|
||||
else
|
||||
@@ -339,6 +338,7 @@ update_rwp_nodes (double cur_time)
|
||||
&& (cur_time - omg_eps) > tmp->pair->next_event_t)
|
||||
{
|
||||
|
||||
my_node = tmp->pair->b;
|
||||
while (cur_time >= tmp->pair->next_event_t)
|
||||
{
|
||||
if (my_node->mobile == 1)
|
||||
|
||||
@@ -525,13 +525,12 @@ update_steadystaterwp_nodes (double cur_time)
|
||||
node_struct *my_node;
|
||||
while (tmp != NULL && done == 0)
|
||||
{
|
||||
my_node = (node_struct *) tmp->pair->b;
|
||||
|
||||
//case1:time to next event equals to current time
|
||||
if (tmp->pair != NULL
|
||||
&& ((double) tmp->pair->next_event_t >= cur_time - omg_eps)
|
||||
&& ((double) tmp->pair->next_event_t <= cur_time + omg_eps))
|
||||
{
|
||||
my_node = tmp->pair->b;
|
||||
if (my_node->mobile == 1)
|
||||
sleep_rwp_node (tmp->pair, cur_time);
|
||||
else
|
||||
@@ -544,6 +543,7 @@ update_steadystaterwp_nodes (double cur_time)
|
||||
&& (cur_time - omg_eps) > tmp->pair->next_event_t)
|
||||
{
|
||||
|
||||
my_node = tmp->pair->b;
|
||||
while (cur_time >= tmp->pair->next_event_t)
|
||||
{
|
||||
if (my_node->mobile == 1)
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "sumo.h"
|
||||
|
||||
#include "client_traci_OMG.h"
|
||||
#include "assertions.h"
|
||||
|
||||
|
||||
int
|
||||
@@ -170,6 +171,9 @@ start_sumo_generator (omg_global_param omg_param_list)
|
||||
node->generator = SUMO; // SUMO
|
||||
node->mob = mobility;
|
||||
|
||||
DevAssert( SUMO >= sizeof(node_vector_end) ); // FIXME node_vector_end is declared with MAX_NUM_NODE_TYPES elements, but here we are indexing with SUMO from enum mobility_types
|
||||
DevAssert( SUMO >= sizeof(node_vector) ); // FIXME node_vector is declared with MAX_NUM_NODE_TYPES elements, but here we are indexing with SUMO from enum mobility_types
|
||||
|
||||
node_vector_end[SUMO] =
|
||||
(node_list *) add_entry (node, node_vector_end[SUMO]);
|
||||
|
||||
|
||||
@@ -469,6 +469,7 @@ void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
|
||||
1, 0, 1, //guint8 isPredefinedData, guint8 retx, guint8 crcStatus
|
||||
oob_event,oob_event_value,
|
||||
pdu_buffer, pdu_buffer_size);
|
||||
break;
|
||||
case OPT_PCAP:
|
||||
if (file_fd == NULL) {
|
||||
return;
|
||||
@@ -496,15 +497,16 @@ int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p)
|
||||
{
|
||||
subframesSinceCaptureStart = 0;
|
||||
|
||||
if (ip != NULL) {
|
||||
strcpy(&in_path[0], path);
|
||||
} else {
|
||||
strcpy(&in_path[0], "oai_opt.pcap");
|
||||
}
|
||||
if (path != NULL) {
|
||||
strcpy(&in_ip[0], ip);
|
||||
strncpy( in_path, sizeof(in_path), path );
|
||||
in_path[sizeof(in_path) - 1] = 0; // terminate string
|
||||
} else {
|
||||
strcpy(&in_ip[0], "127.0.0.1");
|
||||
strcpy( in_path, "oai_opt.pcap" );
|
||||
}
|
||||
if (ip != NULL) {
|
||||
strncpy( in_ip, sizeof(in_ip), ip );
|
||||
} else {
|
||||
strcpy( in_ip, "127.0.0.1" );
|
||||
}
|
||||
if (port != NULL) {
|
||||
in_port = atoi(port);
|
||||
@@ -544,6 +546,8 @@ int init_opt(char *path, char *ip, char *port, radio_type_t radio_type_p)
|
||||
break;
|
||||
case OPT_TSHARK:
|
||||
LOG_D(OPT, "Tshark is currently not supported\n");
|
||||
opt_type = OPT_NONE;
|
||||
break;
|
||||
default:
|
||||
opt_type = OPT_NONE;
|
||||
break;
|
||||
|
||||
+6
-14
@@ -127,15 +127,12 @@ int get_ctime(void){
|
||||
void free_otg(){
|
||||
int i,j,k;
|
||||
|
||||
for (i=0; i<g_otg->num_nodes; i++){
|
||||
if (NULL != g_otg->dst_ip[i]){
|
||||
free(g_otg->dst_ip[i]);
|
||||
}
|
||||
}
|
||||
for (i=0; i<g_otg->num_nodes; i++)
|
||||
for (j=0; j<g_otg->num_nodes; j++)
|
||||
free( g_otg->dst_ip[i][j] );
|
||||
|
||||
if (NULL !=g_otg){
|
||||
free(g_otg);
|
||||
}
|
||||
free( g_otg );
|
||||
g_otg = 0;
|
||||
|
||||
LOG_D(OTG,"DEBUG TARMA: free_otg() called \n");
|
||||
for(i=0; i<NUMBER_OF_eNB_MAX + NUMBER_OF_UE_MAX; i++){
|
||||
@@ -157,11 +154,6 @@ void free_otg(){
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL !=otg_info){
|
||||
free(otg_info);
|
||||
}
|
||||
|
||||
|
||||
|
||||
free(otg_info);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user