From f2b3597b5532d18a140c9d09e0196fcb9b5493c3 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Tue, 10 Nov 2015 10:19:07 +0100 Subject: [PATCH 01/11] This is a very basic fix, more work is needed. The problem seems that we reuse HARQ processes too early. For example, at subframe 0 we allocate PID 0. At subframe 4 we receive an ACK. At subframe 5 we may well reallocate this PID. It seems category 3 UEs don't like that. They expect some delay. How much? I don't know. 8 maybe, as for UL. This commit forces allocation of HARQ PID: 0 on subframe 1, 1 on subframe 2, 2 on subframe 3, 3 on subframe 4, 4 on subframe 6, 5 on subframe 7, 6 on subframe 8, 7 on subframe 9. We don't use subframes 0 and 5 (for initial transmission at least). (Current develop branch doesn't either I think.) This is not a good solution, just a quick and dirty one. With this commit I can achieve 12Mbps with iperf UDP on a 5MHz band 7 carrier with a cat3 UE. And more than 11Mbps with iperf TCP. And a bad radio link. We may want to implement some sort of free-list and take the oldest PID in there, if it is older than let's say 8 subframes (that is: the last transmission with this pid was done more than 8 subframes ealier). We may well have no free PID if a lot of retransmissions are done. --- openair1/SCHED/phy_procedures_lte_eNb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 165f2fbac6..5442085514 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -224,6 +224,7 @@ int8_t find_next_ue_index(PHY_VARS_eNB *phy_vars_eNB) int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16_t rnti, const int frame, const uint8_t subframe,uint8_t *harq_pid,uint8_t *round,const uint8_t ul_flag) { + int sf2hp[] = { 1, 2, 3, 4, 6, 7, 8, 9 }; LTE_eNB_DLSCH_t *DLSCH_ptr; LTE_eNB_ULSCH_t *ULSCH_ptr; @@ -249,7 +250,7 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 if (DLSCH_ptr->harq_processes[i]!=NULL) { if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) { // store first inactive process - if (first_proc_found == 0) { + if (sf2hp[i] == subframe && first_proc_found == 0) { first_proc_found = 1; *harq_pid = i; *round = 0; From 68249569ef56455e302211952e2c2001261b2318 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Tue, 10 Nov 2015 10:34:16 +0100 Subject: [PATCH 02/11] Give a better name to this array. --- openair1/SCHED/phy_procedures_lte_eNb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 5442085514..28d50ec1ad 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -224,7 +224,7 @@ int8_t find_next_ue_index(PHY_VARS_eNB *phy_vars_eNB) int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16_t rnti, const int frame, const uint8_t subframe,uint8_t *harq_pid,uint8_t *round,const uint8_t ul_flag) { - int sf2hp[] = { 1, 2, 3, 4, 6, 7, 8, 9 }; + int hp2sf[] = { 1, 2, 3, 4, 6, 7, 8, 9 }; LTE_eNB_DLSCH_t *DLSCH_ptr; LTE_eNB_ULSCH_t *ULSCH_ptr; @@ -250,7 +250,7 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 if (DLSCH_ptr->harq_processes[i]!=NULL) { if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) { // store first inactive process - if (sf2hp[i] == subframe && first_proc_found == 0) { + if (hp2sf[i] == subframe && first_proc_found == 0) { first_proc_found = 1; *harq_pid = i; *round = 0; From ebeab461659d671ba1394177b19c590058e747f3 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Fri, 20 Nov 2015 16:57:15 +0100 Subject: [PATCH 03/11] added duplex_mode to openair0_lib added support for TDD for EXMIMO --- targets/ARCH/COMMON/common_lib.h | 7 ++++ targets/ARCH/EXMIMO/DEFS/pcie_interface.h | 7 ++++ .../ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c | 13 ++++++-- targets/RT/USER/lte-softmodem.c | 32 ++++++++++++++++--- 4 files changed, 53 insertions(+), 6 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 8cc7926d45..6f118094b5 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -60,6 +60,11 @@ typedef enum { max_gain=0,med_gain,byp_gain } rx_gain_t; +typedef enum { + duplex_mode_TDD=1,duplex_mode_FDD=0 +} duplex_mode_t; + + /** @addtogroup _PHY_RF_INTERFACE_ * @{ */ @@ -76,6 +81,8 @@ typedef struct { int Mod_id; // device log level int log_level; + //! duplexing mode + duplex_mode_t duplex_mode; //! number of downlink resource blocks int num_rb_dl; //! number of samples per frame diff --git a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h index 925787cabf..42380f1322 100644 --- a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h +++ b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h @@ -316,7 +316,9 @@ typedef struct { // // In TDD mode, there are two ways to control the RX/TX switch: // 1. using the LSB from the TX data (TXRXSWITCH_LSB) +// only the LSB from RF chain set in the ACTIVE_RF register controls the switch on all the chains // 2. using FPGA logic, based on switch_offset[0..3] +// this mode is not tested well and should be used with care #define DUPLEXMODE_MASK (1<<0) #define DUPLEXMODE_FDD 0 #define DUPLEXMODE_TDD (1<<0) @@ -330,6 +332,11 @@ typedef struct { #define SWITCHSTATE_1 (1<<3) #define TEST_ADACLOOP_MASK (1<<4) #define TEST_ADACLOOP_EN (1<<4) +#define ACTIVE_RF_MASK (15<<5) +#define ACTIVE_RF_1 (1<<5) +#define ACTIVE_RF_2 (2<<5) +#define ACTIVE_RF_3 (4<<5) +#define ACTIVE_RF_4 (8<<5) typedef enum { BW5, diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c index df9900d3bc..238c94bd7e 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c @@ -296,6 +296,7 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) int ant, card; int resampling_factor=2; int rx_filter=RXLPF25, tx_filter=TXLPF25; + int ACTIVE_RF=0; exmimo_config_t *p_exmimo_config; exmimo_id_t *p_exmimo_id; @@ -315,8 +316,6 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) else p_exmimo_config->framing.eNB_flag = !UE_flag; - p_exmimo_config->framing.tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_LSB; - if (openair0_num_detected_cards==1) p_exmimo_config->framing.multicard_syncmode=SYNCMODE_FREE; else if (card==0) @@ -355,6 +354,7 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) for (ant=0; ant<4; ant++) { if (openair0_cfg[card].rx_freq[ant] || openair0_cfg[card].tx_freq[ant]) { + ACTIVE_RF += (1<rf.rf_mode[ant] = RF_MODE_BASE; p_exmimo_config->rf.do_autocal[ant] = 1;//openair0_cfg[card].autocal[ant]; printf("card %d, antenna %d, autocal %d\n",card,ant,openair0_cfg[card].autocal[ant]); @@ -408,6 +408,15 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) } } + if (openair0_cfg[card].duplex_mode==duplex_mode_FDD) { + p_exmimo_config->framing.tdd_config = DUPLEXMODE_FDD; + printf("!!!!!setting FDD (tdd_config=%d)\n",p_exmimo_config->framing.tdd_config); + } + else { + p_exmimo_config->framing.tdd_config = DUPLEXMODE_TDD + TXRXSWITCH_LSB + ACTIVE_RF; + printf("!!!!!setting TDD (tdd_config=%d)\n",p_exmimo_config->framing.tdd_config); + } + ret = ioctl(openair0_fd, openair_DUMP_CONFIG, card); if (ret!=0) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index b96a7ae529..30e8199582 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -970,6 +970,25 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset++] = 0x00010001; } } + + if ((((phy_vars_eNB->lte_frame_parms.tdd_config==0) || + (phy_vars_eNB->lte_frame_parms.tdd_config==1) || + (phy_vars_eNB->lte_frame_parms.tdd_config==2) || + (phy_vars_eNB->lte_frame_parms.tdd_config==6)) && + (subframe==0)) || (subframe==5)) { + // turn on tx switch N_TA_offset before + //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset); + for (i=0; iN_TA_offset; i++) { + tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset/2; + if (tx_offset<0) + tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti; + + if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti)) + tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti; + + phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset] = 0x00000000; + } + } } } } @@ -2821,7 +2840,7 @@ int main( int argc, char **argv ) } #else - //already taken care of in lte-softmodem + //already taken care of in lte-softmodem.c PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 0; #endif @@ -2901,7 +2920,12 @@ int main( int argc, char **argv ) openair0_cfg[card].tx_delay = 8; #endif } - + + if (frame_parms[0]->frame_type==TDD) + openair0_cfg[card].duplex_mode = duplex_mode_TDD; + else //FDD + openair0_cfg[card].duplex_mode = duplex_mode_FDD; + #ifdef ETHERNET //calib needed @@ -2935,7 +2959,7 @@ int main( int argc, char **argv ) openair0_cfg[card].remote_ip = &rrh_eNB_ip[0]; openair0_cfg[card].remote_port = rrh_eNB_port; } -openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; + openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; #endif openair0_cfg[card].sample_rate = sample_rate; openair0_cfg[card].tx_bw = bw; @@ -3064,7 +3088,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; for(CC_id=0; CC_id Date: Mon, 23 Nov 2015 11:34:03 +0100 Subject: [PATCH 04/11] harmonization of pcie_interface.h with firmware adding compiled firmware that supports TDD (corresponding openair0 svn revision 6313) --- targets/ARCH/EXMIMO/DEFS/pcie_interface.h | 10 +++++----- .../OAI_FW_INIT/sdr_expressmimo2_v10 | Bin 226928 -> 227800 bytes 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h index 42380f1322..713480b40b 100644 --- a/targets/ARCH/EXMIMO/DEFS/pcie_interface.h +++ b/targets/ARCH/EXMIMO/DEFS/pcie_interface.h @@ -332,11 +332,11 @@ typedef struct { #define SWITCHSTATE_1 (1<<3) #define TEST_ADACLOOP_MASK (1<<4) #define TEST_ADACLOOP_EN (1<<4) -#define ACTIVE_RF_MASK (15<<5) -#define ACTIVE_RF_1 (1<<5) -#define ACTIVE_RF_2 (2<<5) -#define ACTIVE_RF_3 (4<<5) -#define ACTIVE_RF_4 (8<<5) +#define RF_ACTIVE_MASK (15<<5) +#define RF_ACTIVE_1 (1<<5) +#define RF_ACTIVE_2 (2<<5) +#define RF_ACTIVE_3 (4<<5) +#define RF_ACTIVE_4 (8<<5) typedef enum { BW5, diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10 b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10 index 2889dfa80f8f6a9128af6e9ca6dd1a309c9e1b39..d79e46df76881a3d2bf476b82f988b0a9bfd4839 100755 GIT binary patch delta 30829 zcmchA4R}<=)&I=wM>ZjWO|nTgB*@JN5FkLrpaG*?m10zsh#*lSY!W0vVu=tTRO~Jo zF(7IP$V7{F!BnH7riyM8Ymo}Mufs-Em*i?{qZBl{fO_;4kkE|xkT-p9Y| zU9x~0Kkw8833B?D6ew&_c%H&mg>{8(3g;_qS2$1M2!(SMb|{>qaHN6Dd`q%bMU-O5 zQh1cYnF>cMtSKC$aH_(i6?Q8;MqyXr4Chnr@k_S+IIS{d3a4+;pPnjwcnTk9qx!-? zv4cMw5m{dA^s@*jyIne+JjHu^eVpcQPiIVL*L$hyNPfflgkznov_3BFw9dvZGwI7! z9{URuFDj;d%TIb8TlyG#>{OdS&B@9;qBZ98dsv*0rDqVfdaRS2tat*_lde-Mn_N#+ zG-b+XocyN9qP4-V+t5k9jE?0OB;Srci{jCSsz7?KA}9P< z>Ce2Df$l)uk3N{FGAaBY6srMBnvVRg|%Nsb$eXt`->pNMMBVl6OErD z!I*|ybjEJNgjUJ!R6c$h!G(anV^$4146|H~x~`F-wfSu{wA67t1s2I0$0sGM-saT! zR+q+(XnrdRu8&J+vU(h!dhKdu;lhw7q`@=5vc~U9djvLPz3?0iU=hud;>`m6Hq>29 zbkx~_VWjIWmHp%Rm65AEnBi2n$^7&9?yD;O=os9iF)HVt2!8=g;684cW#Y_wnAdk8 z91lOZEzmNazr`=HLET)PMY&)b3*#}4<$a4^`ukN4?4B+e$>g$>HK0oBwN$@OPBn-AU8_!z8sPWt=UkIfGxoUyvs<_)C1Ntk2|0wujNUOCHSRcU{s5%>*l=!9uk$0`YB4(oxp{_6BQ;Sao}`?BY}g!=P5i2I1+fQ!t)xOQHF}))Haag zV~#K6RTKFfUMXuQ@@Ks-go%PGj%UM~LKVkTVVG2TA`Fx0?}xP~RlXNSCskw^CjQ-o zKU1pwZIXO`5}(cEW#1%zm-ks(>sbFzav$);J~Bn45PZuc7i-RYF4o3x@p+87qV-3q z@h&aO8~i&qq4d5`Kj@>7%mx{;R0q6(OdUqYs?$h5O~D1AV~%Kwyu%ebDloBFqNafS za|Gmpo*X71m-xe?4*4t%cC;FZ+mA@8>Lxe1G!13);Vke>P;x8{5$0s4NzY`ykpEt` zOy(DOlk4L$414G-;x}k!xW<7fZ7#}7P&X7BC*{C{sGmh5Nqv-|M#LXl&@QANsYEt~ z-4Gu#^3LHs-Qt`Z4Dmj8Dyq#7JrS}Z-jtP7cuLFw+Ek$mYarr~QFZ+%sOmzMK-Dwo z597m#kKkzfq5Je)2NV#1z zH9LmFX8M@3HA3T<>{KWC5GonWU?pB)2QXRfny@w;bVnojsU4Km2skrM`NR#$luN7*%SRf;UQEHosg%Opu4C^Gq+g+u?i4Luz6XM$jaWrI{cx zp!qNpL$K`tVen)s+fG-uo2YC{L6GQ^lx-;p63$Y#r65RnD)0vMLqU*ieTiXg5GJ2( z>=O4k8{4q;WM%7^Z?N?go!NgCX19N5>nS6)wjT{^^RH|@`9IkDYl^O9Yo(z5eX{jj z8|n1qu(?N(xy=#SUnMhy%#8zy?hStZ3lc&+@DedJNgrO1*mr!Bav1YHsabj>{Kcmu z{2n(J&&de?%6q130z3ZlTIYeRPq43dMEEN@GW-?riWKsWN1bdOMkuGw;I3Pjqn8%+ z=7Fke!?YXG7FcbV_J^Q_+xMi0!;e!?AAv+WUMj{?M>L#;9eYUUz z*b&h-xDDrsBPh$N9G)>*ZIbqCYC>Wl0x`l~rSMANnZT8DUa|R;Buu?uh?g?$dzd%GTu|5;6 zS)ZNd!D6$|ZAkEBqTUFJ@yx**q8UP>efI8|9*+9U&?Qb5c7qOlIq*T?^OXu$0RItq zn!@veX{3`w+r^crK$x+I!Z__M(ZFe{!Bq;6Q}}9Ngf)9;`#?0Huw_qB^aa4wfw6Z% zp=%Y6QS`->AB@&~&v|G0?O=>(Nbu7Lmk?oht`^e}^KR=f)*(B8+$WH8;U&=&guOCkEBxXFRW_o5C5fUZVt_Ei7$EG?SKboqMJXsfZ< zxkJx^r>)-J4r?$sb{#BO7LW2+;!CB5)QB2@@n!1NWc+%;-dsN3yG*Gxvmx3u7dkIh zSRHe1H-urt1>3?fj74g@Ce)tthUm3$Yuo(YGd*?;iDY1Fvt52pn@bhGfhLHA%uyAK zDBqpyi9_8itPwgufyodOTJ40XO=z_fCdIJY4fhMlzyh~rhRL7_(MCEp+NAEm-HlxI z4k9!}`*BOKCCQvwJke{5ZNP;Iwi<^CLIg4RY$l&(**(RBsAzM5Cr7#4oxq_>f)U~x zqP3dc2w~X7|IrYqC!ilAGBiZbV5mo6unwU<5&6$SV;08S{n3nD7;E==n;30|#sp%k zi2_jvLHC*Uu_*hfj7?$=8ar})Y>c95;5BGypN2A1d^1RSY#LF-PYLDh282fBQ;=(_ zZW78)FSMf7&6UYua_cXE4Oavs_5kZofg=@t9)u(VceFo0w$S8k{1l`HQmuQa*!c$<(=gZNlH`?TqZ2+=4?odd4+c z+$;Ta@h)g{gV5;)l#J@Q-4~Kqi;eL5V8dv`tXO_xJ!tXA5LJi|cr9>3m<9bf*3dgV z2XcBXVVpp{!7smyD_b50jDxK~k3$4gd>#y*j!#~O6U~>^U@QV7ogKtXoJy#H$zaec zLHB`9Cmc#N|2Ub8YoSOK@u570%COp4x@a82MFVn|@A@LWnWmfGwr%lg#(k17r2`u> z`Woaook#J*GE2ux!w1Psm|15N%%sLaTQs7H^HZqMC0lhqW65&BUjYuFM+ykZ2QqaR zG_WG@(6A6ZX|oliB|MtN0jDDd80G_}8(RkO5YbVdfbuV8{$-fX&*jR?FexW7#xhVT zvRnY_hrpqAfg>0H0N52qe-Ajcs}ldQFn+>s1Bccbwf`CL+_3gXfJ0{$@Tc>Rum%^P z46opC9D+hErb4gDtjqZYk)`#5iLK7EJh}36K6i2{6+4}}quW{X4@}pXT~joUI_BGf zpoDkCSPany`_ap}*H(%XZ=Ni?f={xcWoe$=dz$sQJx)(<3gg+hYjhoOX0gYenJk{My?C9Ohh4lQnTeup4!>o4R~ScK~~`P zdE9D=98>FP^+HTUz<(vbh>u%-PnO5ol=xBBYl$Cet%)CH9!&7@XA;V?niDdz0)quy z@bdsxLI zr=u28rQLkXU5;C;6%mDSJ|>_Xw^ldGc~pkvXFD}dCbdDij`*ltAC*SEK7_V5!pJSa z56i+OdHB*WhZ3c5eWQPf{Y#G8Y-g2*ydTviUdWgWvs z#n!~+nlZrZW!F-^hL_9S zB7Q%z_98^|^1xsbf0hIKZ$>C6mt8mWskUl-hAEdrH}j`3{r+X#<%Ny{Ixyo=XWHiuoW(nF?tnKq zbSjKDm3TYA+iBMdAv&kQp?fX04xh#6r-8Gm-7`H75TZLKYK659-EvQk-#Aq_ICZ=Y z`Z^9@1wtJ=LLK`KXrz2plhqF;MieI8J&_b1x{;J1++x?Pz9wT?w&V4QqcdXpn**4O z{-KCB`^Yp$SZ|ik-%A^>UEv(UGkts&&7i8wLmh2BHo|rA$S$onm&#qNH`ljcqhru{ zg!kUUlVE%IEqp0vr0N!4Zt>nm(}{Qd=*UBiD@ZVzvxDu=MjdTgcA_ah+Vi4;cdL5C z9nhZYiEj^NTpQx``Aeo)ee7zI33>EAjQWVgD}iz|2+12uc*10S9HS0P7(6|fh+q^b z=TI4=pM`Q336XnB_|N%m(o@ParmY5bb%*9>)b#|E$-}{Ad>WqgM-03 zqTQgko%yN*i^3cHVmhsMS`;YXfj*pA6#J>p8}trM4kO+MVu3gKduLePt*Gd}3_;-EbgVXkyvP*%bvyAP;nmvLdkj7(0HyIABCV0E3kzo3 zychwQwUc?Aw9GIUb`pU3(=b}{TpKZagMWCN1X3Biu5)-Z&*6QGI##^yb9l+GM&v?p zE0~31PCbX29L{*-XpZU+&w&^5`SU2kYS;32P{f*G#G&CYpPibAIor-WVot%A##eKi zE>aAUGKb2@z1dX28tekdA~Pj0h6AHbkImtRc@@qF#$9oko(Jp;!@0oiVK^r?hlRJ# z1`cnZ1?-E>iDE`0beJg}xAOb=Hd%iwul2(23Eft|hJ#geJ&t+M(sSHhiW3Q=GwTi< z{UUt_G&T`;7C3bg7BlE4HSppfEmq^;l}z+pTr-GHvIxWR)98=}o(98&XUnZta=j#Y z)Hevm_0be;#es(e5f9$q;f;y$esIMHR)67ftKan=I_$CfGvUn};BkI(f2WTh#7Poo zyEKNY$?E!uH;2@`XLdpc@qk{_$>KbPsPNcK@64iH9$kea|1GkA6~7{Oh1pDJ)C^6! zrC!db@=Ii8Ie$%L6v(U!T-NRHF;5L~)?y>TrXh}F)2O%lQyZYzUMSdT^=Cb9^*cb1 z`u@~j@u<~r$0<(GbyZI36^~5S#P)2z*ydzoXw&f>FjvU;rg|(NGJTBiiC*&Lc#7TF zkR08l4UBS(>5<1W=KDSGF@4l~xJ>mhJ-P=MsvcJ2KwkL)(__G71s&e}=M>Nd2~olS zm!vda;FIDGIatBd#h?47do^F?HC82N(f%UHaOSbt@QfEVm^lYE!^$;QBk>#>;rTXv zljBSq;xSes@lZEP&aL1PxDAAOLW|F?!VdZpUlz;3)wpwcr296Wk>GjwLcd++`t6Tg zpxM2_elMaBPH(s2v~;Pg1P7lb>nY2Y-K+WdaZ{jf2D-7}wCLDW@V}3=!Qayh>wg<) zVUbDmX!KB`8q5}qHba^7e=*w6Kal=Po-*55zn#nvU-Pq>xG}>>1+eRtqUX%qu3ckoemTiG#IG8Aav$Y%(gdImOeZ>;COsUCr=)Z%Td zU8LX`Eq&kN=S7tiJ+A3vS`u-;Y5oqJd2-oSXUPJ1R1Ve`c0XO%eau2H@R1nCRMtZC zpzSXR^xwtza#2<%YwzaIMtX1#wARIDWXZhm@?}fP(YzgwMq%Tc_K6;t*f?x;`EZ`b za&!Qf;pYV%6h?ezz7ej)X!dHJ(8qbktt#fuWN zEW5Vwxshegw%|I0+qsp0ZX;nsd+*^NdbcmuSzYe`$JCF$Du?^?p4~Y%hKG8Gi3aVV zuCsAS*@s%p`iB;%9Bm(LMXJ%+0|VdOhT1-G5UE0EJFAe2@aAqO-fD-05`oJ1_aIlw z++ROJzdwJZ9BLEFcbw7L4wufhSJNAqNlunVH&EQi%4Wl9aYv({5S3&g;U`lb-0eyx zJK2PiCtWA42NU+|_!UX>^9iTgn_T{*xbRwEODb!{rLC_yAuTuHyO+NxL|Kol-@&hx zch&KYqO4mE*6~M0S&OXSjxVKUUGn&LY=33-0WeJjcVD1&CqEB`7TNP4m+<+jhj`K@ z_!XH}urDCtOX-W#>bD zO$@QcLi=)DU20^0JzpAGf>$g_4GAT6a$h~qh%CeS%bs+7v_N*%^9yJ0uW4PuIPRg{ zLz%tqzKI{{Bmwp)r&mxqOKscZ^7oR*TYWrgYvM<`%-O{+6%bdoi?59-xrnidXQz4G zFD91w1O2=B6I}HeSJEmQck^WvaE$wEeK*4oysW+MPHS&&ty{<4k%{AZ zEk7}T+o!Xq;c<`dGt*Nl58?3qsc4-&rFfsxbk=-WwSjj(1!wzD39`Jy9fb=HFF%!| zv&WmDRG%q4l!x;?jm|>&@#2v()jgeM;>Y%k)IZ%ADr2dH8vd)?P@vgVfI2sl8%m)r z)TX(>EI(C)dJilC%QWYib;Ak_cM4hseAC}y_sDnl@*-PVHzJqxj~9vZa>9UL@x;zR(f4?~by`Vx#H$PkW7uU%^RbB5Gvr}$J~l*OfGK=;WNP#a z$r8MSbIXB)JU#H*_xaNzQZ+2ik(CGdySyx*Kfzx>^(*#X>!a~dVCV<@8XKBnLn(L? zXHQ!RUc~gsny2`umy{e&Db0a@kHbZ;8z*B|4n0movLF_ebWD2HNx!Ff4Y+;M zs}5(|-{bLqW+1SynMZJ55@>pwe+jXV#+Pc+|15urdN`@cqJw~)+kc2x1I|Ft z53yOsmK=e(oNfR3td{vKG&t!##J`LztHmkKm=5g{Ovm(>d5M~y{FiyEYz1O< z6DVrstN3tb+}}`HA&DO4{8IsN{4k#pTduQ- zUG*+)fPCO2EA0-r-r&+=+Df*xRQ6l;f%CEy?KccuIN>IvCJd+BUx{y+u}Z z;yttBhH_6Q{~CjMj&afUk3T@;8cbwA4MaBmm~V_M!3o7;$jv;0UE@@rTyO-x_$3wk zyur_O$ZnP`NBHg2fUj1|N4HXbH4}j7X1` zFVkRU|1bD>V|H4l^KBAB3dqX0`AcB~$$AGjCK|{){32STWtyyehnE>*E`XI=z-b?Z4y` z-QbsfzvLH9E5q@&)@0Eh4zW-e40Q=H7eZ`LL!3vG3*O@w+!WrVJiG~Z?yoKYJ2f3Z z>_oG+-CuZoqzy!pmtF=N)#9zDrpnnUXPV{GZ&=(H38Qj_zdf;60GQEG{B;CEu)3&ubmsjm!!W_T?>{H9gcSQvB>?? zH4D|z0u0prnZMwOETz}tFjrn6=L~<8JSTAU@BCdWzg_x;n5!&vT8J-g@X3-c*=rH& zV~rw)RfbPV3^TV*4`LWHnd2N-KdT3rjx>9t0;$DD`qvzCeE917))j}}VR;XE^(k8wyBJrt?x%bBPZVI>@;F!k1EEmQ(7$p97w5MY{|F;?5{yc!QS5 zPQBsoNc5=Ff*4KvQv0Mgc22?KSKv*i2buKYJva~rS*ZXL^r!dgs z5{s-NJzH9n#e?ak_`v{6_yGOlZ~dIOU~IxspF;BG`1=={o3X*Cc8I+#!!q{CAopFzAIIm;~uflSU**){5X%*Tn0Qcu)345{39cOPY9zqu-So;+k;?*`7@u4&AZU;c?KJ0s9-LT>&S% z+vU*=v3v3gd`shd;`Y~LQ;(%z9b-%Ulkb4}mhIfDNs4?TQ&d8_bAnh1H9QlCp(B~y{D=(N{(3n$UEF8GI~?4V zd^5!Nj7vhZ)N(`;)gI^yi-BP{5w?Bpa zaU?$xKO98=B~r^3uTRdw73$iq0zW>kzWqZ;X(W~l+x|g+eUJd!w%&-gF5K3;q;-~< z!AoWCEHM%9<7DwHv4)ohx@L(a^xx?&@ypW};oM^?o0TUfCFkIt$E`lL4`=q$A>0E= zl@}8|PFazMWe@FeOYF}Ra}!GN5$y&Xz;dW}oJnssY^To_Q=&@zoj8kPN&98>Y=LVM z{xn3B-Lu8A$dauZM@6oA=PI|lg7~VJ-f8U1#+5REvxR^o`9h~;W`8Ne}E*77j6GHI%*;u#EOGP}# zyOqqjh%!`%!+*9e-nT@S8j`2Ud&Xr;Xemd0_e2HM7 z@k(J4#DZ7oZNV>$y5_6I3$XBjyQDc#yg;nC#NOV4-zob1W_*Dg-7b30 ztSc1P*j62(VoxE0)2cq3)+F86i!$4)&upG1>APMmja~ZOkJA>@xF)C-B!9 zFpVLjm+7&-Cd09Ep=Sl&V^`pvbp^&=ArCGQpC_-{5$o9(sWDa;t5tQS>1-6bKwYbB zxlydK8Dyy~6&D!AR#~(Z5tC~7$el|?#yF_sX`z=@ySnkmT<@@dCOK(L= zm6bP%xiRaAdtZhhZ+V}Kl&v?3@^P#1*R2N+VADLA$=Ln#bo#*Pz(!)!%lw-~N*c|6 z)6X*7*$(dE$}#+eRk>N#;1W1C!$Z<(bZB0jf#i2(RAE_G$-$e&{p5VTP11RbxB?^U zS|+AWScTc~-63Wb* zb;(djJ7`uUGgpYY7N{(juMpbI7y40jAkpJS$_@r&x)|f9*<~^3P4h&K8E=pbT0t;4 zre3zJz?q?pk?27;+#L)iHlnOk1s zG3thZQ^V>ig25z$E>#EB_-0jihFz8jt1J%JjW>eWySD^J@yk?Xv$Gkq*BAp7^Fy2@ zr9T)FZ1&N7844hFGg@#}G;hg(7&(6~hnXw(BF z8V}X&MBUD?I_k}jx_ZWJU51Ryhh-4$a4?wbXKXCXGl*9X6JZe11L9$+mtw)SKqf|N zJZNXJ27`;bWM!!s>s@pPwTq4B*9|u(p8R0&hFs7*25s0lq`RdEv>MRDWmcjNdU8{h zYlmeKe_b%R_#pU69z7&~AL@>>6lNJTI=F1O0TEk+!J;OqmBGY^Wj?amM=>I|!8u|^ za9X2-!D6fdSN1;-!I~8eR^e+MnokC6xTUQa!8-CJs;7rUVFc?msjU=Av!L+0EVFu; z429RxfHRGrt_auH3Vqk*Qqzg)oLb{eg33~y~q1xqVvl?H9Z zbP!|93kKIaq#u&chh$vvXsMg6A>9U@t93N(538qUwZY(>F4>P}tM@<&%^=@2+$%Lb z91Pyoh^A)r7!i3q7~H%P^}Xka><Q<};D_EkD=)v6EF@U?t z$HMCtpl&d%4jS7%sOv{vh0*PZE0c`P5T6HHCK5fwUynK%l$-u}RcL54jZO~+gWjEB zq$#F{gtVg$wivD>AsDN7pUhtcy^BB^F#28=l12SQL70@@=-_T3$H6gT?OhO$9RZuCF*=YwPw|Aq+>)4DhE(;+N?Ab*cl9NZwIb66j(Z} z9Pu{?gFC3B>M(xH>y8>=bDri6^MfyqYcipf{0^ZFxW5;J(z3eY$>gvEs$CTq&Q_h zGOq)irq>mQ>k^46*mD$KJY@7RvhrYoNKC;a&1jd4L=V+r3Lfb~Im@UqrXmtk@W=^Z z-H>rs7>%q91|J1!tn$4Z&g#4l#07Ey`X$tZiFBj~){Mjm9<7zyYK)*q<|9iWEkZsA zjwl4$@8!!%kXF}#RAh8Mvh@-Rl>Ocz&`kdtnJx?@stB|`&?wPE{7`n^VN6VwA?vJQ z7zJG)cgg|Mq!;WVccW&|wTVgXHj(nJB9I{6c&L}YVDKeO;92ZvP*;gMQ>$yjEi%dt znqT@LiXWBxNFq(~xrT-0QPA~J1!z#fc&N^YI+7f!Lq2K`>Z;@!h)U=LDa?YSI)lNN zkIL*dh<~K>ynl9qQP8zD5421qdLS{{iMj&PG4bl?Y?P}}Z-&>iB1?1uXw)T596jhG zx)^n*Q7&eejaJ%6R|SKwW*hR-qj#cQ1o}=xm$Q~lbTepO(pd@H9GBV15-?ZcmW>_^ z24BPH2#{tMgJk;q@^AykK;bufpvy|5gR{a>3>1D_lPx5frZ;TNF*P9N%U&Y6&h9h@ zYISEz=j~9dRc0egIDSrJsCDc#e#Hf~>OsQTvCoWnBWyYvYQ5JD+PR)eG^q8yRklzE z4tbQaEUA4Pm;HUg;E5`;2p2rjO2rfoPXzIjfne}A1(4Wd^i~jVgfY><;D=VwP8hVa z7VMZT&^l$kDd`}xo509TbCnKD!Ca2n91QkS4-O=HsIDG$`6!c-=%KnMRTts|Z4C77 z&5_z#k>t$<+qov8X8mBP293ng15-E|>h_^rV<`TuaCMxipbddmNX&R3!!kA~u0KN+k|F#8eHY&GN)r%w{X9Aj^1&gyDR8NOo6=M7tCF z-ls>U$0(mb`GhJDq1;d9vEtJ+lqcDsN?){DT!3P#S*$=2za6c@ybZ{HWH#z2de@eu zK*k;7d0WEzTdS*Af4f{;T%>I%TU%CArA=5FC68ZZGnU|!jUwiwl)fLou^?Gf?t?M>v8`rHR^lh!W;#O_(ym>R`&zq;I9`I9b zv}wmJu3aGEYP4YW?YE-0IUx?MdaZW*+LgCzXcYzCe@S0FZ^b+)OgzT(Zy4uki@t$x z-K`}nOH0buXd6l@?<5^eQP*8{-C}KyHlgxPxqqW@MONOax(Ea|ipzy_<^|f!obzXC z=bt|(=b||?FAPL}M?4TQwwCD}f6juJLP&0;ETlXnUAAly=S{CIL>ZqhYAcYckZO>8 zNOef{NR3F%NG(Y1fiqjg<6Jz*XB1wRLPIrOaEzBsRcQuR+ZY3Q|eNw8#$#O zm3om=>QiX|Ii(>pJQt&nPN`8Pyn^8m`vIC&YC%q^Ri$?1l)6;vMoy_mrC#Ke`cxV~ zPHD(YdzsFSFJe73hlnPWTL{6zlB@c2+6)IIBr&Obo z4>_eemFkgGYE+5le=ntGm0FNfYE`KnIi)U@x{*`rQK=U>r9PDgkW(5mlVmzKk^?y< zr%G<*NHaS~(`IIm8$zmh#k(-TtQ0_w>wfzLf0n2V52y{LxlI-@i zbvnDFGVsw41-|o{K>qb5F;%SHDKid<{-`@D!GQQBzLr0HL(B?X_pz5P{Z>HwNAk$w3^SWG}t*?SDlL8Poo6CXM#8kUkE7M*V zMPl7NdDrXW68rip;*@W`F7}D7S+e-BNQ*M+`fydxlII^0i{-Bmi>pk=J~`zLakqVa zpUyVa2cCOFoa73~hug%W-1YsCHo)Jl{FxrFoAIW;DlJozJxY~xX#ZNm91Vj7ttLB4rfqy?Vq z5I1qVNs`f>VzRao#@KkATd#r=f5p2xeiI#CcmZmAkxt7conm&>CM$%^gRp)YDE=Xy zAB$0Tvr<0xV{wgrlLm$y`NfaLZ2P8pDAxw29l-|+1>}W4Atnz9Rr0={kVFh=Q#&UA zBuQK$CwGa5?PjIy>=HLeU0$j4`MtQr-AMXR58U`u@h-O;wYhS}&&7S(FZ&-cE9z=2(*-zDj@mWSbd%kz zmG8VOYQ)vq@~Y$FGW*r|Qhv2A>yM+=0+bi{aW1=;24r~ddLC!Jhg+LW$AnDcklWwG z^eyn~{8~(3O#E5g_jBv3A#Q_1_Vj@JTEv2DE5N<~EbiUhdP;Gd9CFgHiMs;aaG}vN z&f@+aw;A68ZYEj8AvgSnxR2`mIs~H8ZxHwN!0ZpjW!!GoO5bnABKvh3II?8VZ!xde zHR*hz4=3+(ll!V(ahTi9S~=>ZxY~YQE4UBKWhcc2Q44+G?!kGO%g9fJ7HB;wzRm4s zEq-4n)<-SuQ5+ADyo3PU_&hGQx5y7a7HM{aIvB8hA}&WWVjYy%ek!&^EgaPO^+ot# zbUz8+5V)>S6obR4l`X%+3S2k@?lT;nixOIak6{J!!V}a?tw6FIR$$z-M4*-s)Rm%J?1GFH|&Ew4~a&WW|WKr#8FSj&?XlefoNHi=F6Ekiuz zwbC1J*^ZbTh;mtAg!#RJDG8QjPEq+=iIzWE7vx)-sKf0xxRK>mqiBH_$t7;fPH}C8 zJZ0oZ0Rs*{bX%e)4T&sk(K+a12a{QO zmUKHVWTLTM7NTs!KkzIL$&GoINmS*}vrH7v`eYa7FW~J7&DYA|DEv*kK- zZYB(2)V^AEOR=B2y$6{1tP1baR0}O!Aac z{0L5=`{+I~N-?|(hTbsTtFy)d;5>7b{CBuVkU*zW;4i>=BUo^>Cw|qTu$;GL?$Or6su$5sdhh#%8*Un(kSL{v2& z3iSgk3yB4ECIcpgh`&VVb)+!GN~-eSrgK{tDjceVbzp$TEIq`a4syz5;(iDm3={a6 z&L`&pXPfPL1Gz~=UNVVZ^%}SNF^-Jv+zma#xOc;9*!;1 zz-LD276iN-hQcsBd$BJJUkOYmr3d|4u7wjUA+Mr`DsIsE5;6fjgt48Rg|`4>NXA2S znB*+{2oBd-Ve}_}$wc%J|8u}J2lNnr9ZqngZa}l*I52q`J;czb^P(mb8u*VoU*;LX zRvR$QAwA%?#sc@4(7?$$FD56Uhv?IR!z^y~UW1AjlWs6n0=I_Y@1BEq0(Xzl@sIzi z$DDNh%AYqLrYiJ?dAEKa!KFxHQs5x4K7zg0*UpYE)+2~M27~D}R>bF$&D22QFR4tA z*`f6xAq6#~Pum!s{e?O#iZgL&^y)R1ZGz6OISzW2LH9Bn)>WMo6HH zCE#kEXOWL&DZEr?eqV_7|r2W*8r=xqCr&L{K(7byBYI$HpKzL_xI zRoNP0vYlWc4XJ@2MdKl@fN?Oqp`J>>Frf_=qEj4OsRX`__Inha+8@UsT40WOv!eIH z>qE901#Mr6k_!yl-bCPT2cZvbu&!#)(B(PB7M-gcXfI|b=ud`j97-^THV>2+9v1VA%{-(~ZI1T=zaj-ur@Dt1_If`2~ zcwguKE?}BNQs~b*&u+v7D3ja&4wKh{uBI#^1`6kn@JEb8`$J)PhR$ZV5NTbe{D^!^ zDW(Ya*9-+BuGQHej-seW6tM)Wg6K+th~?M}XiAiV5#{i5ni4g~5o>jJQ8(PDT6J(2 z=6C_MYfY4xNf0f$Z@tT43gsI_`tQ`RIRG zz{5H#=nNCkqO-xn!26VdfO(*2sS5uH%c=@=wJaU)=*)!ygjSK`L!D(}#O$!*M<{=Q z2B0kH_><25u@n8XUd8aG&dyW=D=&7Ofs@q%D<_Mz>+CyDz%wR)B%E%$AJ}0Au1GgV zlntyb5}B^E_XmKL&qPi$Z%?d8wV$o?TfF^XP$P(h6W-AcsC*)F2`rKdtmZ88+d7*H zlUkKYBR9eV7%^@uf}AX}_Uu3t*`V`@evorjhghb|iisbiAbu>%((&zt6~oIq`?L>O znK<$=0?|C+kN`wJbAQ)N0l&iKhAie#?GfoFbO9?1M&itNpC+3MEYrOo(^M+oib{c{ z01ZXptWgtT>2`$$aCRs{nsTEGa1yElU0F8jCaktBV72<9*62Li4XhSJ)OswIXp#rR zkUSsG8M_OC)!autpz|i8hXn3HfFs323LXF*mL8`62od!-#yqGL>ejin9dxzlMD<_* zeqiM)Q73%_@Zh7-AEChKIA?g8%?dJo)R$O2VI7RZt)>NJt6CkS5_R@TB|20geN>vx zC*^>lz*Jz=WSzN>A~xnJe6h}Vle0&|7ct^d^K};M2UasP%3G-O6*Z_(b3baej<-JO zAYTcg>Hez{LvRi-S=wn%61(Fyc!$u(IH&S1?7@VHlgDc{g$z3QZjK zKIWWE9BR<3vwYytavk+Yn0THXyc)i8f1ZjH7)kVadJThig=WXmS+E?&^Ou*49Blh>io*eSM^m85W{{hPaatObXM0-Zft{hAbcb5iHrN=vWNV zU&B{+zyh3n0S#iTI{Q;E7}VYpGYWCT0ldIeCJgeX4>444Q9}*a;=zA3D?9Ay8Rl zbiB?l$pn9M(^c9Tfyj`>udrvwhXEUzr}K+5h|07#=T@x4e(Ay4`Re; zvASx3l`oBH!a#{%4Rp+#SWV{RG!?*VFi&2ZiGQmb@6kh+9fMukq?`Os0eprenEcLI zIByf6+f>+@85U>Yo6adZ`{D%X1B!k=R+Eh^=}{H=Iy(Vp6#Ep$>expXQkHaHr?b|2 z=$5DG%W&9k0X?JuT;V3Nkg})~7MTJIhW1dW#LQ5CA$i`X;S1HO0>0tIri!uQ!GB5P zw=h*6z)*+SOTwqf`5}A*CJx;OoUl;%X6YP&FOhGlNbSTW-Mn&|^1ZQ;auep#$D;nmqQovyTU{fpgm9 zq(@&eLQ@or#gLW-`Jn;!;a@js25u*L@V{8Z5A!r`b`Xb?n|Zia7-!$Bpit<>7Kc5g zu|g?~DT})vn4FGAOxS}9l@3^=+LxQ31Vp~VRXY2CESw5VH@rAF&29*^s`wCxWi`JS z)>0OT+o^L>IAp@Oy*iJm1y-A0+~Yd?Rw@LlIgW#c7Eyx`{bikJphMwN3cL=VBAFlm(;1dcL=xixQkfhde z{I!S!G$N*%{43yeHGpbB@v!hdSYQ}$!Jae#ob6QtAJf^N7o(zD;RBd+m^2ir;@dH& zG~$p#Kh@bhvRI|!e-{=Ztfnv?n^uM+jQ?ZoK?TrlQ1RoIzt9J|w@6i-(b;J-kz#N~ zoV|y*oI2~Mz?Ptvr3*K zctiIa*Fszej)S3C3A_pWK8?tYb&Dx*-Kw)+>%eLmx^N^64@53(dgiMq&E&ryPD=9n zlssHFJZFGaTyXi}bH~wtXii+XvH7z=S99jVDVjcP4Qq_ZxBWCQQvzY)8)=F{0^yYA z+da)x;O{znV*tfmlRp6#^|ymv$xp!EV59y+?=9#LptnK+<79;qCtL_8stjvzIeel3 z*rx<8hLg4ft7V!{tn+*tp*m|Ol!fT&hC&Iq>0Da?dVy-c9xraZ9#p7xn&5>Kb^$9N zNT|gzpE}G`4Iab@I)OtYXoeTloGPD4z}Yf<6(qod4-6@OEK~Z6@QJy=%4rim#g9$Q z-OB7Bk%cw~&Cob82`435R%%3vcyV$wNTCiB;Z!}vz)HbH#Qq!dfYp>FBJ%Ci0F}at zYY~`8AvGn58+0$bp&J!y1c{IM0O&CfAc;@FX$nnDPMG)t4iIF45dTj@FJLuOVFa?r znn72aQ6jFO`@$@icnVWOQ{++u{sT;&hB+4fW<`=kXZIE1^4qL%G%S*h223+LNXo!f zki0rt(Wm3B09mM4;foNevw+ozldi=7dmpgPs^~aj-E0il^ob8Od1mSl+NbY04pC!I*h>64ooJ;94EbnRiG2rOoe}a_A*WC1wChk?oGmhfo?dV zIZF!SO%0hyIi(xR=H@0~WpZ~q)-_o~1ui#2x2yst1)+fZ3Z0$o13qmI$X%$jFMZJE zkis|*90Zva8s`E0-=vjc1V)WH0ynN)dMX&2RD(@$vU$KNlDT*40Q7*LqZ)x_IVl{% zcyBS4pqdi*55vxYq+qMg=2BB*3bFp(ztDLdOvD<56`AsKCo>BlNH0Mm=A)IV!GDLd<+MYTol#bkc^Gs5m?|nwF;6ENSqkqm}=GGAhzp1 zxPw|nW34*ZX?F8W`qEQRmV+4}I#5H$m&Y)BriUf-?9PFbV)@h0&r&_nye*vIq>*r!L)K<({g4`8F| z23F=D`z%gF7~QbI7ZC&efzD-?R4!)c1Wp!Pu1!v?#4l1;l&mZ%TY(>~u2{EfMM+up M>J4(*2Fn%y4b&tn`D!0NPwFUAYg<5Q3GPRXsVG9jY1(vgiSyQnwF@jv8C>U z5h9=sAuz$Fb-{>HQB$RER36v|Q;aQbQ%p6rsf~y=wWzVunpSk*|G9TIS?I^p=l8z9 zcYht{{?9pc=FFKhXJ+nhXwPTy183svv&3Z`J9Dze?DjL>=3$J*FpmE+{8zMjbkI4WWwkZ6v!d8V}RM@8Q^9tJ)epcZag`ZN`q3{8PV-38@zj(hQ z#3_LvDm+5rM-+A{yhq`9g&Pzesqn)Jk5YJB@EqqC*^}Uk?4pP(T>cv?pD5WqnUAp% zJvUh9;7`ZIuBmkeSd5ERNtcVK`>N^_HBTsuF`bqCg_;i6H$Fi)!Ntn!6SEHLEbUh& z|K^9xI-%CAZ#YTyrq}u$oBA31!FxvonJ%{Gm{Vi^fR`ouSynb-tJgZw#mdH`9B{u| z(Bj@#*pefka`9!cOV@|LI9i{W?Ul|1J|nFPeJ)Kx8zO=AOhcmA0a}$TP2lS@D?2nV z+w^LmgSxf2Sf!1z3AL_$dqbMnN?7(M@L+6tugK~`t2MGUkw3~O$>Jpbq40c6b)NLP z`AOkZxB zKGvR^_0-F$2&1yn^2v#B(+uqr}+55bGRv_>nef zS|^?(i!SdQkfxPQ6?&u%PA;p*m4390tgzB;@gO9tI;PrqdC#@Q67!sKWTGQ~*js|Qrw2U!49Udth!zU(J zZgFXRvs+`wwSbirqeYk8Fos{Wuu^%rBoYakhzy9_8gOUsMWC}jL=FaEqz@&V3;sIL zUL`(gc3?PZ;URfu48JC}@)$FMYMq=tmhZauwg5VYbS*~ZYK#dK!v&sh!!6@m>)~Gi z{_JyBKXbtB+Xy3!Z^qI|YDn}J*SoUM5gjpltMrWH<7i0Z_(hX$J;?&r2MWF89>@=j z-OT(PHryr)y@G7=h0pyGlSGlePVN|oI9L~K8^>Sea%B#8OaqU3>Rp-zwmWnd`!j`Y z!0>TX4pICXbZ6sGQ$L}BXg#;Eqx-E~p? zG~jtrnB=b}{Nco-1NnaD`1?fp@I*e7kC2@cF##JW0U#;3?w_TN+vN8ekws~eO4GNs zxXApObNA(1%w2m#KXlV%VM15}(SSK7bowwq=1X#66#iReG9WiYXTF%ffPfjqdNmZp ze0qU`kHAlhQt(HTk4izb1Te^$SCyfj0Me$Sz0=^f}?YbWvR z_g55!ZVrCB3+Yt%9L~G z>Ju}Kpo`+|ZF9{DN0}agSy-ttcgl^Ed3yYZXrhCJ*p69elKMcR%}Ri@(jZNG6Qluj zhAbHK4X`Z!{aTjrGy60wuIDlKwv?=5WTg|be=?uwyA$(^@mN2D9h6Zh`PZQ-#T?-j z;2ppebA(fY-vg$YBaE?WIz4AI=D5g6moeAxcdyE&Mf6m1MW6)+x56KkL6Av|lN{Qm zH6#c8IukKPviTzZHD8~=QN!tfypMs2bQa?xgLY2W?699r_cPZ)TYzKkQe2S3agbq5 zR+0sF0FzfRZ$oW3_zntOYUh7EpeG&;zeyd#h&e=Wf-Vd`nc4)>tt@3XU;MZk9h_e5hn&y4c5{Z~=G?)(?Np44FY+J5|>xOy@=Xozy# zzjO8EVOQH9h-&k%Ts`T3aP=2|#%Ln0o&-bc$<yHz(PV6P305EV?7h!GBYe@8x9@=Y=qV2h=9j#w1R(p=ZwD*hv))c0GZP?uG8M1g1pPx`b^rxJf z_32Bzh;X}2cIERFpDny=x|dSvT*zZ&wl7rsD}iy?AKKin0{#^EGsV9e7~`;gqVP4q zh&kJz6fOpK0)L?JwFebYy+Yx~RDUahedO{-6`=xzvB2LatZ1u%CFmFd z%g`DB3afEim*W`*hu(d#+(P8Eam=7 z0<^>3MYNX+G)Ma=E!3XMNbwyoBm=y=(XIygTT0J8O3$qd*8szC+Zu)M1-=Z}Jev4i z+P6Wt2ZYGkw|5kV42m^1hc=x@~9L+}9eAf4X`#Yv=u zl#wj>KU2!^{Ka;u7w~bu3B*F*(;J-LIj}EFVRgi_jg7)s(6-T082h>{CDNYi2IqQ; z;e=h&y>{p%9oR{1@fWl)k_PyT8eBd)9N271z;M#80&gN{3=4t|7!V>Q)^kdRFxprL zqc9A!p1nW^R^xfM^-!Opf(>g;-W*NznvO4I0Io2Ps!>_kZP>G4LGI4fnzW` zH>fx^3~g{~mR*y*NN3hJAd{~`>n`BPwZ=$akgM5+bOrkB4T*X(`Z2OVgL5ha9a+Ho zD(E<=TK9m*ER2T&PR1>ah5Wu2M%&ByLof^pKORgS4Bcx6zfs?ZZIsr>AF!2TJ6-Jy|9vO6RHPr4Ms)N; z>m|L(HJxQVg1P@gHUzT+t50PIDzSjx@537p2zz!GAjid#f%cc42S)vqVCQ9gyI6+N zl?m>Yeme!s9+FfJ_4tBKq9h+S&*1z9N2RgdX3V*;$Q%;*S6*>^c zZB7co!LI zbNKq?yX)=7@hq(keL)|zh^uA$9G*SriUy(6>|@+o;;u`{SE3N>CEPI5@GsV!C;%_% zBwoXi9B@8xvUxm_M|3`(zbQ}ac(*l!x}mdW3%a2T5nMny2kY3igIpsACsL@E}{v3*a{xOz3M-!wg+S2%k!~;$Q&I0~}!gQC&20ld?&p2fAqjGRA-0^Fv zU5WQdC*ZeL;8Ntx0JjsEj;DliY~dZi?kIi;I1*eWe>h5>a651$TTy$wJJRMvwQmEC zx`bu%gHa7;;2B=!PaJ{)ZKgpj^7NH_Mr?V#U}Cdt)u7a_;&UdI(_@EAcXYYRzrrFI zwR19F7P(e2|2CupyvjsaI1TZ-tGLfrUhCRFD4j)oq75x824!IpzbKZ3VhvbT#19wM zyS()cE^qZ7m)D=ncwUoB>)h<}wmss?Wp%C`w#5;!Y|ZTxwG7vUK)~9qg<^ZO(1^FS z5bxAN4qO}l7Hs}HA7u%?QOrG@-z?8ui}zUrLB~8U_}IUU#6=&vV0^_?NbGl) z4?dgxt|kME`FHp>neh$&#losCd#0lnt2$)9DP4oxkrfM!@N9Tz4elTwJQvb4cD|=O zG;a>I!E*!2(KFgufcMG`OZdt$gYX6e*?H2Q>FTy;y5F>Cdfv8Y=3`_0R1Pe`I6sum zrC3Ps$k|JI`n7MN0e{VR}`^9 zgI9qeEszr#`WDx_d*P@G;3DE*jJB8K1b z)K$6d81H^}pW~Q4#5S|BUVdysh&otk8?nfw9Wk>zJGptp5Rm=o}Y2fvDvZL78V0uJghO4!~3MG$U-a2p8|K5l1hvo(-$ zf38;?!>iC(97*A+{04_^-Qoy|UDLgeS_c^&5-=_XuS^}sCNS2JsEbDEKp4@f|E?Bm zfVbH-tG^{+#R}|b_r++Aj+i3@$6}708H_p7PmVdx`f@RP8l_#~e8SWHd=1T?q7{;d zXmJv*L;QAXeFgN~$@&WX`;1L!tRag5yv_QmW0=PL+jUEppLt9=Hl30cd=X};Wd&br zNnS@GgLlj5-b;JfN+Vpf3ZA-<$c4yVPOx@Ohh?aZh){IGjcBq^sepCmldXO>k5n9E z`{-*IQW=YP&1+=UV(!VKCz|zRtejyH6cC1#z;ix5WBixkIoB|vvx5JOuak|dunkm# zTX{?i&}qm%9?ulvkTSl5A$-glp#E&o@GV-MIAO&BJ5VfmoaVXAkYK^?l%OEp8Jy4p)dUL zcc^nSHGX^q%cKX(w;em|6^nfUb2$Uec?}T zp|(oKO+3VkjWBpCNGClPV#+-iFqeWURKtvjQq!PMO29*M{!^uFyM?D>_LS2)G%s@< zJ@>5Xtk1(FPL8F1kO1@P8Fe1jaM-(e&ZY4rGlqkX&7FYnwW6>KSdYR^V1E>L0EZe} zvxXE{6Y{Y_hZQp5C812u4i^#&I z`*S+QG0cyHS|ON?NXLBI4-LyaCTptrI2(ySBAX+RJ7w=}IEJs>Q^m8Vt=xTSz%B~{ z_PsMSyDxm^Z&-+(O67&!PKKU4@7S>J?>JcXX+xt`_8?HeVR?>RG#1|n5kl|?GXE#GfmuXtLk%=*J zH{sC0Cu6fBd3XtLs(ow;DWJ4UjnN4u-!;J3WAPQBo)1M$pjDkTzkxIi25m61P-&4; z8`Or;@XPn8ZM0v|xk@S@m10VU6OJzsopC<8fii(=ctOJXXdZayB^)T7NXBEGTm_y5 z#%3#T{Kv-P2zO>RS&POKEOXBJ5gbKu4Y|-s9-;Nq!2;MH18h3(cvyojqG2;Kwk))> z;W>}!&~*c)G%`YFtVc+mxmxP$d1~xRu;xIdO?uZO1imF}*YjW6R&H^f8VHtF^Z6Fr zN?ZX3Wb2(cD;bZ$o;&#nyRG6Rt7s4Q-^-^89Hl%Pxi4Ym){DF%iLu37SV*Mf=qOt^ z^09Fho*!!ZsJ4{sfne809CvLMxH>rHz;}6iY(*QnRom|fy6@wAxbT+9gFgOr>`I(& ztaS<51Jdi~%g57>AHv{ikd$vx#}D-A?4kA{ronqCa6XP0`cR!oe<;VSccAT#dXy5KZSVZ&ZK&<` zS`=Mp+lo>0@jm#$v%|u~AfX4_bQUq@!OCI&gYMzyh#`@>u3KkY&!8-zug@pCm`1lM zTrVnSx|kPN4*F?@HyZ^%CGp~_;+^DTwhY_ysb4k^IWiXD}P=HZ$Or9<41(INoH*4j|gv#Y~RkW6yADyZael8Zz=Jw35Ivz zmnp*A7VLYNk43YZJv;GB7W}G4D>mPTOrJ|{Luln-#jTNTJ9&Dh*W5MTXB!eL^7l7r z2sD1ZdAtb!8J8^FD|YhR;z=w4hOcRG@7Lw(2EH`bi|c%9Lvlrl>}cTGu@xA4#R2yz zEQJPs>FE7>`%1=fqv{&W>GSkYIE5{OCBPMHq`r%%h*M0K?&4n)Xx_AouaEa$##qeL z7kly2r=l|GZsd<~)k9*1Uxs$`Fu6eTDZW!k_Frv59=2|J&HN>k&YnOVHEl4<!&K_5?ErU8c(5TuVW*Pffi|VKr^2oF9E#}BZp@WxJ=rR z0YjaFr(=->j@iBP^Cn(utLUPHw0JKC7_E>N_hT-6J;{P6_VVW~V&CeZ{|7wD8td(f zd5LvUZ2CoQKKF*&5`9*u5^^v5CkknfFe4|Au zSlx;Pn9YmbARq%z@(*m@?sPQV@f07I<~=s?B^Q0&{4#d9(8QMC4b+-iktUqL9i(Y9Z3;OW{Z`Ge zT*C6K;H>BPlL8iaDh7l7Kf=nL={;^LutULsso-y~kOKSy%0h{R_~)DW_YTPRym$!P zR)Y6<%+a&1qhEbk%lsB&VET*v^Vo`79LEel>p^~xa{1vPcBLUsu(}<~D;}$d;dK#< zHKf}nh;;ecOFVV7=JD^>xC5tvdbj4mdnvEZlD^fDxJr{bFZ1h04$+o^mK*fH%-8TC zV&dOH%$H|h;a?l3eE?cvP(RFr*si*)h=Fte#lI3%AK_CI*63_PC;A#7kDX$xnu4>B za%nN0C3}wX>|`&Fr?e*~l&kF0r>2XBU<+NN&LsuEI!=O^(@ z*9CfRz_Yh&&e49IW#IzGk`z4vdL>dDy_UuMcCD^!oFTKFWO2Fo;;UMw)?m_&EOpBYTE%arCQCaKz9too8rt^2BTWo>(uA5f(%5f=)g`^tH(io%s18 znb7YGf2en-XIIOfPChOcU5;CWf%x~lPKX46>Vmni^H(jl@@|i}OAegiuO%QLSAnG) z!P(_mRWCb#&ev1>G2yNZsMCMJmr~HLs+P^a;1{JKU{}?^U2dI?#a9k2nNn=G=dqe# zAK3h2YWZUttm)cu->kQK=_?K8&N0uDE#zvlP8N2Nb}~&icJUXYMp*JI9P4O=zv7qC z@?F(0+kVAY8J5lH_PkdkGfwi$GVx`^(Zd1joG?W>;y3nyHRQs!MMDn3jC#4@Bz76p z{*yd4__LF|$AYzRvKFu}zn=`$}OsR86jNF3euaYZS0jMnv_&&97j%Z^RZ=BaM{VX(Dtw!d=0eMri+{`S!Jc~JxBTk3zJmHJW}#PCGNTv% z((v=)UOt(NzI<8tJAPnf0Po3k5qC8F3v{t2IQtzwpT}1C>jE5ynD$`(@A(uPjvg{} znjfIL@_qd1&`ZDCg)dIyxM4iw8hj}FnH)ioY9KIT5qtE7O1%J-b@@d=Nd1h6B-jn0l%^-U#&M>7Un{_lics3_RD~Rmv_{NBS zqKQe~kNxHk{BlY=S?#j%4}8VgEV!2yHQ>E7wS^6nFvf}w%)4=3c71^3%DzsS`vJd6 zcn`|j5BT+&M!3+t;yt`OGOsY%IJ$RX#^l)#@C#!v+}w}T%^IZdTRvpv)yHgo1+uH3 z&w=M%f8?7`8ShVitw6FuUbHaFg`X$lYFdFjTu6`D~Z;ECi8m+@%;4l0+M{GI0vBl4@S+Mjg z{s=`>@NAgBVdYh_(<v!yJ~xh_M27b&SBZDiKX68&p#`e{|g!a$tV+YFeQa( z>oz-!)X{A{{lkVNAU>jbt}carQ7%oZ8x|U^6h}9Teon}RY?WyMbxvh;0qVhF9cjAx zoaTkG4)9usd9H5rd88-0L7iOS66x{fxS_AcMSLzU;jZ8Ym&oR}>yW#&U~_`7V>8rc zOQP5#`mDj(Nn#hbUAZUmy~V+9w^)SdrlhP4nU^B)H8XOLN4BMiak1sC@dds|lFB{7 zo)mGTRcKb3mo6R_UaLHujueKvH(gv4d))yXrHrofGQ{_h!ti~>!#ESTf?Z>UB|3%S z6rYlEE;Twy(s!Z8cIME;6l`adx$zP<5ntO{cK5Rcb!wo$)2Wh+HSt^I==@B9ZT^s~ z&J-zB*JTQ0Q$)`0%oGiD7B9;Zqp7aJ-*E8?*_I_%s;utL7O%us;A@yv%BsPhZ1Dnz z&K={${4q$r<#UfYbjN0g*FgsWY)YI`xzYRC@nYAc75L(XHzw{c#lD+>FT*o%&ib=| z|C}(kn18s0Y=z>&iQ;-#P&ZM0n+&q%imB$ytYBfTz?IItLsU)@D~R1WNzCA0d2W)} zJaSbN&Ii}R(i?H*a0GWu7E8D<4*@Y5dH&y(Jn%0p|4#mY!Mom2{GT?+YcdVZD})nE zL-^4>%2{}79$v@bE?eFnY|9f*a6TwYr@$G5vUUo*H7L8Mh+RguUtd8Tn&p-mj$ z^1RyZ(G%hMXX*5X)0GW>zA-4zOckGxDUV^6Fn%2y_J5CAgr9H4$*>$<;^I(IvS*q| zr7Oh#QkgMLY_;J93vN2C)5P~P=_Fr``Nl85?9bvflu8FGyPqXs$0xD+;Ogn(HZdNp zPZi^@qQd4yCo1iQ9O2aNshL zDs1H)o{CE8oQ0!`If9Z|Vq)4Lu5R4wXU#J(+Cg0HFq(|#Q@lO0eil|XjKNC?_vKthsK)>_f=jlCdXA&c1&OlFDWWz^W_2;9K6%$mxGs!<+0w)8smn;%4Q2( zY~aR0*)&_+nB{Gw?x-uw$#-AGi8gZn!R;x{IK4Qp5aVbC?r)d*cr?#Bjfwl_21~CH zA4De!NPDT450+g4fhX!yg;8uKD6Qcyqv0Q5~$kPTXlps5-_1 z^kp{7@-sVTvr0N{6pz_%!MD+6vh7AO-*(G!JnmV9jB`uBEpxTh7l~E2TRyavua>Qg z#L|Q%&-^4ikFpltDc*9x{ce$TEf&{LG9E)YA$H0VsBFO>7@oop%ueG6X7~>F=7TQA zup(~3i_=_Lw;0a7rISN<$6_&2Jq|1u7ugJfp!N+hgp(kc3q4FmNykYH!yycfx~lVv8-JpuCmc%i9E4Hq~plmzeJ3qllxM!7FG39 zk$&whn_c@BS@V6M3j{=yq z7O#)j;#KiljDM}{UMl{ScFVSe^0HWsvAP7Ux-(N}BQRFbYGhBTxXos;W$`jG!+5Nb z{$u63u_O{wwvHDdh9SB`C93}329}m zJc!C*oEVnripbQZe=W!dUpUa;fxJ zh;-iui0Vouy5XL1I3;ia4TDHI0ov>+IUTgKz*-b-aX6exkeomt(pL!@ImB&H45#po zigu38O@UVyN884m!0ea#tKgMZxd7G70>!J2SZ-FNq;I+vB zY3Y=QQTcY@8%NVm=lMdEg~Jzp}?R{o@d< zx#4hipA4b-Bn|yS-1xvED@Je!62%aWRAB^n8faZ zt+4lw+0-;WxhSfc8(RCpD#ou^MC!~Euyz=&mqfR=Wk4hZUX{Tcb{&ke6^6rix?~qL zPlINjVThQmq1^_XH_*yG6Gf+Hwc+qx88Tz7NMF|sBQ%4(Y^YaidN>^ZP5@2K^f9cm zI~?9v1$y5FD$j(&-z@q}^%|Yd{V&ezfo-eOsDE3|lI6)GP_q@u1Q+Ll;ML1Q&@$9ZWqwkjNc#6fA)jJ-wY zbzTSNVyWGRrQL+~kTX7{6C-$Jhb#dLn`{+H%my!GSRxLI_WSs&RIt|hK`u2qAKrVR zBo4-Y|1fxFd<{<*1`<~a-T-+0DD)wD7~9-|iK#YpotF&bVCxU@_uo~pgqlRcjheyM z7KbbW>+4>ypxyXTFa6>03z)$3#Lt1Y0W{O9`OzL3;Q_Bzwm}u|mM2IfP4R_}h2{~k z^-wiv@^QSqvU^85KUxGSJR|R>tOztVE4|oz>y+O9h6$Eawh9 zdqLk}*mB;oakhfjCG~H?H@&h9RWjx(+Oy8H;qc47atBy5SA%6{*%i?aj)%ej)rUD+ zZFF#6I*NzEzsQw+q?v5aL7@+9jIRL;_o4M*kq7e(hRK3iT?P0d6wC_AGLq;8H@Y#* zI(bI!0BdFwSQtA_Ps7m&{Uc%4n?2xN7^%dAS#LRIA9di8=cvk;CDnKx&>Rl;)|ih7 z!QK!(rgKChm{$yh!@nzm#vY@$;%Fy~a)!h2IKk^Rc;_wHQMurqkRel3FREo&mfUn# z#gG<6+o+AsQ{62WB&d_nA{KM@cA(=YL zK%ox_ZGcd%bl!p441q-Q^dT08^TFXgcZw9d3)|iY-Ln1;dhW&ZY4tpa=d<)YTJ&3~ zPPM_3ez*C!0FOE5V|?iA13ii@4A z^Rx{$Ywoz^c5VD>x%XbNd`1ZJAzZ6M0>uJ=&vn;cw^*A6ky!1zt8bip6+Kr0)ELCL z;3wY}R|@={s5U)+T7fq0l3CLVW)&0!=YCf_6f@f2sdGQx7yElq`cMXRzKNkYWPhy~ zJ7tpx&l(Ee(r+q6(NT&~N>EBsyeQQuH7Iq#f(OJ8`E}buWY<;nAAGJ|bp6GJg_q2{ zcp5Sr-`ubBZ=>PAFFy6r`TeayZL4@zY|aW9}-z&Taolj@vRioK4R+pp@TYq7{-6EXy>LJyhy)4uyfNr z!RHxvJ!&rc$Vij+#obDkZ3?l&a!IO{G$mYSdI}RPm#xQm0BiYAQ{t1W^0vKdq{? zp{CNVN(eQTPF1>4Q|VEq4>gs3RR&N~88k}+)45R`sHwPA@t~%n>D)*EX~QPf^QibNfApp>-N*ih_?W%-OQ|VNt z3pJG|#1MiUTzjmnt6ARJ0=c4@#~o`KYNBs-mN&Qmje|YAU6w zcu{+0^)3-|G32W-KIWQhEHu{P$Oq=?d@tp9rt`)_M623aUl43=5|<{$ZK($x3v$ar z+50rUM){^!W*o$qIqQq$Y@=?KWmH!?Hs-cTufslKa4o}>EiUYYR> z>U%QeY@;rdWmM}$awFA6?XsEbYkK5is^__7uTj^?b4HE!&w@T*m$Qw!MV3*$V58hf z^}x+V!KNh2e0`k(JxJZ0+wOkbx zXX4i5RowbkTm!z4pN7OG!H3(0kK0YEOnO;tk6YiWvuf<Xxx%G3(gEvug z5|9;#AzY2$+}>UcU#143ZYG!cN5n;TlPb%Ph*D9VAzwKnuCU);Op@}eBcfT{Hz1pj zip)5J7Q!7jSKj`*SS-^+;#yNMBySCg@7iw<>1;z~@S~78#TAghJ|=D~xV;0~I{8}| z$T!oGho7W>bKy>%q{o2vS5CIF@fgMP#3(}v$>pz#!nh5UI=c&Qvu`AeF)~P6uHgI? zPK}8tvwnh+-PNMAyL)jLyO`XNEWi3dWClO_iCD(%CQB}OO-$16f-~+q$gS7Hh`-{^ z7hgsjJI7$}!eRHW!*cg)VrJaky*j%GXM&hBG|;p1M5h>GH;M9honpTI?m-ARkCrB8@BMx}S;Nc9STrC&W#0 zI#yUwJ8nNq$o?t8JtxE)+-^{va{VvFR!zs+(id>C0uDPq8b%*wY54E6pkkHjWisWL z;%a-56M8CT#V^If_M%GCDgXLQ@kCrvyUwra!L{UW@?#g5^=}H7+{-fpsF)f=Kt z6rGlTeM3B8FFK8;{c=;cxFqhH9-Ys_$!)~W;imW6O{yIAmZ%ZMR{7vtVy?XyUk(?0 zWY=40H4o48YH*}^fCgkl?wvf*dOx?en1KnMBq3k_4W@5i4W2Q5@k!@NZ|ByRBGQJ0 z^z@Q+ug>S|kluHm^e%3FFCuM7$hGf4dOi}D+LVwl_K|dp&KGQi z^na1`l;FMZin-iwQf26rxY0g;5E4v!-ov~u*r@Y`r8u&#HKiYXPaNiUlPc%GFXq`7 z)I+*ae*b+jBW__Sq}yHcWLg&}#;~SOjr1pAo&6-F!5<(pyhREf_Hx;p3F?xQg6w}-%&FxQkyW6aQ-OE z8A`%qU6x-`68^+x*arxsh6Kw!$i=}Ci57f`k1UduWZ7!HJ!I*Wo5op2 z%l0J8iaCis>|fj6w8Ci$-#N47C51(J$S3flEx`3 zKaghmvvr=^(n1|RXhRrTUNRmnh$6W=-Livnb9M&RE%HYhmR8Em%g0!nC^!FQj3q1< zw#mPawQLn|p>Ld}CUHxPC68xD4YNHMt6Bb*I&uppa7!bN8>KDiDzwZJBex(*3_?5V zkSv{L`EbIP5Ih+9L~cBpAdqJ*B*z3~D=)WX*_$vAyZy2r&o=xkt)fi^FSkr2Qs3p4 z38Gb(j@hW6?vnXbKbI~`ss8X4>8CobP_|N?aZ+|so%xX*q`IJ8YFD7XOq0c^?X#-z zt&LZ1xB^`+KY@2KEwcFv%cYqx1s_}*1l2l+IrsqMe}voQXIEH``nGfug!v?vrSsc! z6s8g70~?ns0K#9>`ATmT{|2b>C~QT<4_lD?=H{Z&2M*?x$|=2PQeI!aH?2ZH^_A zH_1hFEGxx5wZTJkEK|78Hvl0ogy?_Y#Wke_nEtI&`rkHOJsN>C6vo_b!nhgzyP@>I zJ-}FiL;L{nxhVcqFarA{+W=u0#a{uY_R1)J94E1+E)Yg2fj1z~7lr$Dwuih{2$xZZ zf5bJy1?(b#|NR9RFoFd~`vG9pp|I=hNG^QjG209Llajw41V2aNG@Qh@6{!ZGi5#81 zSsEoU1^5u~4%J{fP+zI^9O%OT$lR@I11Lb5s!p8~Fq;=||B*y0549_Cw+@NS?vr4RI35ZO19OX)-S z8ekd$eF!f^5Zu^nVuP?q=Zi3D#)ky3@1BP@0n?n(hxl;Gd3dkR7n@v@{}?d2h(09$ z3@`-|eF(pTAXrR3rwjJ2ltpXz)WO)7mLZ?ypj3}oU2;I=5727ERO zPto~JQ69JY=7UfdB~S%iABFF`0Pg^99pvwX;uCYm@SB5(AH ze+^4#^Fp9i8+`opYFJmbJs{*Jm<_Jd+5IKJJCuTXIv?Lle1(_l>=WYGD(uC9kUG&7 z#d|3v4dCBS)Ec=ZB>_Bfqg(TxT< zW&?Y=&NlZ!V79_pI{R@Q@M488I^X4X9FKoY9`Y(aJUFWixKLpnmaGSX)s)!bvA1;K zszm0a5!tcKnutIyL$bEt4IGNXex1G74qT}eJ_H4%utecUkZCmF$N=`~?0e1dRHx!& zGccDigs8tGI=hO3@x60+h?`U&7@^9xz=V z6Ayz6hUH_%p#7mJJXL2?`jKh#O#LylF{Q>b^l63xF$;C}Q41c`h+@8hRe|;q17cQS z_viyw2F9#Kl+%=`IgVMcv&%Ljd^V^KzJoc=0iWg=1B}^)XX68d@rl7DYdsCXr$!Wm zb-B_Bf>S9t1O;*okFj94!131#bGM$fU1y%+* zR_iPSF6J&Jk3{xJE-f%K#vEH=@ND!yq+qwsu4#)>(5ACLHv%^+1wr#b&oUJLZ!9Yv ze6=hcztow#5*?}_biAXp%qp-CD|w{yZ4rY7JoIOsom-9mS)UU4TxWk@031WwSLNvIlp<=MDp zSZ!|LO2xlT=dlC8D)!>;#LS!^eQ*rv^W&U>pF^4oi13ik1H_LgY(#=1Ld3xR;3Ig4 z`2UTJdKhCqt2*q`xu6lKJtwXQ1MmW?P>DO`Cx8#WZTS@a{R!uc6@HUIQx*3)R!>w1 zBXFxZ2)0$Nju9z3J6(hhRZ1U`sq^s;2o#$JjF_Y|4@PJyRQPhdgZ6;$L@Z)}Bd*q2 zLI7CJ%m`nJ&TlROLCyV$bvoYqpo7^;0WJ~a;9_2_@O?V#t^zJo_yHV@+R?mD;oZnD zUBJqNBVNQ5ZHU6y6t{$cl}9Fwcnfn*t0B^$PiM2+(1D7T5ufU8=721?4zaRzP~{1X z#5oS{Phef>>MdXqe+srI*^zk1>;?89=p!VRpJQ#>vv=BZgT zTo#X1-h2XlWpR8n@>FS*{7YC3CBSO#<6qVJ1Oz*`st!)#cu)nlN8xu68t`~TpD+Fl z6qG3fjo_^LCW-Z`24Cq+Cxyx*Ba?JKi(H&z@<)!w@|+E<65mKoXE%DH@GShPCk?Px z$>V@zp6WFkppT7Qg%RT!J~Bo;5(lCZ2cQa)ksBlT4#j^EdkfgcRse%X?!**O43LKi z@5OFSQ=&XN@&yEGA+TE+@RIq?)yyZwXaJYdd%4I~F!EhcV)Q*>VF`(=w1*L6$L)QJ8DD3!Y*y{O?j69rq!or!j*vF-3X{+$CVS6XRw@IlXZ6H5cmV;fLznCnk+g9DwDcq z>+EevZ;FC2T8H{N-3}b>K$~KqxHj08}1z!6O$rfz=-Bl9(B^ zAJXT060uOA2#5t2HdTxbA2q^PF;xoyBOPKdiJl_YJ2-a0#gW^93m)3-2Ue@gHGo*E z1}sws0dO@Ra){SKc4R>7DsP3QJTV3qn4X6h^$fI_u;60X8> z&ja=&n6X>v>* zH}i0b$ zkF5f3H06^l2vRu5NO+j@B*fVFs6(YM2^m@4_~3tdAPINYCh!fHQiID7)$l-Mn@*am zvzpVuy{ZFzk+ft3V<{>ok`^KlR8xD+)VC5r7cr3Z!NW~CV5A-=&JP0uQM z-16!B4CX6UgmXGOMJ`eT?wIrU5VuQbAst(SGRTb^+xr-Sy~k|t&cdz?e&ovO#vyqe zVdZi+mhHSUV3o?<@Zh^Gbi?aY3a;0A&Or#2DZC7+lU(RQP-4XHTXgmt53q8%8%M(E zL_~i-Y`%KZO!@5yQqtG2^x?X(q8nHxHg^Cq*Ny%obK=I0t(lgUnj<$((e%aEkj2P+ zTSy^O3gO~KGzAfb2+G9-RSdYl)Y&VYu%*D1PliXELtrcY$=Dl25BiVX6O!Sw`v%B( zbHvG)B8aM@8eEB(C;;{=g^LlSO~9JMWjJTh2-R6Lc~yj;Wq2g{R;&^V!eS+Vr_O%t zD+EEU<76L#FaWG#Ah{ODd<{59HFy{!=m3t4pcPR}F{5H48E4DrRger1ZfjTaSf*F5L9oHN0fmn$o)6C zfYp?wAoDe8fXd*M^+-%zz-mfT?#BLq<6#gY3itW}=wlv0QXWIlP)tM=K8KT14`4+8 z^~eiY%`_N^Y;P<0YBNf~6|^bJV=3=pN@$AQYQUesK#h-$=0^}jJic&8_swRWgh*Ph@{{@#D@4Bo?9w)3)GElwwN%d{Q z0fY!@drif%!JPvi_>nV~x)&p$7>Ou+LT6v!0jy#q^)M2TADHAZ$EmMk6?h11X8Yfs zzf4p6z;_JueW^GwEb1qM>M)EqHRK`{lpZXb(v85%<(@38Yx0OnTppzE#(ZEh5C(Xz z(pg^!__R4I_H*w(IO`gD}XLLacw!&+*NQ4g!ZoaJlE# zi1I_EPZDt?$cY&7|4C$j1UDT@tU{D$oi#Y{ZhJk5!>nxF0%^B6<{pTOU)3)hs!9nmV75`Cu z6;yzxEeb!0BODC0AclP!NTRjVKk ziDYCBzMbEoIykGddqW5ZwTebtu{j~eM4`zaJyK`MJD{L9QO;apndEzMHh>DS(N{*2 zj5*rTH{04+l>B#f_Br^GePA@^`u!HjXDI$Q qJzL#y&43!c3#T89W=P>9So1YO_ex6!7lnnv>0ZmiG%4@3%>6%o(;vP7 From f14a401f27d62fb15b1262cd9a81cb6484771d7d Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 23 Nov 2015 11:57:03 +0100 Subject: [PATCH 05/11] Manage free downlink HARQ processes with a circular list. The oldest PID (the PID that was used the longest TTI ago) is at the head and is the next one that will be used. No test is done to check that when a process is allocated it is at least N TTIs old, but some quick thinking strongly leads to the 'conclusion' that N won't be smaller than 8, which seems to be what cat3 UEs require to function properly in the downlink direction (from the eNodeB to the UE). --- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 44 ++++++++++++++++++-- openair1/PHY/LTE_TRANSPORT/defs.h | 7 ++++ openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 5 +++ openair1/SCHED/defs.h | 2 + openair1/SCHED/phy_procedures_lte_eNb.c | 50 +++++++++++++++++------ 5 files changed, 92 insertions(+), 16 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index a77501e14c..49d83aadef 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -1102,8 +1102,12 @@ int generate_eNB_dlsch_params_from_dci(int frame, dlsch[0]->harq_ids[subframe] = harq_pid; - if (dlsch0_harq->round == 0) + if (dlsch0_harq->round == 0) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch[0], harq_pid); dlsch0_harq->status = ACTIVE; + } break; @@ -1237,6 +1241,9 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch[0], harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); // MCS and TBS don't change across HARQ rounds @@ -1605,10 +1612,16 @@ int generate_eNB_dlsch_params_from_dci(int frame, // reset HARQ process if this is the first transmission if (dlsch0_harq->round == 0) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; } if (dlsch1_harq->round == 0) { + /* necessary test? */ + if (dlsch1_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch1, harq_pid); dlsch1_harq->status = ACTIVE; } @@ -1986,10 +1999,16 @@ int generate_eNB_dlsch_params_from_dci(int frame, // reset HARQ process if this is the first transmission if ((dlsch0->active==1) && (dlsch0_harq->round == 0)) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; } if ((dlsch1->active==1) && (dlsch1_harq->round == 0)) { + /* necessary test? */ + if (dlsch1_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch1, harq_pid); dlsch1_harq->status = ACTIVE; } @@ -2131,16 +2150,23 @@ int generate_eNB_dlsch_params_from_dci(int frame, // check if either TB is disabled (see 36-213 V8.6 p. 26) - if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0)) + if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0)) { + LOG_W(PHY, "what to do with respect to get_harq_pid_from_freelist?\n"); dlsch0_harq->status = DISABLED; + } - if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0)) + if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0)) { + LOG_W(PHY, "what to do with respect to get_harq_pid_from_freelist?\n"); dlsch1_harq->status = DISABLED; + } dlsch0_harq->Nl = 1; if (dlsch0_harq->round == 0) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); } @@ -2305,11 +2331,17 @@ int generate_eNB_dlsch_params_from_dci(int frame, if ((dlsch0_harq->round == 0) && (dlsch0->active == 1) ) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; dlsch0_harq->mcs = mcs1; } if ((dlsch1_harq->round == 0) && (dlsch1->active == 1) ) { + /* necessary test? */ + if (dlsch1_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch1, harq_pid); dlsch1_harq->status = ACTIVE; dlsch1_harq->mcs = mcs2; } @@ -2473,6 +2505,9 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); } @@ -2602,6 +2637,9 @@ int generate_eNB_dlsch_params_from_dci(int frame, // dlsch0_harq->Ndi = ((DCI1E_5MHz_2A_M10PRB_TDD_t *)dci_pdu)->ndi; if (dlsch0_harq->round == 0) { + /* necessary test? */ + if (dlsch0_harq->status == SCH_IDLE) + get_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); } diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h index a21693fea0..55b9c4fe44 100644 --- a/openair1/PHY/LTE_TRANSPORT/defs.h +++ b/openair1/PHY/LTE_TRANSPORT/defs.h @@ -258,6 +258,13 @@ typedef struct { uint8_t error_threshold; /// Pointers to 8 HARQ processes for the DLSCH LTE_DL_eNB_HARQ_t *harq_processes[8]; + /// circular list of free harq PIDs (the oldest come first) + /// (10 is arbitrary value, must be > to max number of DL HARQ processes in LTE) + int harq_pid_freelist[10]; + /// the head position of the free list (if list is free then head=tail) + int head_freelist; + /// the tail position of the free list + int tail_freelist; /// Number of soft channel bits uint32_t G; /// Codebook index for this dlsch (0,1,2,3) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 83066480b4..f051dc3ecf 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -152,6 +152,9 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne for (i=0; i<10; i++) dlsch->harq_ids[i] = Mdlharq; + dlsch->head_freelist = 0; + dlsch->tail_freelist = 0; + for (i=0; iharq_processes[i] = (LTE_DL_eNB_HARQ_t *)malloc16(sizeof(LTE_DL_eNB_HARQ_t)); LOG_T(PHY, "Required mem size %d (bw scaling %d), dlsch->harq_processes[%d] %p\n", @@ -192,6 +195,8 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne msg("Can't get harq_p %d\n",i); exit_flag=3; } + + put_harq_pid_in_freelist(dlsch, i); } if (exit_flag==0) { diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index bebe476dcd..34c814a3c8 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -401,6 +401,8 @@ uint16_t get_Np(uint8_t N_RB_DL,uint8_t nCCE,uint8_t plus1); int get_nCCE_offset(unsigned char L, int nCCE, int common_dci, unsigned short rnti, unsigned char subframe); +void put_harq_pid_in_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid); +void get_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid); int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB); int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB); diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 28d50ec1ad..4d5971c074 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -136,6 +136,21 @@ uint8_t is_SR_subframe(PHY_VARS_eNB *phy_vars_eNB,uint8_t UE_id,uint8_t sched_su return(0); } +void put_harq_pid_in_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid) +{ + DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->tail_freelist] = harq_pid; + DLSCH_ptr->tail_freelist = (DLSCH_ptr->tail_freelist + 1) % 10; +} + +void get_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid) +{ + if (DLSCH_ptr->head_freelist == DLSCH_ptr->tail_freelist) { + LOG_E(PHY, "%s:%d: you cannot read this!\n", __FILE__, __LINE__); + abort(); + } + DLSCH_ptr->head_freelist = (DLSCH_ptr->head_freelist + 1) % 10; +} + int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB) { uint8_t i; @@ -178,6 +193,7 @@ int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB) int32_t remove_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB, uint8_t abstraction_flag) { uint8_t i; + int j; for (i=0; idlsch_eNB[i]==NULL) || (phy_vars_eNB->ulsch_eNB[i]==NULL)) { @@ -196,6 +212,13 @@ int32_t remove_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB, uint8_t abstraction //phy_vars_eNB->eNB_UE_stats[i].crnti = 0; memset(&phy_vars_eNB->eNB_UE_stats[i],0,sizeof(LTE_eNB_UE_stats)); // mac_exit_wrapper("Removing UE"); + + /* clear the harq pid freelist */ + phy_vars_eNB->dlsch_eNB[i][0]->head_freelist = 0; + phy_vars_eNB->dlsch_eNB[i][0]->tail_freelist = 0; + for (j = 0; j < 8; j++) + put_harq_pid_in_freelist(phy_vars_eNB->dlsch_eNB[i][0], j); + return(i); } } @@ -248,18 +271,7 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 for (i=0; iMdlharq; i++) { if (DLSCH_ptr->harq_processes[i]!=NULL) { - if (DLSCH_ptr->harq_processes[i]->status != ACTIVE) { - // store first inactive process - if (hp2sf[i] == subframe && first_proc_found == 0) { - first_proc_found = 1; - *harq_pid = i; - *round = 0; - LOG_D(PHY,"process %d is first free process\n",i); - } - else { - LOG_D(PHY,"process %d is free\n",i); - } - } else { + if (DLSCH_ptr->harq_processes[i]->status == ACTIVE) { sf2 = (DLSCH_ptr->harq_processes[i]->frame*10) + DLSCH_ptr->harq_processes[i]->subframe; if (sf2<=sf1) sfdiff = sf1-sf2; @@ -279,6 +291,14 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 return(-1); } } + + /* if no active harq pid, get the oldest in the freelist, if any */ + if (*harq_pid == 255 && DLSCH_ptr->head_freelist != DLSCH_ptr->tail_freelist) { + *harq_pid = DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]; + *round = 0; + LOG_D(PHY,"process %d is first free process\n", *harq_pid); + } + LOG_D(PHY,"get_ue_active_harq_pid DL => Frame %d, Subframe %d : harq_pid %d\n", frame,subframe,*harq_pid); } else { // This is a UL request @@ -297,7 +317,6 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 return(0); } - int CCE_table[800]; void init_nCCE_table(void) @@ -2869,6 +2888,7 @@ void process_HARQ_feedback(uint8_t UE_id, dlsch_harq_proc->round = 0; ue_stats->dlsch_l2_errors[dl_harq_pid[m]]++; dlsch_harq_proc->status = SCH_IDLE; + put_harq_pid_in_freelist(dlsch, dl_harq_pid[m]); dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq; } } else { @@ -2881,6 +2901,7 @@ void process_HARQ_feedback(uint8_t UE_id, // Received ACK so set round to 0 and set dlsch_harq_pid IDLE dlsch_harq_proc->round = 0; dlsch_harq_proc->status = SCH_IDLE; + put_harq_pid_in_freelist(dlsch, dl_harq_pid[m]); dlsch->harq_ids[dl_subframe] = dlsch->Mdlharq; ue_stats->total_TBS = ue_stats->total_TBS + @@ -3950,6 +3971,9 @@ void phy_procedures_eNB_RX(const unsigned char sched_subframe,PHY_VARS_eNB *phy_ phy_vars_eNB->eNB_UE_stats[i].sr_received++; if (phy_vars_eNB->first_sr[i] == 1) { // this is the first request for uplink after Connection Setup, so clear HARQ process 0 use for Msg4 + /* is this test necessary? */ + if (phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->status != SCH_IDLE) + put_harq_pid_in_freelist(phy_vars_eNB->dlsch_eNB[i][0], 0); phy_vars_eNB->first_sr[i] = 0; phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->round=0; phy_vars_eNB->dlsch_eNB[i][0]->harq_processes[0]->status=SCH_IDLE; From e56bae9f91608a52b4d90935f14c4649dfe50c6d Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 24 Nov 2015 13:56:00 +0100 Subject: [PATCH 06/11] added TDD config option to lte-softmodem command line --- .../CONF/enb.band7.tm1.exmimo2.conf | 14 +++++++------- targets/RT/USER/lte-softmodem.c | 18 +++++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf index 212f341580..3ce32398f7 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -17,7 +17,7 @@ eNBs = mobile_country_code = "208"; - mobile_network_code = "92"; + mobile_network_code = "93"; ////////// Physical parameters: @@ -31,7 +31,7 @@ eNBs = downlink_frequency = 2680000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; - N_RB_DL = 50; + N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antennas_tx = 1; nb_antennas_rx = 1; @@ -131,7 +131,7 @@ eNBs = }; ////////// MME parameters: - mme_ip_address = ( { ipv4 = "10.0.1.1"; + mme_ip_address = ( { ipv4 = "192.168.12.171"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; @@ -140,11 +140,11 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth3"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "10.0.1.229/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth2"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.80/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth3"; - ENB_IPV4_ADDRESS_FOR_S1U = "10.0.1.229/24"; + ENB_INTERFACE_NAME_FOR_S1U = "eth2"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.80/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 30e8199582..bca6f4ff44 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -422,7 +422,7 @@ void help (void) { printf(" --ue-txgain set UE TX gain\n"); printf(" --ue-scan_carrier set UE to scan around carrier\n"); printf(" --loop-memory get softmodem (UE) to loop through memory instead of acquiring from HW\n"); - printf(" -C Set the downlink frequecny for all Component carrier\n"); + printf(" -C Set the downlink frequency for all component carriers\n"); printf(" -d Enable soft scope and L1 and L2 stats (Xforms)\n"); printf(" -F Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"); printf(" -g Set the global log level, valide options: (9:trace, 8/7:debug, 6:info, 4:warn, 3:error)\n"); @@ -436,6 +436,7 @@ void help (void) { printf(" -r Set the PRB, valid values: 6, 25, 50, 100 \n"); printf(" -S Skip the missed slots/subframes \n"); printf(" -t Set the maximum uplink MCS\n"); + printf(" -T Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n"); printf(" -U Set the lte softmodem as a UE\n"); printf(" -W Enable L2 wireshark messages on localhost \n"); printf(" -V Enable VCD (generated file will be located atopenair_dump_eNB.vcd, read it with target/RT/USER/eNB.gtkw\n"); @@ -2061,7 +2062,7 @@ static void get_options (int argc, char **argv) {NULL, 0, NULL, 0} }; - while ((c = getopt_long (argc, argv, "C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:x:",long_options,NULL)) != -1) { + while ((c = getopt_long (argc, argv, "C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:",long_options,NULL)) != -1) { switch (c) { case LONG_OPTION_MAXPOWER: tx_max_power[0]=atoi(optarg); @@ -2326,8 +2327,13 @@ static void get_options (int argc, char **argv) printf("Transmission mode > 2 (%d) not supported for the moment\n",transmission_mode); exit(-1); } - break; + + case 'T': + for (CC_id=0; CC_idframe_type = TDD; + break; + case 'h': help (); exit (-1); @@ -2487,12 +2493,10 @@ int main( int argc, char **argv ) memset(tx_max_power,0,sizeof(int)*MAX_NUM_CCs); set_latency_target(); - - for (CC_id=0; CC_idframe_type = FDD; /* TDD */ + frame_parms[CC_id]->frame_type = FDD; frame_parms[CC_id]->tdd_config = 3; frame_parms[CC_id]->tdd_config_S = 0; frame_parms[CC_id]->N_RB_DL = 100; @@ -3088,7 +3092,7 @@ int main( int argc, char **argv ) for(CC_id=0; CC_id Date: Thu, 26 Nov 2015 13:54:14 +0100 Subject: [PATCH 07/11] config file for sequans TDD dongle --- .../GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf index 0071b7d002..9444a6f95e 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.exmimo2.conf @@ -17,7 +17,7 @@ eNBs = mobile_country_code = "208"; - mobile_network_code = "92"; + mobile_network_code = "93"; ////////// Physical parameters: @@ -131,7 +131,7 @@ eNBs = }; ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.168.13.11"; + mme_ip_address = ( { ipv4 = "192.168.12.70"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; @@ -141,10 +141,10 @@ eNBs = NETWORK_INTERFACES : { ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.13.10/24"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24"; ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.13.10/24"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; From a31432e37ed07dcdc916b1a5b9702d454a9810a5 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 4 Dec 2015 09:15:08 +0100 Subject: [PATCH 08/11] some cleanup --- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 26 ++++++++++++------------- openair1/SCHED/defs.h | 2 +- openair1/SCHED/phy_procedures_lte_eNb.c | 15 +++++++++----- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 49d83aadef..6d6f36bc63 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -1105,7 +1105,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch[0], harq_pid); + remove_harq_pid_from_freelist(dlsch[0], harq_pid); dlsch0_harq->status = ACTIVE; } @@ -1243,7 +1243,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch[0], harq_pid); + remove_harq_pid_from_freelist(dlsch[0], harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); // MCS and TBS don't change across HARQ rounds @@ -1614,14 +1614,14 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch0, harq_pid); + remove_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; } if (dlsch1_harq->round == 0) { /* necessary test? */ if (dlsch1_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch1, harq_pid); + remove_harq_pid_from_freelist(dlsch1, harq_pid); dlsch1_harq->status = ACTIVE; } @@ -2001,14 +2001,14 @@ int generate_eNB_dlsch_params_from_dci(int frame, if ((dlsch0->active==1) && (dlsch0_harq->round == 0)) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch0, harq_pid); + remove_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; } if ((dlsch1->active==1) && (dlsch1_harq->round == 0)) { /* necessary test? */ if (dlsch1_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch1, harq_pid); + remove_harq_pid_from_freelist(dlsch1, harq_pid); dlsch1_harq->status = ACTIVE; } @@ -2151,12 +2151,12 @@ int generate_eNB_dlsch_params_from_dci(int frame, if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0)) { - LOG_W(PHY, "what to do with respect to get_harq_pid_from_freelist?\n"); + LOG_W(PHY, "what to do with respect to remove_harq_pid_from_freelist?\n"); dlsch0_harq->status = DISABLED; } if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0)) { - LOG_W(PHY, "what to do with respect to get_harq_pid_from_freelist?\n"); + LOG_W(PHY, "what to do with respect to remove_harq_pid_from_freelist?\n"); dlsch1_harq->status = DISABLED; } @@ -2166,7 +2166,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch0, harq_pid); + remove_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); } @@ -2333,7 +2333,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, if ((dlsch0_harq->round == 0) && (dlsch0->active == 1) ) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch0, harq_pid); + remove_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; dlsch0_harq->mcs = mcs1; } @@ -2341,7 +2341,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, if ((dlsch1_harq->round == 0) && (dlsch1->active == 1) ) { /* necessary test? */ if (dlsch1_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch1, harq_pid); + remove_harq_pid_from_freelist(dlsch1, harq_pid); dlsch1_harq->status = ACTIVE; dlsch1_harq->mcs = mcs2; } @@ -2507,7 +2507,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch0, harq_pid); + remove_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); } @@ -2639,7 +2639,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, if (dlsch0_harq->round == 0) { /* necessary test? */ if (dlsch0_harq->status == SCH_IDLE) - get_harq_pid_from_freelist(dlsch0, harq_pid); + remove_harq_pid_from_freelist(dlsch0, harq_pid); dlsch0_harq->status = ACTIVE; // printf("Setting DLSCH process %d to ACTIVE\n",harq_pid); } diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index 34c814a3c8..a88327ba92 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -402,7 +402,7 @@ uint16_t get_Np(uint8_t N_RB_DL,uint8_t nCCE,uint8_t plus1); int get_nCCE_offset(unsigned char L, int nCCE, int common_dci, unsigned short rnti, unsigned char subframe); void put_harq_pid_in_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid); -void get_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid); +void remove_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid); int8_t find_ue(uint16_t rnti, PHY_VARS_eNB *phy_vars_eNB); int32_t add_ue(int16_t rnti, PHY_VARS_eNB *phy_vars_eNB); diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 4d5971c074..d073657519 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -142,12 +142,21 @@ void put_harq_pid_in_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid) DLSCH_ptr->tail_freelist = (DLSCH_ptr->tail_freelist + 1) % 10; } -void get_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid) +void remove_harq_pid_from_freelist(LTE_eNB_DLSCH_t *DLSCH_ptr, int harq_pid) { if (DLSCH_ptr->head_freelist == DLSCH_ptr->tail_freelist) { LOG_E(PHY, "%s:%d: you cannot read this!\n", __FILE__, __LINE__); abort(); } + /* basic check, in case several threads deal with the free list at the same time + * in normal situations it should not happen, that's also why we don't use any + * locking mechanism to protect the free list + * to be refined in case things don't work properly + */ + if (harq_pid != DLSCH_ptr->harq_pid_freelist[DLSCH_ptr->head_freelist]) { + LOG_E(PHY, "%s:%d: critical error, get in touch with the authors\n", __FILE__, __LINE__); + abort(); + } DLSCH_ptr->head_freelist = (DLSCH_ptr->head_freelist + 1) % 10; } @@ -247,15 +256,12 @@ int8_t find_next_ue_index(PHY_VARS_eNB *phy_vars_eNB) int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16_t rnti, const int frame, const uint8_t subframe,uint8_t *harq_pid,uint8_t *round,const uint8_t ul_flag) { - int hp2sf[] = { 1, 2, 3, 4, 6, 7, 8, 9 }; - LTE_eNB_DLSCH_t *DLSCH_ptr; LTE_eNB_ULSCH_t *ULSCH_ptr; uint8_t ulsch_subframe,ulsch_frame; uint8_t i; int8_t UE_id = find_ue(rnti,PHY_vars_eNB_g[Mod_id][CC_id]); int sf1=(10*frame)+subframe,sf2,sfdiff,sfdiff_max=7; - int first_proc_found=0; if (UE_id==-1) { LOG_D(PHY,"Cannot find UE with rnti %x (Mod_id %d, CC_id %d)\n",rnti, Mod_id, CC_id); @@ -283,7 +289,6 @@ int get_ue_active_harq_pid(const uint8_t Mod_id,const uint8_t CC_id,const uint16 sfdiff_max = sfdiff; *harq_pid = i; *round = DLSCH_ptr->harq_processes[i]->round; - first_proc_found = 1; } } } else { // a process is not defined From 64e37d05a7b8eb2395e25d767589406b14b0c235 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Thu, 10 Dec 2015 11:58:48 +0100 Subject: [PATCH 09/11] fixed xml file for configuration params --- cmake_targets/autotests/openair.py | 18 +- .../autotests/run_exec_lte-softmodem_tests.py | 61 +++- cmake_targets/autotests/test_case_list.xml | 302 ++++++++++++------ 3 files changed, 266 insertions(+), 115 deletions(-) diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py index e0acf31cb8..e8d07ba1e1 100644 --- a/cmake_targets/autotests/openair.py +++ b/cmake_targets/autotests/openair.py @@ -43,6 +43,7 @@ import shutil import subprocess import sys import traceback +import time # import call from core import * @@ -82,6 +83,7 @@ class openair(core): return (stdout, stderr) def connect(self, username, password, prompt='PEXPECT_OAI'): + while True: self.prompt1 = prompt self.prompt2 = prompt self.password = '' @@ -103,13 +105,15 @@ class openair(core): self.oai.sendline('uptime') self.oai.prompt() print self.oai.before - + break except Exception, e: error='' error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) error = error + traceback.format_exc() print error - sys.exit(1) + print "Retrying again in 60 seconds" + time.sleep(60) + #sys.exit(1) def connect2(self, username, password, prompt='$'): self.prompt1 = prompt @@ -190,7 +194,7 @@ class openair(core): error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) error = error + traceback.format_exc() print error - sys.exit(1) + #sys.exit(1) def rm_driver(self,oai,user, pw): try: @@ -205,7 +209,7 @@ class openair(core): error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) error = error + traceback.format_exc() print error - sys.exit(1) + #sys.exit(1) def driver(self,oai,user,pw): #pwd = oai.send_recv('pwd') @@ -222,7 +226,7 @@ class openair(core): error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) error = error + traceback.format_exc() print error - sys.exit(1) + #sys.exit(1) def cleandir (self, logdir,debug) : @@ -238,8 +242,8 @@ class openair(core): error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) error = error + traceback.format_exc() print error - sys.exit(1) - #print 'Could not remove the filepath'+ filepath + ' with error ' + OSError + #sys.exit(1) + #print 'Could not remove the filepath'+ filepath + ' with error ' + OSError def create_dir(self,dirname,debug) : if not os.path.exists(dirname) : diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index 6f14cf63f3..faa4f573b2 100644 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -257,6 +257,22 @@ def update_config_file(oai, config_string, logdirRepo, python_script): return cmd #result = oai.send_recv(cmd) +def SSHSessionWrapper(machine, username, key_file, password, logdir_remote_testcase, logdir_local_base): + while True: + try: + ssh = SSHSession(machine , username, key_file, password) + ssh.get_all(logdir_remote_testcase , logdir_local_base) + break + except Exception, e: + error='' + error = error + ' In Class = function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n username = ' + username + '\n machine = ' + machine + '\n logdir_remote = ' + logdir_remote_testcase + '\n logdir_local_base = ' + logdir_local_base + error = error + traceback.format_exc() + print error + print " Trying again in 60 seconds" + time.sleep(60) + print "Continuing ..." + #Function to clean old programs that might be running from earlier execution @@ -366,8 +382,9 @@ class testCaseThread_generic (threading.Thread): #print "ThreadID = " + str(self.threadID) + "ThreadName: " + self.name + " testcasename: " + self.testcasename + "Execution Result = " + res write_file(logfile_task_testcasename, cmd, mode="w") #Now we copy all the remote files - ssh = SSHSession(self.machine , username=user, key_file=None, password=self.password) - ssh.get_all(logdir_remote_testcase , logdir_local_base) + #ssh = SSHSession(self.machine , username=user, key_file=None, password=self.password) + #ssh.get_all(logdir_remote_testcase , logdir_local_base) + SSHSessionWrapper(self.machine, user, None, self.password, logdir_remote_testcase, logdir_local_base) print "Finishing test case : " + self.testcasename + " On machine " + self.machine cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox) #oai.kill(user,mypassword) @@ -378,9 +395,12 @@ class testCaseThread_generic (threading.Thread): error = error + '\n threadID = ' + str(self.threadID) + '\n threadName = ' + self.name + '\n testcasename = ' + self.testcasename + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + '\n timeout = ' + str(self.timeout) error = error + traceback.format_exc() print error - sys.exit() + print "Continuing with next test case..." + #sys.exit() + + def addsudo (cmd, password=""): cmd = 'echo \'' + password + '\' | sudo -S -E bash -c \' ' + cmd + '\' ' return cmd @@ -434,23 +454,26 @@ def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramLis error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + ','.join(MachineList) + '\n timeout = ' + str(timeout) + '\n' error = error + traceback.format_exc() print error - sys.exit(1) + print "Continuing..." + #sys.exit(1) #Blocking wait for all threads related to generic testcase execution, class (compilation and execution) def wait_testcaseclass_generic_threads(threadListGeneric, timeout = 1): + threadListGenericNew=[] for param in threadListGeneric: thread_id = param["thread_id"] machine = param["Machine"] testcasenameold = param["testcasename"] thread_id.join(timeout) if thread_id.isAlive() == True: + threadListGenericNew.append(param) print "thread_id on machine: " + machine + " is still alive: testcasename: " + testcasenameold print " Exiting now..." sys.exit(1) else: print "thread_id on machine: " + machine + " is stopped: testcasename: " + testcasenameold - threadListGeneric.remove(param) - return threadListGeneric + #threadListGeneric.remove(param) + return threadListGenericNew #Function to handle test case class : lte-softmodem def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, password, CleanUpAluLteBox): @@ -760,16 +783,21 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC - ssh = SSHSession(EPCMachine , username=user, key_file=None, password=password) - ssh.get_all(logdir_EPC , logdir_local + '/cmake_targets/autotests/log/'+ testcasename) + #ssh = SSHSession(EPCMachine , username=user, key_file=None, password=password) + #ssh.get_all(logdir_EPC , logdir_local + '/cmake_targets/autotests/log/'+ testcasename) + SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename) print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB - ssh = SSHSession(eNBMachine , username=user, key_file=None, password=password) - ssh.get_all(logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename) + #ssh = SSHSession(eNBMachine , username=user, key_file=None, password=password) + #ssh.get_all(logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename) + SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename) print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE - ssh = SSHSession(UEMachine , username=user, key_file=None, password=password) - ssh.get_all(logdir_UE , logdir_local + '/cmake_targets/autotests/log/'+ testcasename) + #ssh = SSHSession(UEMachine , username=user, key_file=None, password=password) + #ssh.get_all(logdir_UE , logdir_local + '/cmake_targets/autotests/log/'+ testcasename) + SSHSessionWrapper(UEMachine, user, None, password, logdir_UE, logdir_local + '/cmake_targets/autotests/log/'+ testcasename) + + #Currently we only perform throughput tests tput_run_string='' @@ -1159,6 +1187,10 @@ for t in threads_init_setup: sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) index = index+1 + + if os.path.exists(localfile) == 0: + print "Setup log file <" + localfile + "> missing for machine <" + MachineList[index] + ">. Please check the setup log files. Exiting now" + sys.exit(1) #Now we process all the test cases #Now we check if there was error in setup files @@ -1166,7 +1198,7 @@ for t in threads_init_setup: status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup*') if (out != '') : print "There is error in setup of machines" - print "status = " + str(status) + "\n out = " + out + print "status = " + str(status) + "\n Check files for error = " + out print sys.exit(1) @@ -1207,7 +1239,8 @@ for testcase in testcaseList: error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' error = error + traceback.format_exc() print error - sys.exit(1) + print "Continuing to next test case..." + #sys.exit(1) print "Exiting the test cases execution now..." diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index d3092f8828..5c7aa89d01 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -4,11 +4,12 @@ /mnt/sradio/TEST_RESULTS https://gitlab.eurecom.fr/oai/openairinterface5g.git https://gitlab.eurecom.fr/oai/openair-cn.git - feature-34-test_framework + bugfix-56-UE_category3_throughput feature-17-test_framework oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim configure_cots_bandrich_ue* wvdial* run_exec_autotests* iperf /opt/ltebox/tools/stop_ltebox 36000 + calisson stevens mozart nano amerique compilation @@ -872,7 +873,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -924,7 +930,7 @@ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec duration=60.0s True - USRP.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX + USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.1TX.1RX 3 @@ -951,7 +957,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1003,7 +1014,7 @@ throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec duration=60.0s True - USRP.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX + USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.1TX.1RX 3 @@ -1029,7 +1040,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1081,7 +1097,7 @@ throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec duration=60.0s True - USRP.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX + USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.1TX.1RX 3 @@ -1107,7 +1123,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1132,11 +1153,10 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - - True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -1159,7 +1179,7 @@ True - USRP.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX + USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.1TX.1RX 3 @@ -1185,7 +1205,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1210,11 +1235,11 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - + throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=60.0s True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue - throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -1237,7 +1262,7 @@ True - USRP.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX + USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.1TX.1RX 3 @@ -1263,7 +1288,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1288,11 +1318,11 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - + throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=60.0s True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue - throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -1315,7 +1345,7 @@ True - USRP.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX + USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX 3 @@ -1342,7 +1372,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1394,7 +1429,7 @@ throughput_test min=1.0Mbits/sec max=1.0Mbits/sec average=1.0Mbits/sec duration=60.0s True - USRP.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.2TX.2RX + USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.UL.2TX.2RX 3 @@ -1421,7 +1456,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1473,7 +1513,7 @@ throughput_test min=2.0Mbits/sec max=2.0Mbits/sec average=2.0Mbits/sec duration=60.0s True - USRP.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.2TX.2RX + USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.UL.2TX.2RX 3 @@ -1499,7 +1539,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1551,7 +1596,7 @@ throughput_test min=4.0Mbits/sec max=4.0Mbits/sec average=4.0Mbits/sec duration=60.0s True - USRP.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.2TX.2RX + USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.UL.2TX.2RX 3 @@ -1577,7 +1622,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1602,11 +1652,11 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - + throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=60.0s True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue - throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -1629,7 +1679,7 @@ True - USRP.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.2TX.2RX + USRPb210.ALU_EPC.Bandrich.5MHz.FDD.Band_7.DL.2TX.2RX 3 @@ -1655,7 +1705,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1680,11 +1735,11 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - + throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=60.0s True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue - throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -1707,7 +1762,7 @@ True - USRP.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.2TX.2RX + USRPb210.ALU_EPC.Bandrich.10MHz.FDD.Band_7.DL.2TX.2RX 3 @@ -1733,7 +1788,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf rx_gain 120 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_rx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf nb_antennas_tx 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1758,11 +1818,11 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - + throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=60.0s True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue - throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -1785,7 +1845,7 @@ True - USRP.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.2TX.2RX + USRPb210.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.2TX.2RX 3 @@ -1807,7 +1867,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -1872,22 +1937,27 @@ amerique 180 /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf mobile_network_code \"92\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf N_RB_DL 50 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf downlink_frequency 2660000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310..conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf downlink_frequency 2660000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf @@ -1945,22 +2015,27 @@ amerique 180 /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf mobile_network_code \"92\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf N_RB_DL 100 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf downlink_frequency 2660000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf N_RB_DL 100 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf downlink_frequency 2660000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -2027,7 +2102,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c @@ -2052,11 +2132,10 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - - True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -2091,22 +2170,27 @@ amerique 180 /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf mobile_network_code \"92\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf N_RB_DL 50 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf downlink_frequency 2660000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf downlink_frequency 2660000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.epc.conf + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf @@ -2125,11 +2209,10 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - - True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -2173,13 +2256,18 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.111/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf @@ -2198,11 +2286,10 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - - True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -2225,7 +2312,7 @@ True - USRP.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX + USRPx310.ALU_EPC.Bandrich.20MHz.FDD.Band_7.DL.1TX.1RX 3 @@ -2249,7 +2336,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 @@ -2323,7 +2415,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 @@ -2396,7 +2493,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 @@ -2469,9 +2571,14 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai - --eNB -w USRP -x -c + --eNB -w EXMIMO -x -c sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem @@ -2494,11 +2601,10 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - - True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue throughput_test min=4.0Mbits/sec max=5.0Mbits/sec average=4.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -2542,7 +2648,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 @@ -2567,11 +2678,10 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - - True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue throughput_test min=8.0Mbits/sec max=9.0Mbits/sec average=8.5Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" @@ -2615,7 +2725,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf uplink_frequency_offset -120000000 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 @@ -2640,11 +2755,10 @@ while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.2 - - True sudo -S -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue throughput_test min=15.0Mbits/sec max=15.0Mbits/sec average=15.0Mbits/sec duration=60.0s + /tmp BUILD/EPC/epc.local.enb.conf.in MCC \"208\" From 94cd24985a7b8c45f2a31c8f732b35325472173c Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 11 Dec 2015 18:26:56 +0100 Subject: [PATCH 10/11] updated for EXMIMO/X310 kernel module insertion --- cmake_targets/autotests/test_case_list.xml | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 5c7aa89d01..450b659464 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1875,7 +1875,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c - + sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf @@ -1954,7 +1954,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c - + sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf @@ -2010,7 +2010,7 @@ lte-softmodem - calisson + mozart stevens amerique 180 @@ -2032,7 +2032,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c - + sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -2088,7 +2088,7 @@ lte-softmodem - calisson + mozart stevens amerique 180 @@ -2110,7 +2110,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c - + sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf @@ -2165,7 +2165,7 @@ lte-softmodem - calisson + mozart stevens amerique 180 @@ -2187,8 +2187,8 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c - - + sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail + sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf @@ -2242,7 +2242,7 @@ lte-softmodem - calisson + mozart stevens amerique 180 @@ -2264,7 +2264,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP -x -c - + sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.epc.conf @@ -2344,7 +2344,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c - sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 + sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -2423,7 +2423,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c - sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 + sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -2501,7 +2501,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c - sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 + sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -2579,7 +2579,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c - sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 + sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -2656,7 +2656,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c - sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 + sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -2733,7 +2733,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf ENB_PORT_FOR_S1U 2152 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w EXMIMO -x -c - sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 + sudo -E -S $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 ; dmesg|tail $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf From 014d7033a3eb344c6a7e7f8d9767f8e20fa09451 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 15 Dec 2015 14:18:13 +0100 Subject: [PATCH 11/11] minor changes: - added -a option to lte-softmodem for easier testing of different RF chains - added $OPENAIR_TARGETS/bin to path for easier access to init scripts --- oaienv | 3 ++- targets/RT/USER/lte-softmodem.c | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/oaienv b/oaienv index 383c75a4b1..f6b298debf 100644 --- a/oaienv +++ b/oaienv @@ -5,7 +5,8 @@ export OPENAIR1_DIR=$OPENAIR_HOME/openair1 export OPENAIR2_DIR=$OPENAIR_HOME/openair2 export OPENAIR3_DIR=$OPENAIR_HOME/openair3 export OPENAIR_TARGETS=$OPENAIR_HOME/targets -export OPENAIRITS_DIR=$OPENAIR_HOME/openairITS + +export PATH=$PATH:$OPENAIR_TARGETS/bin alias oai='cd $OPENAIR_HOME' alias oai0='cd $OPENAIR0_DIR' diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 3bd561aedc..ec76faa87e 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -289,6 +289,8 @@ double bw = 10.0e6; static int tx_max_power[MAX_NUM_CCs]; /* = {0,0}*/; +int chain_offset=0; + #ifndef EXMIMO char ref[128] = "internal"; char channels[128] = "0"; @@ -2057,7 +2059,7 @@ static void get_options (int argc, char **argv) {NULL, 0, NULL, 0} }; - while ((c = getopt_long (argc, argv, "C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:",long_options,NULL)) != -1) { + while ((c = getopt_long (argc, argv, "a:C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:",long_options,NULL)) != -1) { switch (c) { case LONG_OPTION_MAXPOWER: tx_max_power[0]=atoi(optarg); @@ -2145,6 +2147,10 @@ static void get_options (int argc, char **argv) break; + case 'a': + chain_offset = atoi(optarg); + break; + case 'd': #ifdef XFORMS do_forms=1; @@ -3053,7 +3059,7 @@ int main( int argc, char **argv ) for(CC_id=0; CC_id